2026-10The witness who wrote their own alibiDefectAfter binding (above), a verification entry had to be fresh, same-session and on-topic — but the agent still wrote it. log_claim.py "migration complete" "ran the migration tests" cleared the gate whether or not a test had run. The gated actor and the evidence author were the same actor.
FixAn opt-in evidence mode (CLAIM_CHECK_EVIDENCE=tool) that ignores the agent's line and requires a passing verification run the harness recorded in the session transcript: allowlisted command, same sessionId, inside the freshness window, a finished non-error result, and a command line that matches a small fixed grammar so its exit status is the verification's. The recorded-result markers were read off real transcripts first, which turned up three ways a run reports success without having succeeded: a backgrounded command (backgroundTaskId, including auto-backgrounding), a command that hit the tool timeout (timedOutAfterMs), and a nonzero exit reinterpreted as success (returnCodeInterpretation) — all with is_error: false. A first version parsed arbitrary shell and checked separators; four rounds of review kept finding lines where the parser and the shell disagreed (a # comment swallowing a newline, a mid-word quote, pipefail "set" inside a dead branch). The fix was to stop parsing shell and accept only an allowlisted grammar.
Full entry