docs(gate): the package-README census reads 26 across 8 files, and says which commit it read that on - #8536
Conversation
…ys which commit it read that on `check-doc-component-types.mjs`' header recorded its own census as "26 unregistered `type` literals across 12 files". The `26` is right; the `12` never was. PR #8111 landed the sentence and its own per-file table in the same artifact, and that table lists 8 files with a non-zero unregistered column (app-shell, mobile, plugin-dashboard, plugin-detail, plugin-gantt, plugin-grid, plugin-report, plugin-view) — so the summary contradicted the measurement it summarises, on the same page. Re-derived on c300267 with this gate's own `deriveRegistryKeys`, its fence walker and its `type`-literal matcher over all 39 `packages/NAME/README.md`: README files: 39 | blocks: 382 | type literals: 240 | registry keys: 656 unregistered sites: 26 across 8 file(s) All 26 `file:line:value` triples match #8111's table element for element, and the four blind spots resolve to `packages/data-objectstack/README.md:603-606` (four unquoted YAML scalars in one `yaml` fence, confirmed against a control term in the same run). Only the file COUNT was wrong. Why the paragraph gained a date rather than just a corrected numeral. This is the class objectui#7448 ruled on one file over — the workflow header of this very gate carried "184 pages (144 `.mdx` + 40 `.md`)", every part drifted, and nothing went red — and the ruling recorded there is that changing 184 to 188 "would only have restarted that clock". Its mechanical half, the `documentCounts` pin, reads workflow YAML headers only; no copy of it reads a gate `.mjs` header, which is why this one rotted unobserved. Deleting the numbers outright (7448's remedy) is not available here: the sentence argues that the census does NOT read zero, so the magnitude is the argument. The middle is the shape `check-doc-fence-languages.mjs` already uses for its own census — `273537957`: 83 files, 105 blocks — a reading anchored to a commit, which cannot rot because it is history rather than a live claim. Comment-only; the gate's verdict is byte-identical either side. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
|
LANDED — Landing probe, on a re-fetched
|
| probe | expect | read |
|---|---|---|
26 unregistered `type` literals across 8 files |
> 0 | 1 |
Re-derived on |
> 0 | 1 |
the date anchor c30026715 |
> 0 | 1 |
packages/data-objectstack/README.md:603-606 |
> 0 | 1 |
273537957 — the precedent it copied from check-doc-fence-languages.mjs |
> 0 | 1 |
⭐ firing control — plus 4 blind spots, present before and after, same command shape |
> 0 | 1 |
negative — across 12 files |
0 | 0 |
⭐ nonsense control — zzq-not-a-real-token-8484 |
0 | 0 |
⇒ Both zeros are readings: the same command returns 1 on a phrase this diff did not touch, and 0 on a token that cannot exist.
What is now on main
The gate header no longer claims a file count contradicted by the census that produced it, and — the part that matters more than the numeral — the reading is dated: it names the commit it was measured on and the instrument that re-derives it. ⭐ That is this repository's own recorded verdict on this exact class, applied to the gate that carries it: objectui#7448 ruled that changing one bare number "would only have restarted that clock", and that ruling lives at scripts/__tests__/check-doc-component-types.test.ts:946 — this gate's own test file.
documentCounts pin to gate .mjs docblocks reports 6 / 2 / 8 hits over the three doc gates' prose, most of them legitimate dated readings the pattern cannot tell from live claims. That gap is objectui#8535.
Generated by Claude Code
Fixes #8484
scripts/check-doc-component-types.mjs' header recorded its own package-README census as "26 unregisteredtypeliterals across 12 files". The26is right; the12never was — and it was wrong against the artifact that produced it, not only against today's tree: PR #8111 landed that sentence and its own per-file table in the same body, and the table lists 8 files with a non-zero unregistered column.Re-derived, with the gate's own instrument
Not taken from the card.
deriveRegistryKeys(root)plus this gate's fence walker and itstype-literal matcher, over all 39packages/NAME/README.md, onc30026715:All 26
file:line:valuetriples match PR #8111's table element for element. The other three numerals in the same sentence were re-measured too and all hold: 39 files, 26 sites, and the 4 blind spots, which resolve topackages/data-objectstack/README.md:603-606— four unquoted YAML scalars in oneyamlfence. That last reading is a zero from the quoted matcher, so it carries a control: the file has 46 fence markers and the termobjectstackhits 32 times in the same run, and the fourtype:lines are the only four in the file.Only the file COUNT was wrong.
Why the paragraph gained a date instead of just a corrected numeral
This is the class objectui#7448 ruled on, one file over — the workflow header of this same gate carried "184 pages (144
.mdx+ 40.md)", every part drifted, and no check went red over the whole distance. The ruling recorded incheck-doc-component-types.test.tsis explicit that correcting the numeral is the wrong move: "Changing 184 to 188 would only have restarted that clock."Its remedy — delete the count, state the population — is not available here: this sentence's whole argument is that the census does not read zero, so the magnitude is the argument. The middle is the shape
check-doc-fence-languages.mjs:345already uses for its own census (`273537957`: 83 files, 105 blocks): anchor the reading to the commit it was taken on and name the instrument that re-derives it. A dated reading cannot rot, because it is history rather than a live claim.On pinning the census — considered, declined, with the reason
The card exists because nothing asserts this number. Two honest pins were available and both are refused, deliberately rather than by omission:
documentCountspin to.mjsgate headers. This is the class's own mechanical answer, and its absence here is exactly why the count rotted unobserved — measured: all three copies read workflow YAML headers only. But a verbatim extension is a false-positive machine. Run unchanged over the three doc gates' comment prose it reports 6 / 2 / 8 hits, and most are legitimate dated readings the pattern cannot tell from live claims.That second point is a real gap and larger than this card, so it is filed rather than dropped: objectui#8535 (
findingonly, unassigned), which carries the measurement above and costs the two candidate designs.The date anchor in this diff is what protects the sentence in the meantime, at zero ongoing cost.
Scope
One file, comments only. No behaviour, no floor, no scan population moves. PR #8111's body and objectui#8115's card body are left alone as historical records, per the card. Note for the PM seat, not acted on here: objectui#8115's triage comment is not a historical record — it quotes the
12as a live instruction while telling its implementer not to re-derive the census. That brief is the PM seat's to correct.Verification
node scripts/check-doc-component-types.mjsEXIT=0—✅ Every documented component type is registered.(188 docs, 1106 blocks, 891 literals, 656 keys)vitest run scripts/__tests__/check-doc-component-types.test.tsscripts/__tests__files that name this gatepnpm type-check:scriptsEXIT=0pnpm check:control-bytesEXIT=0, 6743 tracked text filespnpm check:comment-mask-corpusEXIT=0pnpm check:entry-guardEXIT=0pnpm check:doc-fencesEXIT=0node scripts/check-changeset-presence.mjsEXIT=0— "no changeset is owed" (1 file changed, 0 published source)pnpm lint:rootEXIT=0— 277 files, 0 errors (32 pre-existing warnings, none in this file; the changed file alone reports 0/0)Exit codes were captured before any pipe. Lint was not narrowed:
lint:root's full 277-file population ran, the count is read from eslint's own--format jsonoutput, andeslint.config.jsdeclares noprojectService/project, so type-aware linting is off and a comment-only edit inside one file cannot move any other file's verdict.pnpm check:doc-snippetsis NOT MEASURED, not green and not red: it exits 2 with[unbuilt-package]for every package, i.e. a prerequisite (whole-tree build) not met. It reads doc snippets, not this file, and CI builds.Also observed and not chased, as instructed:
Test (shard 2/4)is flaky onpackages/plugin-kanban/src/ObjectKanban.contractEnvelope-6839.test.tsx:134— objectui#8493, unrelated to this diff.Generated by Claude Code