refactor(types): remove Gas Town type constants from beads core (bd-w2zz4)
Remove Gas Town-specific type constants (TypeMolecule, TypeGate, TypeConvoy, TypeMergeRequest, TypeSlot, TypeAgent, TypeRole, TypeRig, TypeEvent, TypeMessage) from internal/types/types.go. Beads now only has core work types built-in: - bug, feature, task, epic, chore All Gas Town types are now purely custom types with no special handling in beads. Use string literals like "gate" or "molecule" when needed, and configure types.custom in config.yaml for validation. Changes: - Remove Gas Town type constants from types.go - Remove mr/mol aliases from Normalize() - Update bd types command to only show core types - Replace all constant usages with string literals throughout codebase - Update tests to use string literals This decouples beads from Gas Town, making it a generic issue tracker. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -486,21 +486,9 @@ const (
|
||||
TypeChore IssueType = "chore"
|
||||
)
|
||||
|
||||
// Well-known custom types - constants for code convenience.
|
||||
// These are NOT built-in types and require types.custom configuration for validation.
|
||||
// Used by Gas Town and other infrastructure that extends beads.
|
||||
const (
|
||||
TypeMessage IssueType = "message" // Ephemeral communication between workers
|
||||
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 (multi-repo workspace)
|
||||
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)
|
||||
)
|
||||
// Note: Gas Town types (molecule, gate, convoy, merge-request, slot, agent, role, rig, event, message)
|
||||
// were removed from beads core. They are now purely custom types with no built-in constants.
|
||||
// Use string literals like types.IssueType("molecule") if needed, and configure types.custom.
|
||||
|
||||
// IsValid checks if the issue type is a core work type.
|
||||
// Only core work types (bug, feature, task, epic, chore) are built-in.
|
||||
@@ -538,16 +526,12 @@ func (t IssueType) IsValidWithCustom(customTypes []string) bool {
|
||||
}
|
||||
|
||||
// Normalize maps issue type aliases to their canonical form.
|
||||
// For example, "enhancement" -> "feature", "mr" -> "merge-request".
|
||||
// For example, "enhancement" -> "feature".
|
||||
// Case-insensitive to match util.NormalizeIssueType behavior.
|
||||
func (t IssueType) Normalize() IssueType {
|
||||
switch strings.ToLower(string(t)) {
|
||||
case "enhancement", "feat":
|
||||
return TypeFeature
|
||||
case "mr":
|
||||
return TypeMergeRequest
|
||||
case "mol":
|
||||
return TypeMolecule
|
||||
default:
|
||||
return t
|
||||
}
|
||||
|
||||
@@ -442,12 +442,12 @@ func TestValidateForImport(t *testing.T) {
|
||||
wantErr: false, // Should pass - federation trust model
|
||||
},
|
||||
{
|
||||
name: "built-in type agent passes",
|
||||
name: "custom type passes (federation trust)",
|
||||
issue: Issue{
|
||||
Title: "Test Issue",
|
||||
Status: StatusOpen,
|
||||
Priority: 1,
|
||||
IssueType: TypeAgent, // Gas Town built-in type
|
||||
IssueType: IssueType("agent"), // Custom type (no longer built-in)
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
@@ -545,17 +545,17 @@ func TestIssueTypeIsValid(t *testing.T) {
|
||||
{TypeTask, true},
|
||||
{TypeEpic, true},
|
||||
{TypeChore, true},
|
||||
// Gas Town types require types.custom configuration
|
||||
{TypeMessage, false},
|
||||
{TypeMergeRequest, false},
|
||||
{TypeMolecule, false},
|
||||
{TypeGate, false},
|
||||
{TypeAgent, false},
|
||||
{TypeRole, false},
|
||||
{TypeConvoy, false},
|
||||
{TypeEvent, false},
|
||||
{TypeSlot, false},
|
||||
{TypeRig, false},
|
||||
// Gas Town types are now custom types (not built-in)
|
||||
{IssueType("message"), false},
|
||||
{IssueType("merge-request"), false},
|
||||
{IssueType("molecule"), false},
|
||||
{IssueType("gate"), false},
|
||||
{IssueType("agent"), false},
|
||||
{IssueType("role"), false},
|
||||
{IssueType("convoy"), false},
|
||||
{IssueType("event"), false},
|
||||
{IssueType("slot"), false},
|
||||
{IssueType("rig"), false},
|
||||
// Invalid types
|
||||
{IssueType("invalid"), false},
|
||||
{IssueType(""), false},
|
||||
@@ -581,12 +581,12 @@ func TestIssueTypeRequiredSections(t *testing.T) {
|
||||
{TypeTask, 1, "## Acceptance Criteria"},
|
||||
{TypeEpic, 1, "## Success Criteria"},
|
||||
{TypeChore, 0, ""},
|
||||
{TypeMessage, 0, ""},
|
||||
{TypeMolecule, 0, ""},
|
||||
{TypeGate, 0, ""},
|
||||
{TypeEvent, 0, ""},
|
||||
{TypeMergeRequest, 0, ""},
|
||||
// Gas Town types (agent, role, rig, convoy, slot) have been removed
|
||||
// Gas Town types are now custom and have no required sections
|
||||
{IssueType("message"), 0, ""},
|
||||
{IssueType("molecule"), 0, ""},
|
||||
{IssueType("gate"), 0, ""},
|
||||
{IssueType("event"), 0, ""},
|
||||
{IssueType("merge-request"), 0, ""},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user