Repository navigation
feat(immune): Evidence Pack red-team — surface skipped existence check (inert signal) - #1515
Conversation
…ck (inert signal) Red-team of the merged increment-2 join (#1514) found a no-silent-failure gap: when rows cite trinity_tasks:<id> but the caller omits taskEvidence, the existence/done join never runs yet the pack still returns ok=true -- a skipped check reading as a pass (r10 / THE_ONE §10). All 656 live rows are task citations [V 2026-11-04], so it is 100% applicable. Fix (pure, inert, zero scoring-path callers): a NON-GATING signal 'task_existence_check_skipped' (detail {citing_rows, cited_tasks}) whenever rows cite tasks but no taskEvidence was supplied. ok is unchanged -- the opt-in is intentional; this is the tripwire for when a task-bearing caller forgets it, and it is distinct from the cited_task_exists invariant (check RAN and FAILED). 17/17 jest green. Grok co-signed (D-054 concur). Flagged-not-changed: binding deliverable_sha256 into the Lane A signed receipt (Sean MAJOR) and an opaque- evidence_id shape check (theoretical -- 0 live rows). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Strix Security Review✅ No open security findings. PR summary: Adds a non-gating `task_existence_check_skipped` signal to the inert Evidence Pack reducer so a pack built from task-citing rows without caller-supplied `taskEvidence` reports that the existence/done join never ran, plus tests for the new signal. `ok` and the existing invariants are unchanged. Review summaryThis PR only adds a non-gating diagnostic to a pure, caller-driven reducer: rows that cite Review 1 on this PR · Reviewed by Strix |
There was a problem hiding this comment.
This PR only adds a non-gating diagnostic to a pure, caller-driven reducer: rows that cite trinity_tasks:<id> while no taskEvidence was supplied now produce a task_existence_check_skipped signal (with citing_rows/cited_tasks detail), leaving ok and all invariants untouched. I read the full reducer and the accompanying test changes. The new code introduces no attacker-reachable sink — it writes fixed-key numbers into an in-memory signal list, emits on every skipped-join case without a way to suppress it, and cannot be bypassed with an empty-but-present taskEvidence object (the join still runs and cited_task_exists trips). Search confirms the reducer has no callers, so no downstream gate on signals or ok changes behaviour. The item the author flagged (Lane A not binding deliverable_sha256 into the signed receipt) is in lane-a-dryrun.ts, which is not part of this diff, so it is outside this review's scope. No security issue introduced by the changed lines.
Reviewed by Strix
Configure security review settings
Red-team of the merged bricks (#1513 Lane A, #1514 Evidence Pack)
Adversarial pass on the two inert bricks, hunting a false-pass — a brick reporting
ok/verified/correctwhen the underlying reality is not. One real no-silent-failure gap found and fixed here; two others flagged (one Sean-MAJOR, one theoretical).Fixed here (LOW, inert)
Silent skip of the existence check. When rows cite
trinity_tasks:<id>but the caller omitstaskEvidence, the increment-2 existence/done join never runs, yet the pack still returnsok:true— a skipped check reading as a pass (r10 / THE_ONE §10). Live: all 656 rows are task citations [V 2026-11-04], so it is 100% applicable.Fix: a non-gating signal
task_existence_check_skipped(detail{citing_rows, cited_tasks}) emitted whenever rows cite tasks but notaskEvidencewas supplied.okis unchanged — the opt-in is intentional; this is the tripwire for when a task-bearing caller forgets it, and it is distinct from thecited_task_existsinvariant (check RAN and FAILED).Flagged, NOT changed
lane-a-dryrun.tsbuilds the receipt'sartifact_hashfrom the hash of the verdict string{id,verdict:TRUE}, not fromdeliverable_sha256. The deliverable hash is surfaced but never bound into the signed receipt or the would-write row — an eventual +1 would credit contractId+verdict with no cryptographic tie to the artifact. Binding it changes the signed public receipt = Sean's gate.Grok co-signed the fix and both flags (D-054 concur). D-147 to be logged.
🤖 Generated with Claude Code