Files
gastown/internal/rig/types.go
Steve Yegge e362be3c41 fix: Use BeadsPath() for swarm status to read from git-synced beads (gt-1rxz5)
The swarm status was stale because bd commands were running from the rig
root path instead of the mayor/rig clone which has proper beads sync config.

Changes:
- Add Rig.BeadsPath() method to return mayor/rig path when available
- Update all bd commands in swarm.go to use BeadsPath()
- Update swarm manager to use separate beadsDir and gitDir paths
- beadsDir for bd commands (git-synced location)
- gitDir for git operations and mail (rig root)

This ensures swarm status reflects the latest beads data from the
git-synced beads-sync branch instead of stale local daemon data.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 23:46:59 -08:00

79 lines
2.2 KiB
Go

// Package rig provides rig management functionality.
package rig
import (
"github.com/steveyegge/gastown/internal/config"
)
// Rig represents a managed repository in the workspace.
type Rig struct {
// Name is the rig identifier (directory name).
Name string `json:"name"`
// Path is the absolute path to the rig directory.
Path string `json:"path"`
// GitURL is the remote repository URL.
GitURL string `json:"git_url"`
// Config is the rig-level configuration.
Config *config.BeadsConfig `json:"config,omitempty"`
// Polecats is the list of polecat names in this rig.
Polecats []string `json:"polecats,omitempty"`
// Crew is the list of crew worker names in this rig.
// Crew workers are user-managed persistent workspaces.
Crew []string `json:"crew,omitempty"`
// HasWitness indicates if the rig has a witness agent.
HasWitness bool `json:"has_witness"`
// HasRefinery indicates if the rig has a refinery agent.
HasRefinery bool `json:"has_refinery"`
// HasMayor indicates if the rig has a mayor clone.
HasMayor bool `json:"has_mayor"`
}
// AgentDirs are the standard agent directories in a rig.
// Note: witness doesn't have a /rig subdirectory (no clone needed).
var AgentDirs = []string{
"polecats",
"crew",
"refinery/rig",
"witness",
"mayor/rig",
}
// RigSummary provides a concise overview of a rig.
type RigSummary struct {
Name string `json:"name"`
PolecatCount int `json:"polecat_count"`
CrewCount int `json:"crew_count"`
HasWitness bool `json:"has_witness"`
HasRefinery bool `json:"has_refinery"`
}
// Summary returns a RigSummary for this rig.
func (r *Rig) Summary() RigSummary {
return RigSummary{
Name: r.Name,
PolecatCount: len(r.Polecats),
CrewCount: len(r.Crew),
HasWitness: r.HasWitness,
HasRefinery: r.HasRefinery,
}
}
// BeadsPath returns the path to use for beads operations.
// Returns the mayor/rig clone path if available (has proper sync-branch config),
// otherwise falls back to the rig root path.
// This ensures beads commands read from a location with git-synced beads data.
func (r *Rig) BeadsPath() string {
if r.HasMayor {
return r.Path + "/mayor/rig"
}
return r.Path
}