From 4de5a964009261b98e67ed542e627294ac83d65a Mon Sep 17 00:00:00 2001 From: scrotus Date: Sun, 4 Jan 2026 13:17:39 -0800 Subject: [PATCH] refactor: use hq- prefix for role bead references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate all role bead references from gt-*-role to hq-*-role using beads.RoleBeadIDTown() function. Role beads are stored in town beads (~/gt/.beads/) with the hq- prefix. Changes: - internal/cmd/prime.go: Use RoleBeadIDTown() for all roles - internal/doctor/agent_beads_check.go: Use RoleBeadIDTown() for rig agents - internal/polecat/manager.go: Use RoleBeadIDTown("polecat") - internal/cmd/crew_add.go: Use RoleBeadIDTown("crew") - internal/beads/beads.go: Update comments to document hq- convention - Templates: Update bd show gt-deacon to bd show hq-deacon Note: Tmux session names remain as gt-* (runtime identifiers). Bead IDs use hq-* for town-level agents (persistent storage). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .beads/formulas/mol-boot-triage.formula.toml | 2 +- internal/beads/beads.go | 19 ++++++++++++------- internal/cmd/crew_add.go | 2 +- internal/cmd/prime.go | 12 ++++++------ internal/doctor/agent_beads_check.go | 6 +++--- internal/polecat/manager.go | 4 ++-- internal/templates/roles/boot.md.tmpl | 2 +- 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/.beads/formulas/mol-boot-triage.formula.toml b/.beads/formulas/mol-boot-triage.formula.toml index 9380580d..fd875ada 100644 --- a/.beads/formulas/mol-boot-triage.formula.toml +++ b/.beads/formulas/mol-boot-triage.formula.toml @@ -35,7 +35,7 @@ gt peek deacon --lines 20 **Step 2: Check agent bead state** ```bash -bd show gt-deacon 2>/dev/null +bd show hq-deacon 2>/dev/null # Look for: # - state: running/working/idle # - last_activity: when was last update? diff --git a/internal/beads/beads.go b/internal/beads/beads.go index 3f70cc96..70deca0e 100644 --- a/internal/beads/beads.go +++ b/internal/beads/beads.go @@ -1388,15 +1388,20 @@ func IsAgentSessionBead(beadID string) bool { } // Role bead ID naming convention: -// gt--role +// Role beads are stored in town beads (~/.beads/) with hq- prefix. +// +// Canonical format: hq--role // // Examples: -// - gt-mayor-role -// - gt-deacon-role -// - gt-witness-role -// - gt-refinery-role -// - gt-crew-role -// - gt-polecat-role +// - hq-mayor-role +// - hq-deacon-role +// - hq-witness-role +// - hq-refinery-role +// - hq-crew-role +// - hq-polecat-role +// +// Use RoleBeadIDTown() to get canonical role bead IDs. +// The legacy RoleBeadID() function returns gt--role for backward compatibility. // RoleBeadID returns the role bead ID for a given role type. // Role beads define lifecycle configuration for each agent type. diff --git a/internal/cmd/crew_add.go b/internal/cmd/crew_add.go index 20ec355e..36236b6f 100644 --- a/internal/cmd/crew_add.go +++ b/internal/cmd/crew_add.go @@ -108,7 +108,7 @@ func runCrewAdd(cmd *cobra.Command, args []string) error { RoleType: "crew", Rig: rigName, AgentState: "idle", - RoleBead: "gt-crew-role", + RoleBead: beads.RoleBeadIDTown("crew"), } desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", name, rigName) if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil { diff --git a/internal/cmd/prime.go b/internal/cmd/prime.go index 94bd2dd7..fc556198 100644 --- a/internal/cmd/prime.go +++ b/internal/cmd/prime.go @@ -1204,40 +1204,40 @@ func getAgentFields(ctx RoleContext, state string) *beads.AgentFields { RoleType: "crew", Rig: ctx.Rig, AgentState: state, - RoleBead: "gt-crew-role", + RoleBead: beads.RoleBeadIDTown("crew"), } case RolePolecat: return &beads.AgentFields{ RoleType: "polecat", Rig: ctx.Rig, AgentState: state, - RoleBead: "gt-polecat-role", + RoleBead: beads.RoleBeadIDTown("polecat"), } case RoleMayor: return &beads.AgentFields{ RoleType: "mayor", AgentState: state, - RoleBead: "gt-mayor-role", + RoleBead: beads.RoleBeadIDTown("mayor"), } case RoleDeacon: return &beads.AgentFields{ RoleType: "deacon", AgentState: state, - RoleBead: "gt-deacon-role", + RoleBead: beads.RoleBeadIDTown("deacon"), } case RoleWitness: return &beads.AgentFields{ RoleType: "witness", Rig: ctx.Rig, AgentState: state, - RoleBead: "gt-witness-role", + RoleBead: beads.RoleBeadIDTown("witness"), } case RoleRefinery: return &beads.AgentFields{ RoleType: "refinery", Rig: ctx.Rig, AgentState: state, - RoleBead: "gt-refinery-role", + RoleBead: beads.RoleBeadIDTown("refinery"), } default: return nil diff --git a/internal/doctor/agent_beads_check.go b/internal/doctor/agent_beads_check.go index 5ec3d231..17d58056 100644 --- a/internal/doctor/agent_beads_check.go +++ b/internal/doctor/agent_beads_check.go @@ -230,7 +230,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error { RoleType: "witness", Rig: rigName, AgentState: "idle", - RoleBead: "gt-witness-role", + RoleBead: beads.RoleBeadIDTown("witness"), } desc := fmt.Sprintf("Witness for %s - monitors polecat health and progress.", rigName) if _, err := bd.CreateAgentBead(witnessID, desc, fields); err != nil { @@ -244,7 +244,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error { RoleType: "refinery", Rig: rigName, AgentState: "idle", - RoleBead: "gt-refinery-role", + RoleBead: beads.RoleBeadIDTown("refinery"), } desc := fmt.Sprintf("Refinery for %s - processes merge queue.", rigName) if _, err := bd.CreateAgentBead(refineryID, desc, fields); err != nil { @@ -261,7 +261,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error { RoleType: "crew", Rig: rigName, AgentState: "idle", - RoleBead: "gt-crew-role", + RoleBead: beads.RoleBeadIDTown("crew"), } desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", workerName, rigName) if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil { diff --git a/internal/polecat/manager.go b/internal/polecat/manager.go index 2b80c5f1..5ebb7b1e 100644 --- a/internal/polecat/manager.go +++ b/internal/polecat/manager.go @@ -251,7 +251,7 @@ func (m *Manager) AddWithOptions(name string, opts AddOptions) (*Polecat, error) RoleType: "polecat", Rig: m.rig.Name, AgentState: "spawning", - RoleBead: "gt-polecat-role", + RoleBead: beads.RoleBeadIDTown("polecat"), HookBead: opts.HookBead, // Set atomically at spawn time }) if err != nil { @@ -467,7 +467,7 @@ func (m *Manager) RecreateWithOptions(name string, force bool, opts AddOptions) RoleType: "polecat", Rig: m.rig.Name, AgentState: "spawning", - RoleBead: "gt-polecat-role", + RoleBead: beads.RoleBeadIDTown("polecat"), HookBead: opts.HookBead, // Set atomically at spawn time }) if err != nil { diff --git a/internal/templates/roles/boot.md.tmpl b/internal/templates/roles/boot.md.tmpl index 3baa0ebb..575f5123 100644 --- a/internal/templates/roles/boot.md.tmpl +++ b/internal/templates/roles/boot.md.tmpl @@ -63,7 +63,7 @@ tmux has-session -t {{ .DeaconSession }} 2>/dev/null && echo "alive" || echo "de gt peek deacon --lines 20 # Agent bead state -bd show gt-deacon 2>/dev/null +bd show hq-deacon 2>/dev/null # Recent activity gt feed --since 10m --plain | head -20