444: a citation a commit adds says what it cites, and the backlog gets counted - #1003
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
…nted `script/citations --ratchet` reads the diff against the merge base and asks that a `milestone N` or `§N` on an added line carry a gloss, once per number per file. It is calef's ruling of 2026-09-19 and it answers notes/citations.md's standing objection exactly, which was about a sweep of 2,911 sites that each have to be read: a ratchet reads nothing retroactively and writes nothing mechanically. It was proved both directions before being wired into script/lint. Silent on a clean branch; a planted line citing three records reported exactly the two this file does not already gloss, which is the per-number-per-file rule doing its job. And it was priced first: replaying each lane's own diff over the 42 pull request merges from #953 to #1002 gives a median of 16 asks per pull request, 8 of them silent, with one outlier of 893. `--census` is the measurement that had never been taken. `--check` reads 560 glossed citations and the tree holds 18,517, so every earlier statement about the backlog was about the wrong set. 505 of 9,483 (file, number) pairs carry a gloss: 5.3%, against the 83% that the roadmap-after-the-split proposal measured over the glossed subset. Both are honest and they are about different sets. Nothing cited in the tree fails to resolve, across all 18,517 sites, which is script/roadmap and script/decisions doing their job. That zero was re-checked, because a git grep for citations turns up six-digit numbers: they come from binary bench captures through the "Binary file ... matches" trap script/decisions records, and the census skips a file with a NUL byte in it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
25 pairs in the three files a person reads before cloning anything. The rule is gloss where the citation is the reader's only route to what is meant, and SECURITY.md earned it: someone reporting a DMA escape met a parenthetical of three decision numbers with no way to learn what those sections claim without cloning the repository. Chosen rather than sampled, and 0.3% of the backlog. notes/scripts.md and notes/README.md were looked at and left: their rows already describe the target, so the number there is provenance rather than a pointer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
…ely left notes/citations.md gains the ratchet's rule and its five blind spots, the census table, the backfill's one-question rule, and the EXAMPLES transcript of the planted line. Its BUGS section keeps the sweep entry and corrects the 2,911 figure with the census. One surprise worth the sentence it got: quoting another file's bare citation is itself an added citation, so this page's illustration of a notes/scripts.md row is described rather than reproduced. Editing a quotation to satisfy a gate is the one fix that was not available. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2
calef
force-pushed
the
milestone/444-citations-say-what-they-cite
branch
from
September 20, 2026 00:07
1c9ad74 to
e553fe3
Compare
calef
marked this pull request as ready for review
September 20, 2026 00:07
calef
enabled auto-merge
September 20, 2026 00:08
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Sep 20, 2026
Collaborator
Author
|
merge-drain: STALLED. #1003 took the call but is neither queued nor armed |
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.
Lane: milestone/444-citations-say-what-they-cite, written by an agent; calef's account is the author GitHub shows.
Milestone 444, on calef's ruling of 2026-09-19: "add the gloss ratchet and launch a lane to address the 17% that fail today."
The ratchet
script/citations --ratchet, run byscript/lintas "new citations say what they cite". It reads the diff againstgit merge-base HEAD origin/main, never the tree, so a lane is asked only about text it wrote. The rule is per number per file: amilestone Nor§Non an added line passes if that number, under that scheme, is glossed somewhere in the same file. A paragraph naming §151 four times explains it once.Proved both directions. Silent on the clean branch. A planted line citing three records reported exactly two of them and stayed quiet about the third, because the file already glossed that one; the transcript is in
notes/citations.md's EXAMPLES and the line was removed in the next commit.Priced before it was turned on, by replaying each lane's own diff over the 42 pull request merges from #953 to #1002: a median of 16 asks per pull request, 8 of the 42 silent, one outlier of 893 (#970, 24 proposal files at once).
What it cannot catch is written beside the check: a citation arriving in a merge commit, a grounded gloss that is still the wrong citation, the permanent per-file escape, a parenthetical that opens with the citation, and captured logs and the generated index being out of the corpus.
The census, which is the deliverable nobody has seen
script/citations --census, reporting only:505 of 9,483 (file, number) pairs carry a gloss: 5.3%. The "83% split-proof by habit" figure is true of the 560 citations that carry a gloss; over the whole population it is 5%. Both are honest and about different sets, and the second is the one that prices the backfill.
The zero was re-checked rather than believed. A
git grepfor citations turns up six-digit numbers; they come from binary bench captures through the "Binary file ... matches" trapscript/decisionsrecords, and the census skips a file containing a NUL byte.The backfill, and what was left
25 pairs in
README.md,CONTRIBUTING.mdandSECURITY.md: the documents a stranger reads before they have a checkout.SECURITY.mdearned the choice, where a person reporting a DMA escape met three bare decision numbers.notes/scripts.md(50) andnotes/README.md(128) were looked at and deliberately left: their rows already describe the target, so the number is provenance rather than a pointer. Dated accounts and quotations were left underdesign/naming.md's rule that a dated record keeps its words. The remaining 8,953 pairs are re-derivable withscript/citations --census --list, which is why no copy of the list exists.Gates
script/lint0,script/citations --check0,script/citations --ratchet0,script/roadmap --check0,script/names0 (refusals unchanged),/bin/dash -n script/citationsclean. This lane took thenife-devtoolchain link. The index row for 444 is not written:script/roadmap --writeis the integrator's at merge.Names are provisional:
--ratchetand--census, and the lint section title "new citations say what they cite".🤖 Generated with Claude Code
https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2