Files
Worktrunk Bot 06a0315efb chore(clawpatch): file the FailureStrategy invariant against the code that enforces it (#3823)
Nightly survey finding. The signal-handling clawpatch spec lists
`src/commands/command_approval.rs` as a context file with the reason
"FailureStrategy::Warn must not swallow signal-derived errors" — but
that file contains no reference to `FailureStrategy`, signals, or
interrupts. `grep -n "signal\|Interrupt\|FailureStrategy"
src/commands/command_approval.rs` returns nothing, and `git log -S
FailureStrategy -- src/commands/command_approval.rs` is empty, so the
entry has been wrong since the spec was added in #2859 rather than
having drifted.

`FailureStrategy` is declared and consumed entirely in
`src/commands/command_executor.rs`, which the spec already lists as an
owned file. So this drops the misfiled context entry and folds its claim
— the one detail the owned-file reason didn't carry, that the interrupt
check runs *before* any `FailureStrategy` branch — into that entry,
matching how CLAUDE.md → Signal Handling states it. Nothing is lost from
the spec; it just points at the file that implements the invariant.

I checked the rest of the specs the same way: every `path` in
`entrypoints` / `ownedFiles` / `contextFiles` / `tests` across all 14
`.config/clawpatch/features/*.json` resolves, every
`entrypoints[].symbol` appears in its named file, and this was the only
reason string naming a symbol its file doesn't contain.

No regression test — the change is metadata prose in a file no test
reads, and the mismatch isn't expressible as an assertion without
inventing a schema check for `reason` strings, which would be a larger
and more speculative change than the fix.

Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
2026-08-15 07:55:44 -07:00
..