fix: use rig prefixes for agent bead IDs
Align rig-scoped agent beads with route prefixes so crew add/prime/status resolve the same IDs across rigs. Add tests that assert rig-prefixed agent IDs in prime and status. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
97
internal/cmd/prime_test.go
Normal file
97
internal/cmd/prime_test.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/steveyegge/gastown/internal/beads"
|
||||
)
|
||||
|
||||
func writeTestRoutes(t *testing.T, townRoot string, routes []beads.Route) {
|
||||
t.Helper()
|
||||
beadsDir := filepath.Join(townRoot, ".beads")
|
||||
if err := os.MkdirAll(beadsDir, 0755); err != nil {
|
||||
t.Fatalf("create beads dir: %v", err)
|
||||
}
|
||||
if err := beads.WriteRoutes(beadsDir, routes); err != nil {
|
||||
t.Fatalf("write routes: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetAgentBeadID_UsesRigPrefix(t *testing.T) {
|
||||
townRoot := t.TempDir()
|
||||
writeTestRoutes(t, townRoot, []beads.Route{
|
||||
{Prefix: "bd-", Path: "beads/mayor/rig"},
|
||||
})
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
ctx RoleContext
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "mayor",
|
||||
ctx: RoleContext{
|
||||
Role: RoleMayor,
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "gt-mayor",
|
||||
},
|
||||
{
|
||||
name: "deacon",
|
||||
ctx: RoleContext{
|
||||
Role: RoleDeacon,
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "gt-deacon",
|
||||
},
|
||||
{
|
||||
name: "witness",
|
||||
ctx: RoleContext{
|
||||
Role: RoleWitness,
|
||||
Rig: "beads",
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "bd-beads-witness",
|
||||
},
|
||||
{
|
||||
name: "refinery",
|
||||
ctx: RoleContext{
|
||||
Role: RoleRefinery,
|
||||
Rig: "beads",
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "bd-beads-refinery",
|
||||
},
|
||||
{
|
||||
name: "polecat",
|
||||
ctx: RoleContext{
|
||||
Role: RolePolecat,
|
||||
Rig: "beads",
|
||||
Polecat: "lex",
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "bd-beads-polecat-lex",
|
||||
},
|
||||
{
|
||||
name: "crew",
|
||||
ctx: RoleContext{
|
||||
Role: RoleCrew,
|
||||
Rig: "beads",
|
||||
Polecat: "lex",
|
||||
TownRoot: townRoot,
|
||||
},
|
||||
want: "bd-beads-crew-lex",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got := getAgentBeadID(tc.ctx)
|
||||
if got != tc.want {
|
||||
t.Fatalf("getAgentBeadID() = %q, want %q", got, tc.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user