Crew workers are human-managed and should never be auto-killed by
gt doctor --fix. This adds defense-in-depth protection:
1. OrphanSessionCheck.Fix() now skips any session matching the
gt-<rig>-crew-<name> pattern
2. OrphanProcessCheck.Fix() now checks if a process has a crew
session pane as an ancestor before killing it
Even if detection fails (like the pgrep bug we just fixed), crew
sessions and their processes will be protected.
Generated with Claude Code
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The orphan-processes check was incorrectly killing active crew sessions
because pgrep -x tmux does not reliably find the tmux server on macOS.
Root cause:
- pgrep -x tmux was finding tmux attach-session processes but missing
the actual tmux server process
- Claude processes running in tmux panes were incorrectly flagged as
orphaned because their parent (tmux server) was not in the allowed list
Fixes:
1. Use ps + awk instead of pgrep to find tmux processes more reliably
2. Exclude Claude.app desktop processes from orphan detection (they are
not Gas Town CLI processes)
Closes: gt-ronyn
Generated with Claude Code
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add two new health checks to gt doctor:
1. orphan-sessions: Detects Gas Town tmux sessions (gt-*) that do not
match expected patterns (mayor, deacon, rig-witness, rig-refinery,
rig-polecat). Validates rig names against actual workspace structure.
2. orphan-processes: Detects Claude/claude-code processes without a
tmux parent. Walks process tree to find orphaned instances that
may be consuming resources.
Both checks support --fix to clean up detected orphans:
- Kills orphaned tmux sessions
- Sends SIGINT (then SIGKILL) to orphaned processes
Closes gt-qsvq.
Generated with Claude Code
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>