fix(doctor): require --restart-sessions flag to cycle patrol sessions (gt-j44ri)

Previously `gt doctor --fix` would automatically kill and restart patrol
sessions when fixing stale settings.json files. This was disruptive as it
interrupted work without explicit consent.

Now session cycling only happens when `--restart-sessions` is explicitly
passed along with `--fix`. Without the flag, settings files are updated
but running sessions are left alone.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
capable
2026-01-07 00:18:02 -08:00
committed by Steve Yegge
parent 59799f551c
commit ee167ae1f1
3 changed files with 24 additions and 17 deletions

View File

@@ -10,9 +10,10 @@ import (
) )
var ( var (
doctorFix bool doctorFix bool
doctorVerbose bool doctorVerbose bool
doctorRig string doctorRig string
doctorRestartSessions bool
) )
var doctorCmd = &cobra.Command{ var doctorCmd = &cobra.Command{
@@ -82,6 +83,7 @@ func init() {
doctorCmd.Flags().BoolVar(&doctorFix, "fix", false, "Attempt to automatically fix issues") doctorCmd.Flags().BoolVar(&doctorFix, "fix", false, "Attempt to automatically fix issues")
doctorCmd.Flags().BoolVarP(&doctorVerbose, "verbose", "v", false, "Show detailed output") doctorCmd.Flags().BoolVarP(&doctorVerbose, "verbose", "v", false, "Show detailed output")
doctorCmd.Flags().StringVar(&doctorRig, "rig", "", "Check specific rig only") doctorCmd.Flags().StringVar(&doctorRig, "rig", "", "Check specific rig only")
doctorCmd.Flags().BoolVar(&doctorRestartSessions, "restart-sessions", false, "Restart patrol sessions when fixing stale settings (use with --fix)")
rootCmd.AddCommand(doctorCmd) rootCmd.AddCommand(doctorCmd)
} }
@@ -94,9 +96,10 @@ func runDoctor(cmd *cobra.Command, args []string) error {
// Create check context // Create check context
ctx := &doctor.CheckContext{ ctx := &doctor.CheckContext{
TownRoot: townRoot, TownRoot: townRoot,
RigName: doctorRig, RigName: doctorRig,
Verbose: doctorVerbose, Verbose: doctorVerbose,
RestartSessions: doctorRestartSessions,
} }
// Create doctor and register checks // Create doctor and register checks

View File

@@ -326,14 +326,17 @@ func (c *ClaudeSettingsCheck) Fix(ctx *CheckContext) error {
continue continue
} }
// Only cycle patrol roles that can auto-recover (daemon restarts them). // Only cycle patrol roles if --restart-sessions was explicitly passed.
// Crew and polecats are spawned on-demand and won't auto-restart. // This prevents unexpected session restarts during routine --fix operations.
if sf.agentType == "witness" || sf.agentType == "refinery" || // Crew and polecats are spawned on-demand and won't auto-restart anyway.
sf.agentType == "deacon" || sf.agentType == "mayor" { if ctx.RestartSessions {
running, _ := t.HasSession(sf.sessionName) if sf.agentType == "witness" || sf.agentType == "refinery" ||
if running { sf.agentType == "deacon" || sf.agentType == "mayor" {
// Cycle the agent by killing and letting gt up restart it running, _ := t.HasSession(sf.sessionName)
_ = t.KillSession(sf.sessionName) if running {
// Cycle the agent by killing and letting gt up restart it
_ = t.KillSession(sf.sessionName)
}
} }
} }
} }

View File

@@ -38,9 +38,10 @@ func (s CheckStatus) String() string {
// CheckContext provides context for running checks. // CheckContext provides context for running checks.
type CheckContext struct { type CheckContext struct {
TownRoot string // Root directory of the Gas Town workspace TownRoot string // Root directory of the Gas Town workspace
RigName string // Rig name (empty for town-level checks) RigName string // Rig name (empty for town-level checks)
Verbose bool // Enable verbose output Verbose bool // Enable verbose output
RestartSessions bool // Restart patrol sessions when fixing (requires explicit --restart-sessions flag)
} }
// RigPath returns the full path to the rig directory. // RigPath returns the full path to the rig directory.