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:
@@ -25,7 +25,7 @@ A merge slot is an exclusive access primitive: only one agent can hold it at a t
|
||||
This prevents "monkey knife fights" where multiple polecats race to resolve conflicts
|
||||
and create cascading conflicts.
|
||||
|
||||
Each rig has one merge slot bead: <prefix>-merge-slot (type=slot).
|
||||
Each rig has one merge slot bead: <prefix>-merge-slot (labeled gt:slot).
|
||||
The slot uses:
|
||||
- status=open: slot is available
|
||||
- status=in_progress: slot is held
|
||||
@@ -157,15 +157,15 @@ func runMergeSlotCreate(cmd *cobra.Command, args []string) error {
|
||||
// Create the merge slot bead
|
||||
title := "Merge Slot"
|
||||
description := "Exclusive access slot for serialized conflict resolution in the merge queue."
|
||||
slotType := types.TypeSlot
|
||||
|
||||
if daemonClient != nil {
|
||||
createArgs := &rpc.CreateArgs{
|
||||
ID: slotID,
|
||||
Title: title,
|
||||
Description: description,
|
||||
IssueType: string(slotType),
|
||||
Priority: 0, // P0 - system infrastructure
|
||||
IssueType: string(types.TypeTask), // Use task type; gt:slot label marks it as slot
|
||||
Priority: 0, // P0 - system infrastructure
|
||||
Labels: []string{"gt:slot"}, // Gas Town slot label
|
||||
}
|
||||
resp, err := daemonClient.Create(createArgs)
|
||||
if err != nil {
|
||||
@@ -179,13 +179,18 @@ func runMergeSlotCreate(cmd *cobra.Command, args []string) error {
|
||||
ID: slotID,
|
||||
Title: title,
|
||||
Description: description,
|
||||
IssueType: slotType,
|
||||
IssueType: types.TypeTask, // Use task type; gt:slot label marks it as slot
|
||||
Status: types.StatusOpen,
|
||||
Priority: 0,
|
||||
}
|
||||
if err := store.CreateIssue(ctx, issue, actor); err != nil {
|
||||
return fmt.Errorf("failed to create merge slot: %w", err)
|
||||
}
|
||||
// Add gt:slot label to mark as slot bead
|
||||
if err := store.AddLabel(ctx, slotID, "gt:slot", actor); err != nil {
|
||||
// Non-fatal: log warning but don't fail creation
|
||||
fmt.Fprintf(os.Stderr, "warning: failed to add gt:slot label: %v\n", err)
|
||||
}
|
||||
markDirtyAndScheduleFlush()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user