feat: extract Gas Town types from beads core (bd-i54l)
Remove Gas Town-specific issue types (agent, role, rig, convoy, slot) from beads core. These types are now identified by labels instead: - gt:agent, gt:role, gt:rig, gt:convoy, gt:slot Changes: - internal/types/types.go: Remove TypeAgent, TypeRole, TypeRig, TypeConvoy, TypeSlot constants - cmd/bd/agent.go: Create agents with TypeTask + gt:agent label - cmd/bd/merge_slot.go: Create slots with TypeTask + gt:slot label - internal/storage/sqlite/queries.go, transaction.go: Query convoys by gt:convoy label - internal/rpc/server_issues_epics.go: Check gt:agent label for role_type/rig label auto-add - cmd/bd/create.go: Check gt:agent label for role_type/rig label auto-add - internal/ui/styles.go: Remove agent/role/rig type colors - cmd/bd/export_obsidian.go: Remove agent/role/rig/convoy type tag mappings - Update all affected tests This enables beads to be a generic issue tracker while Gas Town uses labels for its specific type semantics. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Executed-By: beads/crew/dave Rig: beads Role: crew
This commit is contained in:
@@ -412,6 +412,9 @@ 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"
|
||||
@@ -422,18 +425,13 @@ 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, TypeAgent, TypeRole, TypeRig, TypeConvoy, TypeEvent, TypeSlot:
|
||||
case TypeBug, TypeFeature, TypeTask, TypeEpic, TypeChore, TypeMessage, TypeMergeRequest, TypeMolecule, TypeGate, TypeEvent:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -480,7 +478,7 @@ func (t IssueType) RequiredSections() []RequiredSection {
|
||||
{Heading: "## Success Criteria", Hint: "Define high-level success criteria"},
|
||||
}
|
||||
default:
|
||||
// Chore, message, molecule, gate, agent, role, convoy, event, merge-request
|
||||
// Chore, message, molecule, gate, event, merge-request
|
||||
// have no required sections
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -401,12 +401,15 @@ func TestIssueTypeIsValid(t *testing.T) {
|
||||
{TypeTask, true},
|
||||
{TypeEpic, true},
|
||||
{TypeChore, true},
|
||||
{TypeAgent, true},
|
||||
{TypeRole, true},
|
||||
{TypeRig, true},
|
||||
{TypeConvoy, true},
|
||||
{TypeMessage, true},
|
||||
{TypeMergeRequest, true},
|
||||
{TypeMolecule, true},
|
||||
{TypeGate, true},
|
||||
{TypeEvent, true},
|
||||
{TypeSlot, 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
|
||||
{IssueType("invalid"), false},
|
||||
{IssueType(""), false},
|
||||
}
|
||||
@@ -434,12 +437,9 @@ func TestIssueTypeRequiredSections(t *testing.T) {
|
||||
{TypeMessage, 0, ""},
|
||||
{TypeMolecule, 0, ""},
|
||||
{TypeGate, 0, ""},
|
||||
{TypeAgent, 0, ""},
|
||||
{TypeRole, 0, ""},
|
||||
{TypeRig, 0, ""},
|
||||
{TypeConvoy, 0, ""},
|
||||
{TypeEvent, 0, ""},
|
||||
{TypeMergeRequest, 0, ""},
|
||||
// Gas Town types (agent, role, rig, convoy, slot) have been removed
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user