Skip to content

Give Necessary the direction of the read its rules were missing - #387

Merged
ikuwow merged 2 commits into
mainfrom
necessary-source-attribution-381
Aug 22, 2026
Merged

Give Necessary the direction of the read its rules were missing#387
ikuwow merged 2 commits into
mainfrom
necessary-source-attribution-381

Conversation

@ikuwow

@ikuwow ikuwow commented Aug 22, 2026

Copy link
Copy Markdown
Owner

Purpose

Necessary stated 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 Grounded already has and the reason two runs of Grounded do the same work.

Key changes

  • Necessary opens with the walk, and the property's line in the five-property list gains the read that produces the bounds it already stated
  • Each answer forfeits only the part it already carries, which is what keeps the walk from failing the linked-source summary the section requires and the change name Decidable and Scoped require
  • The prohibitions stay, and a line the walk lands on is a finding whether or not a named rule covers it
  • One bullet moves under the rule it restates

Notes

#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 nowhere cases the walk does not reach: a pre-flight checklist rendered per item when every item is N/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: Conformant already 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

  • The premise holds under the rules as they stand. All ten Necessary walk 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 checkable
  • One of those ten reported a violation, so the list does fire, at one run in ten: run 3's line and the finding behind it are quoted in the same comment
  • Every clause of the property's line in the five-property list has a home in the section: grep -n 'State a fact once' → line 169, and grep -n 'shortest summary' → lines 180 and 182
  • The moved bullet kept its policy: grep -n 'different wording' → line 173, now under State a fact once rather than beside it
  • The file's top-level bullet count moves from 49 to 50, the one added walk (grep -c '^- ' at main and at the head)
  • CI runs two jobs (.github/workflows/ci.yml): shellcheck over the repository's shell scripts, and a doctest pass over claude/hooks/*.py. This change is Markdown only and reaches neither, so a green run is not evidence for it

ikuwow and others added 2 commits August 22, 2026 18:38
`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
ikuwow marked this pull request as ready for review August 22, 2026 10:32
@ikuwow
ikuwow merged commit 6a4be63 into main Aug 22, 2026
6 checks passed
@ikuwow
ikuwow deleted the necessary-source-attribution-381 branch August 22, 2026 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant