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/status_test.go
Normal file
97
internal/cmd/status_test.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/steveyegge/gastown/internal/beads"
|
||||
"github.com/steveyegge/gastown/internal/rig"
|
||||
)
|
||||
|
||||
func captureStdout(t *testing.T, fn func()) string {
|
||||
t.Helper()
|
||||
old := os.Stdout
|
||||
r, w, err := os.Pipe()
|
||||
if err != nil {
|
||||
t.Fatalf("create pipe: %v", err)
|
||||
}
|
||||
os.Stdout = w
|
||||
|
||||
fn()
|
||||
|
||||
_ = w.Close()
|
||||
os.Stdout = old
|
||||
|
||||
var buf bytes.Buffer
|
||||
if _, err := io.Copy(&buf, r); err != nil {
|
||||
t.Fatalf("read stdout: %v", err)
|
||||
}
|
||||
_ = r.Close()
|
||||
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func TestDiscoverRigAgents_UsesRigPrefix(t *testing.T) {
|
||||
townRoot := t.TempDir()
|
||||
writeTestRoutes(t, townRoot, []beads.Route{
|
||||
{Prefix: "bd-", Path: "beads/mayor/rig"},
|
||||
})
|
||||
|
||||
r := &rig.Rig{
|
||||
Name: "beads",
|
||||
Path: filepath.Join(townRoot, "beads"),
|
||||
HasWitness: true,
|
||||
}
|
||||
|
||||
allAgentBeads := map[string]*beads.Issue{
|
||||
"bd-beads-witness": {
|
||||
ID: "bd-beads-witness",
|
||||
AgentState: "running",
|
||||
HookBead: "bd-hook",
|
||||
},
|
||||
}
|
||||
allHookBeads := map[string]*beads.Issue{
|
||||
"bd-hook": {ID: "bd-hook", Title: "Pinned"},
|
||||
}
|
||||
|
||||
agents := discoverRigAgents(map[string]bool{}, r, nil, allAgentBeads, allHookBeads, nil, true)
|
||||
if len(agents) != 1 {
|
||||
t.Fatalf("discoverRigAgents() returned %d agents, want 1", len(agents))
|
||||
}
|
||||
|
||||
if agents[0].State != "running" {
|
||||
t.Fatalf("agent state = %q, want %q", agents[0].State, "running")
|
||||
}
|
||||
if !agents[0].HasWork {
|
||||
t.Fatalf("agent HasWork = false, want true")
|
||||
}
|
||||
if agents[0].WorkTitle != "Pinned" {
|
||||
t.Fatalf("agent WorkTitle = %q, want %q", agents[0].WorkTitle, "Pinned")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRenderAgentDetails_UsesRigPrefix(t *testing.T) {
|
||||
townRoot := t.TempDir()
|
||||
writeTestRoutes(t, townRoot, []beads.Route{
|
||||
{Prefix: "bd-", Path: "beads/mayor/rig"},
|
||||
})
|
||||
|
||||
agent := AgentRuntime{
|
||||
Name: "witness",
|
||||
Address: "beads/witness",
|
||||
Role: "witness",
|
||||
Running: true,
|
||||
}
|
||||
|
||||
output := captureStdout(t, func() {
|
||||
renderAgentDetails(agent, "", nil, townRoot)
|
||||
})
|
||||
|
||||
if !strings.Contains(output, "bd-beads-witness") {
|
||||
t.Fatalf("output %q does not contain rig-prefixed bead ID", output)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user