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 watcher cycle that does produce an actionable close reason reports FAILED - cycle ended without an actionable reason at the next Stop. Observed repeatedly on 2026-08-08 against a healthy
crewmate, including after bin/fm-watch-arm.sh --restart.
The consequence is not a lost wake — every event did reach the supervising session — but the Stop
hook treats each cycle as a supervision failure, so the operator is told supervision is down while
it demonstrably is not, and is instructed to repair something that is working.
Observed sequence, repeated
Each cycle looked exactly like this:
watcher: started pid=<N> (beacon fresh)
stale: default:w2:pN (idle 244s, possible wedge, escalation <k>)
then, at the next turn end:
watcher: attached pid=<N> (beacon 2s)
watcher: FAILED - cycle ended without an actionable reason
The cycle emitted stale: ... — an actionable reason — and it was delivered to the session as a Stop hook feedback wake, which is why the operator saw it at all. The close accounting then
reports the opposite.
What was ruled out
Operator-side manual arming. Hypothesis: repeated manual bin/fm-watch-arm.sh calls were
creating cycles that competed with the Stop-hook auto-arm. Tested by deliberately withholding
the manual arm for one full turn and letting the Stop hook re-arm on its own. The cycle still
closed FAILED. Not operator-induced.
A genuinely wedged crewmate. The pane really was idle ~244s each time, but the worker was
healthy throughout, verified three independent ways rather than from the pane:
crewmate session transcript grew +16,378 bytes in 30s while thinking;
The same pane escalated 1 → 5 consecutively. From escalation 3 onward the reason line carried demand-deep-inspection: same pane has wedge-escalated 3 times in a row - do not re-absorb on the run-step/pane state alone, which is good and correct behaviour. The suspicion is that the repeated
same-pane escalation is what the close accounting fails to count as actionable — i.e. the first
escalation is treated as the actionable event and subsequent ones on the same pane are not, even
though they are still emitted and delivered.
Stated as a hypothesis, not a diagnosis: this was not confirmed by reading the arm-layer close
contract.
A likely-unrelated cosmetic detail
bin/fm-watch-arm.sh output carries these when stdout is consumed by a truncating pipe:
bin/backends/herdr.sh: line 2559: printf: write error: Broken pipe
bin/backends/herdr.sh: line 2560: printf: write error: Broken pipe
Almost certainly an artifact of the caller's head, not a fault — noted only in case the same
writes are how the close reason is recorded.
Environment
backend herdr, harness claude, macOS Darwin 25.5.0
Supervision mode: Claude Stop-hook-owned auto-arm (bin/fm-claude-stop-autoarm.sh)
One kind=ship crewmate live in a treehouse worktree, running the no-mistakes pipeline
Why this matters
The banner is the operator's only signal that supervision is genuinely down. When a working cycle
reports FAILED, the real signal and the false one become indistinguishable, and the documented
response is to re-arm — which then produces another FAILED. A real supervision outage during this
period would have looked identical to the noise.
Summary
A watcher cycle that does produce an actionable close reason reports
FAILED - cycle ended without an actionable reasonat the next Stop. Observed repeatedly on 2026-08-08 against a healthycrewmate, including after
bin/fm-watch-arm.sh --restart.The consequence is not a lost wake — every event did reach the supervising session — but the Stop
hook treats each cycle as a supervision failure, so the operator is told supervision is down while
it demonstrably is not, and is instructed to repair something that is working.
Observed sequence, repeated
Each cycle looked exactly like this:
then, at the next turn end:
The cycle emitted
stale: ...— an actionable reason — and it was delivered to the session as aStop hook feedbackwake, which is why the operator saw it at all. The close accounting thenreports the opposite.
What was ruled out
Operator-side manual arming. Hypothesis: repeated manual
bin/fm-watch-arm.shcalls werecreating cycles that competed with the Stop-hook auto-arm. Tested by deliberately withholding
the manual arm for one full turn and letting the Stop hook re-arm on its own. The cycle still
closed
FAILED. Not operator-induced.A genuinely wedged crewmate. The pane really was idle ~244s each time, but the worker was
healthy throughout, verified three independent ways rather than from the pane:
git -C <worktree> diff --shortstat maingrew 1281 → 1328 → 2259 insertions;~/.no-mistakes/state.sqlitestep_resultsadvanceddocument → push → pr → ci.The task went on to open PR fix(watch): assert watcher liveness during wake drain #101, which merged cleanly. So the
possible wedgeescalations werefalse positives on a worker that was working the whole time.
The escalation interaction
The same pane escalated 1 → 5 consecutively. From escalation 3 onward the reason line carried
demand-deep-inspection: same pane has wedge-escalated 3 times in a row - do not re-absorb on the run-step/pane state alone, which is good and correct behaviour. The suspicion is that the repeatedsame-pane escalation is what the close accounting fails to count as actionable — i.e. the first
escalation is treated as the actionable event and subsequent ones on the same pane are not, even
though they are still emitted and delivered.
Stated as a hypothesis, not a diagnosis: this was not confirmed by reading the arm-layer close
contract.
A likely-unrelated cosmetic detail
bin/fm-watch-arm.shoutput carries these when stdout is consumed by a truncating pipe:Almost certainly an artifact of the caller's
head, not a fault — noted only in case the samewrites are how the close reason is recorded.
Environment
herdr, harnessclaude, macOS Darwin 25.5.0bin/fm-claude-stop-autoarm.sh)kind=shipcrewmate live in a treehouse worktree, running theno-mistakespipelineWhy this matters
The banner is the operator's only signal that supervision is genuinely down. When a working cycle
reports
FAILED, the real signal and the false one become indistinguishable, and the documentedresponse is to re-arm — which then produces another
FAILED. A real supervision outage during thisperiod would have looked identical to the noise.