digest.sh `_has_hard_locator` accepts only three arms: `repo`+`issue`, 40-hex `sha`, or `file`. detector.sh (A1) builds board_file locators as `kind`/`id`/`observed_hash` + `path` (+ `snapshot_sha`/`snapshot_ts` when adapter-attested, #940). None of the detector's keys is tested by the gate, so a class=actionable board_file entry can NEVER pass — it is structurally guaranteed to dead-letter.
Latent since #920 (the pre-#940 detector at canon 13e6ce5 builds the same keys minus snapshot fields; digest.sh untouched by #940–#943). First exercised 2026-07-30: heartbeat-planning is the only class=actionable source on the mos-dt watch list, and its tree never changed under watch until that morning.
seq 68 dead-lettered + alarmed — pre-registered prediction: called before the 07:41:35 drain fired, confirmed in real time
dead-letter.jsonl contains exactly one other entry ever: seq 13, a deliberately non-conformant bench harness entry
Impact: the actionable tier — the only tier with a 30m SLO and no quiet-hours suppression — cannot deliver a board_file claim; every heartbeat delta = one off-host alarm + a claim excluded from the consumer digest
Fix (predicate side, endorsed over detector-side path→file mapping)
Amend `_has_hard_locator` with two arms mirroring existing ones:
`path` — same precision class as `file` (both get the "re-read X" one-call re-verify hint in `_locator_line`)
40-hex `snapshot_sha` — same validation as `sha`; feeds the `git show <snapshot_sha>:` one-call hint
`observed_hash` alone stays insufficient (content hash, not an address) — the gate retains a genuine negative class.
Test rework: Q1/Q6/Q7/Q8/Q9 fixtures carry `path` and were pinned as the malformed case at #920 — this issue amends that ruling; fixtures move to genuinely address-free shapes. A POSITIVE control is required (merge gate): the live seq-68 entry shape must render as CLAIM@seq.
Version bump 0.6.13 → 0.6.14 in the same PR.
Root cause + measurements: jarvis-brain task fw-wake-actionable-locator-gate-unsatisfiable. GO issued by Mos; fix (b) per-file manifest hashes holds until this lands.
## Defect
digest.sh \`_has_hard_locator\` accepts only three arms: \`repo\`+\`issue\`, 40-hex \`sha\`, or \`file\`. detector.sh (A1) builds board_file locators as \`kind\`/\`id\`/\`observed_hash\` + \`path\` (+ \`snapshot_sha\`/\`snapshot_ts\` when adapter-attested, #940). **None of the detector's keys is tested by the gate**, so a class=actionable board_file entry can NEVER pass — it is structurally guaranteed to dead-letter.
Latent since #920 (the pre-#940 detector at canon 13e6ce5 builds the same keys minus snapshot fields; digest.sh untouched by #940–#943). First exercised 2026-07-30: heartbeat-planning is the only class=actionable source on the mos-dt watch list, and its tree never changed under watch until that morning.
## Live evidence (mos-dt store, dragon-lin)
- seq 63 dead-lettered + alarmed (format-only re-baseline member; tree object 3fc8c329…, post-d1 descriptor hash matches entry exactly)
- seq 68 dead-lettered + alarmed — **pre-registered prediction**: called before the 07:41:35 drain fired, confirmed in real time
- dead-letter.jsonl contains exactly one other entry ever: seq 13, a deliberately non-conformant bench harness entry
- Impact: the actionable tier — the only tier with a 30m SLO and no quiet-hours suppression — cannot deliver a board_file claim; every heartbeat delta = one off-host alarm + a claim excluded from the consumer digest
## Fix (predicate side, endorsed over detector-side path→file mapping)
Amend \`_has_hard_locator\` with two arms mirroring existing ones:
- \`path\` — same precision class as \`file\` (both get the "re-read X" one-call re-verify hint in \`_locator_line\`)
- 40-hex \`snapshot_sha\` — same validation as \`sha\`; feeds the \`git show <snapshot_sha>:<path>\` one-call hint
\`observed_hash\` alone stays insufficient (content hash, not an address) — the gate retains a genuine negative class.
Test rework: Q1/Q6/Q7/Q8/Q9 fixtures carry \`path\` and were pinned as the malformed case at #920 — this issue amends that ruling; fixtures move to genuinely address-free shapes. A POSITIVE control is required (merge gate): the live seq-68 entry shape must render as CLAIM@seq.
Version bump 0.6.13 → 0.6.14 in the same PR.
Root cause + measurements: jarvis-brain task fw-wake-actionable-locator-gate-unsatisfiable. GO issued by Mos; fix (b) per-file manifest hashes holds until this lands.
SCOPE NARROWING vs the issue body (review-adopted, before PR): the fix as filed here proposed TWO arms — path and 40-hex snapshot_sha. The snapshot_sha arm is REJECTED per the review-adopted criterion (mos-dt, adopted by MOS): a bare path-less 40-hex must NOT pass the gate — widening past the board_file vocabulary trades one defect for a larger one. Since (snapshot_sha AND path) is subsumed by path alone, the fix reduces to the single path arm. Q11(d) asserts the rejection mechanically (bare-snapshot_sha fixture must still quarantine). snapshot_sha remains a display/refinement field only: its precision is reachable only THROUGH a path, so path is the address and snapshot_sha upgrades the re-verify hint to git show <snapshot_sha>:<path>. Fix lands in PR #945.
SCOPE NARROWING vs the issue body (review-adopted, before PR): the fix as filed here proposed TWO arms — `path` and 40-hex `snapshot_sha`. The snapshot_sha arm is REJECTED per the review-adopted criterion (mos-dt, adopted by MOS): a bare path-less 40-hex must NOT pass the gate — widening past the board_file vocabulary trades one defect for a larger one. Since (snapshot_sha AND path) is subsumed by path alone, the fix reduces to the single `path` arm. Q11(d) asserts the rejection mechanically (bare-snapshot_sha fixture must still quarantine). snapshot_sha remains a display/refinement field only: its precision is reachable only THROUGH a path, so path is the address and snapshot_sha upgrades the re-verify hint to `git show <snapshot_sha>:<path>`. Fix lands in PR #945.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Defect
digest.sh `_has_hard_locator` accepts only three arms: `repo`+`issue`, 40-hex `sha`, or `file`. detector.sh (A1) builds board_file locators as `kind`/`id`/`observed_hash` + `path` (+ `snapshot_sha`/`snapshot_ts` when adapter-attested, #940). None of the detector's keys is tested by the gate, so a class=actionable board_file entry can NEVER pass — it is structurally guaranteed to dead-letter.
Latent since #920 (the pre-#940 detector at canon
13e6ce5builds the same keys minus snapshot fields; digest.sh untouched by #940–#943). First exercised 2026-07-30: heartbeat-planning is the only class=actionable source on the mos-dt watch list, and its tree never changed under watch until that morning.Live evidence (mos-dt store, dragon-lin)
Fix (predicate side, endorsed over detector-side path→file mapping)
Amend `_has_hard_locator` with two arms mirroring existing ones:
`observed_hash` alone stays insufficient (content hash, not an address) — the gate retains a genuine negative class.
Test rework: Q1/Q6/Q7/Q8/Q9 fixtures carry `path` and were pinned as the malformed case at #920 — this issue amends that ruling; fixtures move to genuinely address-free shapes. A POSITIVE control is required (merge gate): the live seq-68 entry shape must render as CLAIM@seq.
Version bump 0.6.13 → 0.6.14 in the same PR.
Root cause + measurements: jarvis-brain task fw-wake-actionable-locator-gate-unsatisfiable. GO issued by Mos; fix (b) per-file manifest hashes holds until this lands.
SCOPE NARROWING vs the issue body (review-adopted, before PR): the fix as filed here proposed TWO arms —
pathand 40-hexsnapshot_sha. The snapshot_sha arm is REJECTED per the review-adopted criterion (mos-dt, adopted by MOS): a bare path-less 40-hex must NOT pass the gate — widening past the board_file vocabulary trades one defect for a larger one. Since (snapshot_sha AND path) is subsumed by path alone, the fix reduces to the singlepatharm. Q11(d) asserts the rejection mechanically (bare-snapshot_sha fixture must still quarantine). snapshot_sha remains a display/refinement field only: its precision is reachable only THROUGH a path, so path is the address and snapshot_sha upgrades the re-verify hint togit show <snapshot_sha>:<path>. Fix lands in PR #945.