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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user