wake: §2.1 hard-locator gate is unsatisfiable for detector-built actionable board_file entries (every heartbeat-planning delta dead-letters) #944

Closed
opened 2026-07-30 12:50:57 +00:00 by mos-dt-0 · 1 comment
Contributor

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>:` 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.
Author
Contributor

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.
Mos closed this issue 2026-07-30 14:01:49 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#944