fix: restore Gas Town types (agent, role, rig, convoy, slot) (GH#941)

v0.46.0 removed these types breaking gt install/doctor/sling/convoy commands.
This restores them as built-in types so `bd create --type=agent` works again.

Fixes GH#941

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
beads/crew/giles
2026-01-09 22:26:50 -08:00
committed by Steve Yegge
parent 336eaa74e3
commit 4009fc6709
2 changed files with 22 additions and 16 deletions

View File

@@ -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

View File

@@ -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 {