docs(review-rigor): V3 — prevention does not close a detection finding - #272
Open
ClintonSarkar wants to merge 1 commit into
Open
Conversation
A self-review loop cleared a change three times after resolving "nothing gates this against regrowth" with a declarative constraint. The human reviewer's first response was CHANGES_REQUESTED: the invariant still had no committed test, so deleting the constraint would silently restore the defect. Both parties had named the same risk; they diverged on what closes it. A change to the enforcement mechanism was accepted as answering a finding about missing verification. V1 does not catch this — nothing was hedged, and the resolution was real, working code that genuinely improved the change. Two later passes then inherited the disposition instead of re-asking whether the finding was closed. V3 states the rule: a finding that something is unverified closes only when something FAILS on regression, and the settling question is what turns red if the hardening is deleted. It carries the detection cue, the self-review exposure, and the sub-rule that a red-then-green demo is only evidence if the artifact under test actually moved — two vacuous negatives preceded a valid one in the incident, one because a different flag already suppressed the symbols being "exposed" and one because a line-ending mismatch meant the edit never applied. Also extends the Re-review continuity note to say V3 applies across passes, and cross-references it from Tests so the regression-test check names hardening as a non-substitute. Closes benitogf#271 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #271
Adds V3 to
core/review-rigor→ Verdict integrity: a finding about detection is not closedby a change to prevention.
Why V1 doesn't already cover it
V1 bans speculative clears — it keys on hedge-words and unverified claims. The miss this comes from
had neither. A self-review pass correctly found "nothing gates this invariant against regrowth", the
author answered it with a declarative constraint that pins the invariant, and that constraint was
real, working, better code. Nothing was hedged; the item was marked resolved with confidence.
But the finding was about verification, and the answer was about likelihood. Declared is not
checked — deleting the declaration broke nothing, so the gap the finding named survived. Two further
review passes then inherited the disposition rather than re-litigating it, which is the documented
behaviour of Re-review continuity, and the human reviewer's first response was
CHANGES_REQUESTEDon exactly that gap.Self-review is especially exposed here, because the accepted resolution is frequently the reviewer's
own earlier suggestion — there is no independent party to notice the goalposts moved.
The rule as encoded
with the detection cue (the finding's own words are no test / nothing catches / unenforced / could
silently regress, and the resolution changed a mechanism instead of adding an observer), the
self-review/re-review exposure, and a ✅/❌ pair.
It also carries one sub-rule learned expensively in the same incident: a red-then-green demo is only
evidence if the artifact under test actually moved. Two negatives passed vacuously before a valid
one existed — the first widened a declarative allowlist whose symbols a different flag already
suppressed, so the built output was byte-identical; the second used a pattern that silently failed to
match because of line-ending differences, so the change was never applied and the build stayed green.
Both read exactly like a passing check. Editing the source that supposedly produces an artifact is not
the same as changing the artifact.
Scope
docs/core/review-rigor.mdonly, +10/−4:changes-verdict line updatedfrom
V1–V2toV1–V3.in an earlier pass is inherited rather than re-litigated, so re-ask closed-vs-mitigated.
at V3.
Swept for stale references to the old
V1–V2range (none remain) and for Go-embedded doctrinereferencing these rules (none), so this is a docs-only writeback with no toolchain verification
required.
🤖 Generated with Claude Code
📚 Learned by detritus — absorb
session/2026-08-06-export-surface-invariant