Give Necessary the direction of the read its rules were missing - #387
Merged
Conversation
`Necessary` stated a list of things to keep out, and a list of that shape is discharged by reading the body and reporting that none of them is there. That answer is available for any body at no cost, which is why it varies with whatever a run happened to notice. Across the ten runs of the stability harness's baseline round, every `Necessary` walk line reports which prohibited items are absent and none names where a line's content already lives. The property now opens with the walk the rules were serving: take the body a line at a time and name where else that line's content lives. The read has a starting point and something to hold it against, which is the shape `Grounded` already has. The prohibitions stay. Several of them are the `nowhere` cases the walk does not reach on its own — a checklist rendered per item when every item is N/A, build results in a repository whose CI does not run them, the path taken to the delivered design — and the one rule change measured so far replaced a concrete obligation with a general test and moved nothing. The walk states that the list below it is where it lands rather than what it is. One duplicate goes: bullets in a list restating one another in different wording is one fact stated twice, so it sits under the rule that says so. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The walk failed a line whose content lives anywhere but nowhere, which contradicts two rules the file keeps. `Necessary` requires rationale that lives elsewhere to appear as the shortest summary that survives the link going dead, and a bare link is a defect; that summary answers the walk with a linked source. `Decidable` and `Scoped` require the body to name the change, and a name answers with the diff. Each answer now forfeits only the part it already carries: detail for the diff and the commits, output for the Checks panel, the fact itself for another line of the body, and everything past the shortest summary for a linked source. The prohibition the walk generalizes was bounded the same way — paraphrase of the diff, not mention of it. The property's line in the five-property list keeps the bounds it already stated and gains the read that produces them. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
ikuwow
marked this pull request as ready for review
August 22, 2026 10:32
This was referenced Aug 22, 2026
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.
Purpose
Necessarystated a list of things to keep out of a PR body. #381 puts the defect this way: a rule of that shape "is discharged by reading the body and reporting that none of them is there, which is an answer available for any body at no cost". That is also why it varies with whatever a run happened to notice.The property now opens with the read its rules were serving: take the body a line at a time and name where else that line's content lives. That gives the check a starting point and something to hold it against, which is the shape
Groundedalready has and the reason two runs ofGroundeddo the same work.Key changes
Necessaryopens with the walk, and the property's line in the five-property list gains the read that produces the bounds it already statedDecidableandScopedrequireNotes
#381 asked which prohibitions survive being derived from the walk and which have to stay named. All of them stay, for two reasons.
Several are the
nowherecases the walk does not reach: a pre-flight checklist rendered per item when every item isN/A, build and lint results in a repository whose CI does not run them, and the path taken to the delivered design. Their content lives nowhere else, so the walk alone would admit them, and the issue names this asymmetry as the substance of the work rather than a detail of the wording.The other reason is that replacing named cases with a general test has never been shown to help. #372 made that move under
Scoped, and the round built to measure it produced figures its own PR body sets aside: "Round 3's recall figures are not usable and neither support this change nor contradict it." So the move is unmeasured rather than refuted, and a wholesale rewrite of this property would rest on the same untested premise.The walk says "a line" without defining it for headings, table rows, or a line carrying two claims. Left as is:
Conformantalready fixes one item to one line in GitHub-posted markdown, and the granularity a checker needs follows from that, so a clause spelling it out would restate another property inside this one.Verification
Necessarywalk lines from the stability harness's baseline round are quoted in Restate Necessary as a source-attribution walk #381 (comment): each reports which prohibited items are absent, and none names where a line's content already lives. The harness output stays untracked under this repository's measurement-data policy, so that comment is where these two items are checkablegrep -n 'State a fact once'→ line 169, andgrep -n 'shortest summary'→ lines 180 and 182grep -n 'different wording'→ line 173, now underState a fact oncerather than beside itgrep -c '^- 'atmainand at the head).github/workflows/ci.yml): shellcheck over the repository's shell scripts, and a doctest pass overclaude/hooks/*.py. This change is Markdown only and reaches neither, so a green run is not evidence for it