Skip to content

444: a citation a commit adds says what it cites, and the backlog gets counted - #1003

Merged
calef merged 4 commits into
mainfrom
milestone/444-citations-say-what-they-cite
Sep 20, 2026
Merged

calef merged 4 commits into
mainfrom
milestone/444-citations-say-what-they-cite

Conversation

@calef

@calef calef commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

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 by script/lint as "new citations say what they cite". It reads the diff against git 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: a milestone N or §N on 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:

                    files  citations   named  unnamed  no record
roadmap proposals      23        196       5      101          0
roadmap blocks        439       5224     212     2351          0
decisions             188       1944      66      984          0
design/ (other)        25        444      38      224          0
notes/                175       3408     131     1660          0
Rust                  395       5867      33     2738          0
scripts                64        716      12      399          0
manifests              55        370       7      260          0
CI workflows           13         64       0       44          0
everything else        70        284       1      217          0
total                1447      18517     505     8978          0

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 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 containing a NUL byte.

The backfill, and what was left

25 pairs in README.md, CONTRIBUTING.md and SECURITY.md: the documents a stranger reads before they have a checkout. SECURITY.md earned the choice, where a person reporting a DMA escape met three bare decision numbers. notes/scripts.md (50) and notes/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 under design/naming.md's rule that a dated record keeps its words. The remaining 8,953 pairs are re-derivable with script/citations --census --list, which is why no copy of the list exists.

Gates

script/lint 0, script/citations --check 0, script/citations --ratchet 0, script/roadmap --check 0, script/names 0 (refusals unchanged), /bin/dash -n script/citations clean. This lane took the nife-dev toolchain link. The index row for 444 is not written: script/roadmap --write is the integrator's at merge.

Names are provisional: --ratchet and --census, and the lint section title "new citations say what they cite".

🤖 Generated with Claude Code

https://claude.ai/code/session_01STu3VeDYnEHem3iKCbzBF2

calef and others added 4 commits September 19, 2026 16:49
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
calef force-pushed the milestone/444-citations-say-what-they-cite branch from 1c9ad74 to e553fe3 Compare September 20, 2026 00:07
@calef calef changed the title Milestone 444: a citation says what it cites 444: a citation a commit adds says what it cites, and the backlog gets counted Sep 20, 2026
@calef
calef marked this pull request as ready for review September 20, 2026 00:07
@calef
calef enabled auto-merge September 20, 2026 00:08
@calef
calef added this pull request to the merge queue Sep 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 20, 2026
@calef
calef added this pull request to the merge queue Sep 20, 2026
Merged via the queue into main with commit 2ab287f Sep 20, 2026
40 checks passed
@calef

calef commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator Author

merge-drain: STALLED. #1003 took the call but is neither queued nor armed

@calef
calef deleted the milestone/444-citations-say-what-they-cite branch September 20, 2026 01:17
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