You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A wedged builder's claude PID was killed by the operator — the natural recovery move. Its parent .builder-start.sh loop (by design, for crash recovery) auto-respawned a fresh claude with the original spawn prompt, on the ORIGINAL terminal, unregistered with Tower. The operator's afx spawn <id> --resume then started a second, registered session. Both agents implemented the same plan phase simultaneously in one worktree until the registered one noticed foreign files appearing, reverted its own edits, and escalated. Resolution required a parent-first manual kill of the ghost lineage.
afx spawn --resume performs no liveness preflight: it consults registry state, not process reality, so it happily spawns into a worktree that already has a live (orphaned) lineage.
Asks
Preflight on --resume (and plain respawn): scan for live processes whose command line references .builders/<id>/.builder-start.sh (and/or a live shellper bound to that worktree). If found: refuse, name the PIDs, and print the recipe — afx interrupt <id> / afx reset <id> for a wedge, or parent-first kill for a true orphan. --force overrides with eyes open.
Make the loop operator-legible: when the child exits by signal, the relaunch banner should say what just happened and how to stop it ("child killed; relaunching per crash policy — to stop this loop, kill THIS script's PID first, or use afx interrupt/reset").
Reported by a production workspace architect with full PID/timestamp forensics; their builder's collision behavior (detect foreign edits → revert own → escalate) is the model response and worth encoding in builder guidance.
Incident (production workspace, 2026-08-01)
A wedged builder's claude PID was killed by the operator — the natural recovery move. Its parent
.builder-start.shloop (by design, for crash recovery) auto-respawned a fresh claude with the original spawn prompt, on the ORIGINAL terminal, unregistered with Tower. The operator'safx spawn <id> --resumethen started a second, registered session. Both agents implemented the same plan phase simultaneously in one worktree until the registered one noticed foreign files appearing, reverted its own edits, and escalated. Resolution required a parent-first manual kill of the ghost lineage.Two layers
afx interrupt(ESC into the turn) andafx reset(save → clear → re-orient), which exist precisely so operators never signal PIDs directly — but nothing tells an operator that at the moment it matters.afx spawn --resumeperforms no liveness preflight: it consults registry state, not process reality, so it happily spawns into a worktree that already has a live (orphaned) lineage.Asks
--resume(and plain respawn): scan for live processes whose command line references.builders/<id>/.builder-start.sh(and/or a live shellper bound to that worktree). If found: refuse, name the PIDs, and print the recipe —afx interrupt <id>/afx reset <id>for a wedge, or parent-first kill for a true orphan.--forceoverrides with eyes open.Credit
Reported by a production workspace architect with full PID/timestamp forensics; their builder's collision behavior (detect foreign edits → revert own → escalate) is the model response and worth encoding in builder guidance.