revert: let project beads config control sync-branch

The sync-branch setting is up to the project's .beads/config.yaml,
not something Gas Town should force. Projects can use bd doctor --fix
to configure sync-branch if they want multi-clone coordination.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-20 15:46:18 -08:00
parent 317caace5e
commit 58cf789eee
3 changed files with 3 additions and 123 deletions

View File

@@ -55,7 +55,6 @@ func runDoctor(cmd *cobra.Command, args []string) error {
// Register built-in checks // Register built-in checks
d.Register(doctor.NewDaemonCheck()) d.Register(doctor.NewDaemonCheck())
d.Register(doctor.NewBeadsDatabaseCheck()) d.Register(doctor.NewBeadsDatabaseCheck())
d.Register(doctor.NewBeadsSyncBranchCheck())
// Run checks // Run checks
var report *doctor.Report var report *doctor.Report

View File

@@ -1,110 +0,0 @@
package doctor
import (
"os"
"path/filepath"
"strings"
)
// BeadsSyncBranchCheck verifies that rig-level beads have sync-branch configured.
// Rig beads need sync-branch for multi-clone coordination (polecats, crew, etc.)
// Town-level beads should NOT have sync-branch (single clone, commits to main).
type BeadsSyncBranchCheck struct {
FixableCheck
}
// NewBeadsSyncBranchCheck creates a new sync-branch configuration check.
func NewBeadsSyncBranchCheck() *BeadsSyncBranchCheck {
return &BeadsSyncBranchCheck{
FixableCheck: FixableCheck{
BaseCheck: BaseCheck{
CheckName: "beads-sync-branch",
CheckDescription: "Verify rig beads have sync-branch configured",
},
},
}
}
// Run checks if rig-level beads have sync-branch properly configured.
func (c *BeadsSyncBranchCheck) Run(ctx *CheckContext) *CheckResult {
// Only check if a rig is specified
if ctx.RigName == "" {
return &CheckResult{
Name: c.Name(),
Status: StatusOK,
Message: "No rig specified, skipping rig beads sync-branch check",
}
}
// Check rig-level beads config
rigBeadsDir := filepath.Join(ctx.RigPath(), ".beads")
configPath := filepath.Join(rigBeadsDir, "config.yaml")
content, err := os.ReadFile(configPath)
if err != nil {
if os.IsNotExist(err) {
return &CheckResult{
Name: c.Name(),
Status: StatusWarning,
Message: "No .beads/config.yaml in rig",
FixHint: "Run 'bd init' in the rig directory",
}
}
return &CheckResult{
Name: c.Name(),
Status: StatusError,
Message: "Could not read .beads/config.yaml: " + err.Error(),
}
}
// Check for sync-branch setting
if !strings.Contains(string(content), "sync-branch:") {
return &CheckResult{
Name: c.Name(),
Status: StatusWarning,
Message: "Rig beads missing sync-branch configuration",
Details: []string{
"Rig: " + ctx.RigName,
"Rig beads need sync-branch for multi-clone coordination",
"Without this, polecats and crew members can't share beads",
},
FixHint: "Run 'gt doctor --fix' or add 'sync-branch: beads-sync' to .beads/config.yaml",
}
}
return &CheckResult{
Name: c.Name(),
Status: StatusOK,
Message: "Rig beads sync-branch is configured",
}
}
// Fix adds sync-branch to the rig beads config.
func (c *BeadsSyncBranchCheck) Fix(ctx *CheckContext) error {
if ctx.RigName == "" {
return nil
}
rigBeadsDir := filepath.Join(ctx.RigPath(), ".beads")
configPath := filepath.Join(rigBeadsDir, "config.yaml")
content, err := os.ReadFile(configPath)
if err != nil {
return err
}
// Check if already configured
if strings.Contains(string(content), "sync-branch:") {
return nil
}
// Append sync-branch setting
f, err := os.OpenFile(configPath, os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
return err
}
defer f.Close()
_, err = f.WriteString("sync-branch: beads-sync\n")
return err
}

View File

@@ -329,7 +329,8 @@ func (m *Manager) initAgentStates(rigPath string) error {
} }
// initBeads initializes the beads database at rig level. // initBeads initializes the beads database at rig level.
// Rig beads use sync-branch for multi-clone coordination (polecats, crew, etc.) // The project's .beads/config.yaml determines sync-branch settings.
// Use `bd doctor --fix` in the project to configure sync-branch if needed.
func (m *Manager) initBeads(rigPath, prefix string) error { func (m *Manager) initBeads(rigPath, prefix string) error {
beadsDir := filepath.Join(rigPath, ".beads") beadsDir := filepath.Join(rigPath, ".beads")
if err := os.MkdirAll(beadsDir, 0755); err != nil { if err := os.MkdirAll(beadsDir, 0755); err != nil {
@@ -342,20 +343,10 @@ func (m *Manager) initBeads(rigPath, prefix string) error {
if err := cmd.Run(); err != nil { if err := cmd.Run(); err != nil {
// bd might not be installed or --no-agents not supported, create minimal structure // bd might not be installed or --no-agents not supported, create minimal structure
configPath := filepath.Join(beadsDir, "config.yaml") configPath := filepath.Join(beadsDir, "config.yaml")
// Rig beads need sync-branch for multi-clone coordination configContent := fmt.Sprintf("prefix: %s\n", prefix)
configContent := fmt.Sprintf("prefix: %s\nsync-branch: beads-sync\n", prefix)
if writeErr := os.WriteFile(configPath, []byte(configContent), 0644); writeErr != nil { if writeErr := os.WriteFile(configPath, []byte(configContent), 0644); writeErr != nil {
return writeErr return writeErr
} }
} else {
// bd init succeeded, but we still need to add sync-branch
// Append to config.yaml (bd init doesn't set sync-branch by default)
configPath := filepath.Join(beadsDir, "config.yaml")
f, err := os.OpenFile(configPath, os.O_APPEND|os.O_WRONLY, 0644)
if err == nil {
defer f.Close()
f.WriteString("sync-branch: beads-sync\n")
}
} }
return nil return nil
} }