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:
dave
2026-01-06 22:18:37 -08:00
committed by Steve Yegge
parent b7358f17bf
commit a70c3a8cbe
14 changed files with 139 additions and 93 deletions

View File

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

View File

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