Filed unassigned by the dev seat working #9182 (PR #9239), session session_01Y26DJEHSBhhAQ6wwfsHNza. Observation class — recording the residual, not proposing a fix. Duplicate-searched by keyword and by file path.
What was measured
#9182 asked for "adding one error code touches one page". PR #9239 takes it from 11 pages / 69 lines to 2 pages / 3 lines, by removing the vocabulary-cardinality echo (+N more) from the in-shape summary position, which accounted for 66 of the 69 lines and for 9 of the 11 pages entirely.
The residual two pages are not echo — both genuinely spell the new code:
content/docs/references/api/contract.mdx ### Allowed Values: `ApiError.code` 288 bullets
content/docs/references/api/error-code-ledger.mdx the ledger's own listing 288 bullets
Verified by page-set comparison against the source-of-truth enum (the neighbour control run on PR #9239): both list 288/288, zero missing, zero extra, zero pairwise divergence. So this is duplication, not drift — today.
Why it is worth recording
Two pages carry a byte-identical copy of one vocabulary, each regenerated from the same source. That is the same shape #9182 was filed about (N artifacts derived from one ledger), one order of magnitude smaller: it keeps a second page in the blast radius of every error-code PR, and it is a second place a regen can silently drop a side — the pages produce no conflict markers, which is the hazard #9182 measured and #8986 paid for.
⛔ Not claimed: that either copy is wrong, or that one should simply be deleted. contract.mdx documents ApiError.code (the schema property) and error-code-ledger.mdx documents the ledger; a reader arriving at either has a fair claim on the list. Collapsing one into a cross-reference is a docs-structure decision with a real readability cost, and the generator currently has no notion of "this vocabulary is already spelled on another page" — the relocation in formatPropertyType is page-local by construction.
⛔ Not measured: how often the two diverge in practice. They agree at a68ddebea; nothing here establishes a rate.
If it is ever picked up
The lever is formatPropertyType's relocation in packages/spec/scripts/lib/format-type.ts (the ### Allowed Values emitter) plus whatever the ledger page uses — the two would need one owner and a link from the other. Note the constraint recorded on #9182: the regen must stay a generated artifact driven by the gate, no hand-edited anchor files.
Backlinks: #9182 (the parent measurement) · PR #9239 · #8986 (the silent-drop hazard)
Generated by Claude Code
Filed unassigned by the dev seat working #9182 (PR #9239), session
session_01Y26DJEHSBhhAQ6wwfsHNza. Observation class — recording the residual, not proposing a fix. Duplicate-searched by keyword and by file path.What was measured
#9182 asked for "adding one error code touches one page". PR #9239 takes it from 11 pages / 69 lines to 2 pages / 3 lines, by removing the vocabulary-cardinality echo (
+N more) from the in-shape summary position, which accounted for 66 of the 69 lines and for 9 of the 11 pages entirely.The residual two pages are not echo — both genuinely spell the new code:
Verified by page-set comparison against the source-of-truth enum (the neighbour control run on PR #9239): both list 288/288, zero missing, zero extra, zero pairwise divergence. So this is duplication, not drift — today.
Why it is worth recording
Two pages carry a byte-identical copy of one vocabulary, each regenerated from the same source. That is the same shape #9182 was filed about (N artifacts derived from one ledger), one order of magnitude smaller: it keeps a second page in the blast radius of every error-code PR, and it is a second place a regen can silently drop a side — the pages produce no conflict markers, which is the hazard #9182 measured and #8986 paid for.
⛔ Not claimed: that either copy is wrong, or that one should simply be deleted.
contract.mdxdocumentsApiError.code(the schema property) anderror-code-ledger.mdxdocuments the ledger; a reader arriving at either has a fair claim on the list. Collapsing one into a cross-reference is a docs-structure decision with a real readability cost, and the generator currently has no notion of "this vocabulary is already spelled on another page" — the relocation informatPropertyTypeis page-local by construction.⛔ Not measured: how often the two diverge in practice. They agree at
a68ddebea; nothing here establishes a rate.If it is ever picked up
The lever is
formatPropertyType's relocation inpackages/spec/scripts/lib/format-type.ts(the### Allowed Valuesemitter) plus whatever the ledger page uses — the two would need one owner and a link from the other. Note the constraint recorded on #9182: the regen must stay a generated artifact driven by the gate, no hand-edited anchor files.Backlinks: #9182 (the parent measurement) · PR #9239 · #8986 (the silent-drop hazard)
Generated by Claude Code