fix(wake): #952 quarantine-audit clean sweep names BOTH unprovable residual classes #967

Merged
Mos merged 3 commits from mos-dt-0/stack:fix/store-quarantine-audit-residuals-952 into main 2026-07-30 23:25:35 +00:00
3 Commits
Author SHA1 Message Date
Jason WoltjeandClaude Fable 5 f1b63bccfb docs(wake): #952 the 0.7.1 changelog entry names all THREE fix surfaces
ci/woodpecker/pr/ci Pipeline was successful
The entry said the fix landed in 'the clean-sweep message + the PROVABILITY
BOUND comment' — two surfaces. It landed in three: usage() came in the
second commit (author-side self-catch) and the entry was never updated.
This PR's whole thesis is naming a set completely; its own permanent record
naming 2 of 3 of its own fix surfaces would reproduce the defect it fixes.
Taken as the pre-merge clause (mos-dt flagged, MOS ruled) — this is the only
window the entry can be made accurate in-place under the changelog-is-history
ruling.

Also rides along, comment-placement-only: the 0.7.1 entry moved above
component= so component=/version= sit adjacent again (the split was verified
inert — _manifest_val's anchored sed cannot match a comment — but placement
is free to fix in the same comment-only commit). Keys re-verified parsing:
component=wake, version=0.7.1, schema 1/1.

Manifest-comment-only: zero code, zero manifest key changes.

Written-by: pepper (sb-it-1-dt)
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NsKce8iZuSuRnu3gVMCBKB
2026-07-30 17:01:23 -05:00
Jason WoltjeandClaude Fable 5 119ed97920 fix(wake): #952 usage() help text also names both unprovable residual classes
ci/woodpecker/pr/ci Pipeline was canceled
Self-caught before verdict: the quarantine-audit help text still said
"Rows whose dead-letter evidence was pruned are NOT provable" — the same
one-class-only wording the clean-sweep fix removes, one surface over. An
operator reading --help would form the same false "no evidence exists"
conclusion the runtime message no longer teaches. Same cause, same fix
shape; predicate untouched.

Written-by: pepper (sb-it-1-dt)
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NsKce8iZuSuRnu3gVMCBKB
2026-07-30 16:50:21 -05:00
Jason WoltjeandClaude Fable 5 3e22e1b354 fix(wake): #952 quarantine-audit clean sweep names BOTH unprovable residual classes
Wording-only measurement fix (#951 review finding 1, upgraded to
measurement defect): the clean-sweep OK named only "rows without
surviving dead-letter evidence", so an operator concluded NO evidence
exists when evidence can exist and be UNUSABLE — a surviving dead-letter
row whose locator extracts an empty observed_hash (live specimen: mos-dt
seq 13, bench/malformed-locator-test) can never satisfy the four-field
conviction match, because _record_last_consumed only writes rows with a
non-empty hash. The conviction predicate is UNCHANGED.

- store.sh: clean-sweep message + PROVABILITY BOUND comment name both
  classes ("no evidence" vs "evidence unusable").
- test T17: drives the REAL writer flow (12 fillers + bench key at seq
  13) and plants the VERBATIM live specimen — nested .locators.* with no
  observed_hash key, never a hand-built flat dead-letter row (the #951
  false-defect near-miss); asserts clean sweep exits 0, both classes
  named, no conviction, --repair removes nothing, ledger untouched.
- manifest: wake 0.6.15 -> 0.6.16.

Red-first: pre-fix fails exactly the two wording assertions (and the
non-conviction guards pass pre-fix — predicate correct all along); fixed
18/18. All wake suites green; detector D4 intermittent red is a
pre-existing lock-handoff timing flake in unmodified files, filed as

Written-by: pepper (sb-it-1-dt)
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NsKce8iZuSuRnu3gVMCBKB
2026-07-30 16:50:21 -05:00