fix(wake): #944 path becomes a hard-locator arm — detector-shape actionable entries can now pass the §2.1 gate + version 0.6.14
ci/woodpecker/pr/ci Pipeline was canceled
ci/woodpecker/pr/ci Pipeline was canceled
The _has_hard_locator gate tested only repo+issue / 40-hex sha / file — the forge locator vocabulary. detector.sh (A1) builds board_file locators as kind/id/observed_hash + path (+ snapshot_sha/_ts when attested, #940): zero keys in common, so a class=actionable board_file entry could NEVER pass and every heartbeat-planning delta dead-lettered (live seqs 63/68, dragon-lin, 2026-07-30). Latent since #920; the #920 harness pinned the detector pilot shape as its malformed example, ratifying the gap. Fix: `path` becomes a hard-locator arm — and ONLY path. It carries the same one-call re-verify precision as `file` (re-read <path>; upgrades to git show <snapshot_sha>:<path> when snapshot-attested). Deliberate NON-arms: observed_hash (content hash, not an address) and bare path-less snapshot_sha (would widen the gate past the board_file vocabulary — review-adopted criterion). Quarantine is a render-time filter (entries never leave pending.jsonl; dead-letter.jsonl is ledger + alarm-dedup only), so existing UNCONSUMED dead-letters re-deliver automatically on the first post-upgrade drain. Consumed-past dead-letters are not requeued. Tests: Q11 positive control renders the live seq-68 entry VERBATIM as CLAIM@seq (real detector emission, not a hand-built dict); negative controls assert address-free and bare-snapshot_sha siblings still quarantine. Q1/Q6–Q9 fixtures moved off the now-valid path-bearing shape. RED at base: exactly the 8 Q11 assertions fail; Q1–Q10 pass under both. Closes #944 Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NsKce8iZuSuRnu3gVMCBKB
This commit is contained in:
co-authored by
Claude Fable 5
parent
539b475a92
commit
e75db22972
@@ -318,8 +318,32 @@
|
||||
# anchors, fatal in $((...))) rejects. Full rationale in the knob
|
||||
# paragraph of the 0.6.12 entry above.
|
||||
# Changed: detector.sh (+ test-wake-detector.sh D13).
|
||||
# 0.6.14 #944 the §2.1 hard-locator gate was UNSATISFIABLE for detector-built
|
||||
# actionable board_file entries: _has_hard_locator tested only
|
||||
# repo+issue / 40-hex sha / file, while detector.sh (A1) builds
|
||||
# kind/id/observed_hash + path (+ snapshot_sha/_ts when attested,
|
||||
# #940) — no key in common, so every class=actionable board_file
|
||||
# delta was structurally guaranteed to dead-letter (live: mos-dt
|
||||
# seqs 63/68, 2026-07-30; the only tier with a 30m SLO delivered
|
||||
# nothing on its only actionable source). Fix: `path` becomes a
|
||||
# hard-locator arm — and ONLY path: it mirrors `file`'s one-call
|
||||
# "re-read X" precision, upgrading to one-call
|
||||
# `git show <snapshot_sha>:<path>` when a snapshot is attested.
|
||||
# observed_hash (content hash, not an address) and bare path-less
|
||||
# snapshot_sha (would widen the gate past the board_file
|
||||
# vocabulary — review-adopted criterion) remain NON-arms.
|
||||
# Quarantine is a RENDER-TIME filter (entries never leave
|
||||
# pending), so existing UNCONSUMED dead-letters re-deliver
|
||||
# automatically on the first post-upgrade drain; consumed-past
|
||||
# dead-letters are not requeued.
|
||||
# Changed: digest.sh (+ test-wake-digest-quarantine.sh: Q11
|
||||
# positive control — the live seq-68 entry verbatim must RENDER
|
||||
# as CLAIM@seq — and Q1/Q6-Q9 fixtures moved off the now-valid
|
||||
# path-bearing shape onto genuinely address-free shapes,
|
||||
# amending the #920-era ruling that had pinned the live pilot's
|
||||
# own locator shape as the malformed example).
|
||||
component=wake
|
||||
version=0.6.13
|
||||
version=0.6.14
|
||||
|
||||
# Watch-list schema this component consumes, and the INCLUSIVE range of
|
||||
# schema_version values it supports. A wake-watch-list.json whose schema_version
|
||||
|
||||
Reference in New Issue
Block a user