diff --git a/internal/rig/manager.go b/internal/rig/manager.go index 4916cdc3..3256be59 100644 --- a/internal/rig/manager.go +++ b/internal/rig/manager.go @@ -128,9 +128,9 @@ func (m *Manager) loadRig(name string, entry config.RigEntry) (*Rig, error) { } } - // Check for witness - witnessPath := filepath.Join(rigPath, "witness", "rig") - if _, err := os.Stat(witnessPath); err == nil { + // Check for witness (witnesses don't have clones, just state.json) + witnessStatePath := filepath.Join(rigPath, "witness", "state.json") + if _, err := os.Stat(witnessStatePath); err == nil { rig.HasWitness = true } diff --git a/internal/rig/manager_test.go b/internal/rig/manager_test.go index ef836658..42711d21 100644 --- a/internal/rig/manager_test.go +++ b/internal/rig/manager_test.go @@ -37,6 +37,12 @@ func createTestRig(t *testing.T, root, name string) { } } + // Create witness state.json (witnesses don't have clones, just state) + witnessState := filepath.Join(rigPath, "witness", "state.json") + if err := os.WriteFile(witnessState, []byte(`{"role":"witness"}`), 0644); err != nil { + t.Fatalf("write witness state: %v", err) + } + // Create some polecats polecatsDir := filepath.Join(rigPath, "polecats") for _, polecat := range []string{"Toast", "Cheedo"} { diff --git a/internal/rig/types.go b/internal/rig/types.go index ad74f6e3..0edc9d5b 100644 --- a/internal/rig/types.go +++ b/internal/rig/types.go @@ -37,11 +37,12 @@ type Rig struct { } // 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/rig", + "witness", "mayor/rig", }