diff --git a/internal/types/types.go b/internal/types/types.go index a9b46611..aca9e31c 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -442,9 +442,6 @@ func (s Status) IsValidWithCustom(customStatuses []string) bool { type IssueType string // Issue type constants -// Note: Gas Town-specific types (agent, role, rig, convoy, slot) have been removed. -// Use custom types via `bd config set types.custom "agent,role,..."` if needed. -// These types are now identified by labels (gt:agent, gt:role, etc.) instead. const ( TypeBug IssueType = "bug" TypeFeature IssueType = "feature" @@ -455,13 +452,18 @@ const ( TypeMergeRequest IssueType = "merge-request" // Merge queue entry for refinery processing TypeMolecule IssueType = "molecule" // Template molecule for issue hierarchies TypeGate IssueType = "gate" // Async coordination gate + TypeAgent IssueType = "agent" // Agent identity bead + TypeRole IssueType = "role" // Agent role definition + TypeRig IssueType = "rig" // Rig identity bead (project container) + TypeConvoy IssueType = "convoy" // Cross-project tracking with reactive completion TypeEvent IssueType = "event" // Operational state change record + TypeSlot IssueType = "slot" // Exclusive access slot (merge-slot gate) ) // IsValid checks if the issue type value is valid (built-in types only) func (t IssueType) IsValid() bool { switch t { - case TypeBug, TypeFeature, TypeTask, TypeEpic, TypeChore, TypeMessage, TypeMergeRequest, TypeMolecule, TypeGate, TypeEvent: + case TypeBug, TypeFeature, TypeTask, TypeEpic, TypeChore, TypeMessage, TypeMergeRequest, TypeMolecule, TypeGate, TypeAgent, TypeRole, TypeRig, TypeConvoy, TypeEvent, TypeSlot: return true } return false diff --git a/internal/types/types_test.go b/internal/types/types_test.go index c2c7b5e4..4305add8 100644 --- a/internal/types/types_test.go +++ b/internal/types/types_test.go @@ -442,14 +442,14 @@ func TestValidateForImport(t *testing.T) { wantErr: false, // Should pass - federation trust model }, { - name: "custom type agent is trusted", + name: "built-in type agent passes", issue: Issue{ Title: "Test Issue", Status: StatusOpen, Priority: 1, - IssueType: IssueType("agent"), // Gas Town custom type + IssueType: TypeAgent, // Gas Town built-in type }, - wantErr: false, // Should pass - federation trust model + wantErr: false, }, { name: "empty type defaults to task (handled by SetDefaults)", @@ -548,11 +548,12 @@ func TestIssueTypeIsValid(t *testing.T) { {TypeMergeRequest, true}, {TypeMolecule, true}, {TypeGate, true}, + {TypeAgent, true}, + {TypeRole, true}, + {TypeRig, true}, + {TypeConvoy, true}, {TypeEvent, true}, - // Gas Town types (agent, role, rig, convoy, slot) have been removed - // They are now identified by labels (gt:agent, etc.) instead - {IssueType("agent"), false}, // Now requires custom type config - {IssueType("convoy"), false}, // Now requires custom type config + {TypeSlot, true}, {IssueType("invalid"), false}, {IssueType(""), false}, } @@ -585,13 +586,16 @@ func TestIssueTypeIsBuiltIn(t *testing.T) { {TypeMergeRequest, true}, {TypeMolecule, true}, {TypeGate, true}, + {TypeAgent, true}, + {TypeRole, true}, + {TypeRig, true}, + {TypeConvoy, true}, {TypeEvent, true}, + {TypeSlot, true}, // Custom types (not built-in) - {IssueType("pm"), false}, // Custom type from child repo - {IssueType("llm"), false}, // Custom type from child repo - {IssueType("agent"), false}, // Gas Town custom type - {IssueType("convoy"), false}, // Gas Town custom type - {IssueType(""), false}, // Empty is not built-in + {IssueType("pm"), false}, // Custom type from child repo + {IssueType("llm"), false}, // Custom type from child repo + {IssueType(""), false}, // Empty is not built-in } for _, tt := range tests {