fix(wake): digest hard-locator gate covers top-level .claim entries (Closes #905) (#906)
Some checks failed
ci/woodpecker/push/publish Pipeline was successful
ci/woodpecker/push/ci Pipeline was canceled

Co-authored-by: jason.woltje <jason@diversecanvas.com>
Co-committed-by: jason.woltje <jason@diversecanvas.com>
This commit was merged in pull request #906.
This commit is contained in:
2026-07-26 00:58:40 +00:00
committed by Mos
parent 10d957d095
commit dd1391fd76
2 changed files with 33 additions and 1 deletions

View File

@@ -229,7 +229,9 @@ cmd_render() {
# --- FAIL-LOUD PASS FIRST (§2.1): validate every actionable claim carries a
# hard locator BEFORE emitting a single byte. A malformed digest must never be
# partially sent. Actionable-tier = class "actionable" OR any entry whose
# locators carry a `claim` (a consequential fact). ------------------------
# locators carry a `claim` OR a top-level `claim` (a consequential fact) —
# matching the render tier's `.claim // .locators.claim` precedence, so no
# entry can render as a CLAIM@seq without passing this gate. -------------
local line class loc is_actionable
while IFS= read -r line; do
[ -n "$line" ] || continue
@@ -241,6 +243,9 @@ cmd_render() {
if jq -e 'has("claim") and ((.claim // "") != "")' >/dev/null 2>&1 <<<"$loc"; then
is_actionable=1
fi
if jq -e 'has("claim") and ((.claim // "") != "")' >/dev/null 2>&1 <<<"$line"; then
is_actionable=1
fi
if [ "$is_actionable" = "1" ] && ! _has_hard_locator "$loc"; then
local seq
seq="$(jq -r '.observed_seq // "?"' <<<"$line")"