Give the Necessary walk a unit and Grounded the verification-mechanism rule - #391
Merged
ikuwow merged 3 commits intoAug 22, 2026
Merged
Conversation
`Necessary` opens with a walk that takes the body a line at a time without saying what a line is. Paragraph and list-item granularity follows from `Conformant`, which fixes one item to one line in GitHub-posted markdown, so the walk needs no clause for those. A heading, a table, and a line carrying two claims are outside that derivation, and the walk now answers each: a heading answers for its own text, a table is taken whole with its lead-in, and a multi-claim line is answered a claim at a time. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every other rule under `Scoped` is decided by reading the diff and holding it against the stated intent or against the account the body gave. The verification-mechanism rule is decided by reading the body alone — its test is whether the body makes the claim — so it sits in a section whose read it does not perform. `Grounded` reads the body first, and its opening rules already govern the Verification section. The rule and its two sub-bullets move verbatim. `Scoped`'s line in the five-property list drops the clause that reached it, and `Grounded`'s gains one. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Review found four places where the two changes above left a checker to interpret rather than apply. `Scoped`'s line said "what it holds within this PR", which names no condition; it now names the self-containment rule it has to reach. `Grounded`'s line states the rule in the rule's own voice, so the presence test does not read as a checkability test. The walk answers a table row by row, read with the caption or lead-in that says what the table shows, which is the granularity `Necessary` already reasons at where it calls out a table row spelling out what an added rule says. The multi-claim line keeps the forfeit vocabulary the walk defines. The moved rule sits after the rules governing the Verification section, so its coverage-judgement sub-bullet reads as its own qualifier rather than as the section's preamble. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
ikuwow
marked this pull request as ready for review
August 22, 2026 11:55
ikuwow
deleted the
settle-the-necessary-walk-unit-and-the-verification-rule-home
branch
August 22, 2026 11:55
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
#376 closed with two questions left open, filed as #389 and #390. Both are settled here by the test #376 states for the whole five-property frame: what makes a property bind is which artifact the check reads first and what it holds that read against.
Key changes
Necessarywalk states its unit for a heading, a table row, and a line carrying more than one claim, the three shapes left over onceConformanthas fixed one item to one line in GitHub-posted markdown (Define the unit the Necessary walk takes #389)ScopedtoGrounded, the property whose read it performs (Decide where the verification-mechanism rule belongs #390)Scoped's names the self-containment rule that clause now has to reachNotes
Scoped's other rules are decided by reading the diff and holding it against the stated intent or against the account the body gave. The verification-mechanism rule is decided by reading the body alone, since its own sub-bullet makes the test whether the body makes the claim. A section carrying two read directions is what #376 records the property doing under the harness, where "Scoped: 10 of 10 in round 1 resolve it to the changed-file list".Groundedreads the body first and already governs the Verification section in its opening rules. The rule sits after those rules rather than above them, so its coverage-judgement sub-bullet reads as its own qualifier and not as a preamble over the rules that do demand the author attempt what is reachable.The move's cost is that a finding on that rule is reported under a different property name afterwards, which is the cost #382 weighed against a different move. Here it is zero, measured against every finding the harness has recorded — see Verification.
#387 left the walk's unit undefined, holding that "a clause spelling it out would restate another property inside this one" because
Conformantalready fixes one item to one line in GitHub-posted markdown. That reasoning bounds this change rather than blocking it: the paragraph and list-item case is still left to the derivation, and only the three shapes outside it are named.Two things review raised and this PR leaves alone.
Groundednow holds both the rule that a named mechanism needs no evidence and the rule that a listed verification item carries its evidence, which a body line naming CI meets one way and not the other; that tension is in the evidence rule's wording, predates this branch, and is a change of its own. And the heading rule says what a heading answers for as well as that the walk takes it, which one reviewer read as restatingNecessary's "a section heading grants no exemption"; the clause stays, because without it the walk can answer for a heading by pointing at the lines beneath it and forfeit every heading in the body.Verification
Each rule
## Scopedkeeps was checked against its reworded line, the correspondenceclaude/rules/rule-authoring.mdrequires when a summary changes:## ScopedrulemainGrounded's line grows and loses nothing: the hunk atgit diff main -U0appends to the existing clause rather than replacing it, so every rule it reached before is still reached, and the moved rule is reached by "the body names a verification mechanism for the code paths the diff changes"The moved rule is byte-identical at its new home:
grep -A3 '^- The body names a verification mechanism'run againstgit show main:claude/skills/git-workflow/pr-guidelines.mdand against the head file compare equal (diff→ exit 0)The file's top-level rule count is unchanged:
grep -c '^- 'gives 50 atmainand 50 at the head, so the move added and dropped nothing and the walk's three additions are sub-bulletsAll 57 finding entries the stability harness recorded across its four rounds (19 baseline, 9 round 1, 14 round 2, 15 round 3, two of them
None.placeholders) were read in full, printed with their severity, property, and text by apython3pass overikuwowfiles/pr-selfcheck-stability/*/findings.jsonl. None rests on the moved rule. The one finding reporting that a changed code path carries no verification, baseline run 5, was already filed underGrounded. The harness stays untracked under this repository's measurement-data policy, which is why the reading is recorded hereCI runs two jobs (
.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