fix(decision-review): ground the decision's own claims when refutation returns nothing #60

Merged
crenshawdev merged 1 commit from fix/decision-review-grounding into main 2026-07-27 17:53:23 +00:00
crenshawdev commented 2026-07-27 17:52:34 +00:00 (Migrated from github.com)

Closes a gap recorded as a CAPTURE seed from the phase 3/4 dogfood.

The defect

decision-review.md's adjudicate step required grounding at least one library/API claim against Context7 and at least one factual claim against the codebase, but scoped grounding to the objections refute returned. On a clean pass there are no objections, so the guarantee went unreachable exactly when the result was most flattering, and the run reported a bare "no findings" that reads identically to a review that never ran.

That is the same silent-pass class the review subsystem is otherwise careful about: a reviewer that could not run never silently passes a gate, a dropped reviewer emits a visible reason, a risk pre-filter must note each drop. The clean-pass path was the hole.

The fix

The grounding requirement retargets instead of lapsing. With zero objections it grounds the decision's own load-bearing claims, the assertions in its statement and Evidence: clause that would invalidate it if false, and reports each confirmed or contradicted with its citation. A contradicted claim rules survives and gets an amendment, since it is a finding the refutation missed.

The present step and success criteria were updated to match, plus the skill's summary so the two do not drift.

Budgets

Both surfaces sat at exactly their byte budget, so any addition overran self-verify. The first draft was trimmed by 725B before concluding the remaining ~950B was the substance of the fix; those two entries were then regenerated per the policy stated in weight-budgets.json ("regenerate from weight.mjs when intentional surface growth is accepted").

Verification

  • self-verify green
  • 336 tests pass, 0 fail
  • tsc -p tsconfig.ci.json clean
Closes a gap recorded as a CAPTURE seed from the phase 3/4 dogfood. ### The defect `decision-review.md`'s adjudicate step required grounding at least one library/API claim against Context7 and at least one factual claim against the codebase, but scoped grounding to the objections `refute` returned. On a clean pass there are no objections, so the guarantee went unreachable exactly when the result was most flattering, and the run reported a bare "no findings" that reads identically to a review that never ran. That is the same silent-pass class the review subsystem is otherwise careful about: a reviewer that could not run never silently passes a gate, a dropped reviewer emits a visible reason, a risk pre-filter must note each drop. The clean-pass path was the hole. ### The fix The grounding requirement retargets instead of lapsing. With zero objections it grounds the decision's own load-bearing claims, the assertions in its statement and `Evidence:` clause that would invalidate it if false, and reports each `confirmed` or `contradicted` with its citation. A `contradicted` claim rules `survives` and gets an amendment, since it is a finding the refutation missed. The `present` step and success criteria were updated to match, plus the skill's summary so the two do not drift. ### Budgets Both surfaces sat at exactly their byte budget, so any addition overran `self-verify`. The first draft was trimmed by 725B before concluding the remaining ~950B was the substance of the fix; those two entries were then regenerated per the policy stated in `weight-budgets.json` ("regenerate from `weight.mjs` when intentional surface growth is accepted"). ### Verification - `self-verify` green - 336 tests pass, 0 fail - `tsc -p tsconfig.ci.json` clean
Sign in to join this conversation.
No description provided.