Filed unassigned by the os-dev seat implementing #10683. Recording, not fixing — measured as a by-product of that card's before/after, and it is a second discriminator with its own population move, which the #10683 card's own rule says wants its own before/after rather than a rider. No live instance on today's tree.
What
#10683 moved parseLedgerSource's row recognizer (and the first routesDeclared term) to read through codeOnly, closing the comment/string-payload phantom. But #10500 built two exact discriminators for "is this a declaration in code position", and declarationsIn reads through both:
constcode=codeOnly(text);constskip=typeDeclRegions(code);
The recognizer now reads the first and still not the second. codeOnly does not blank type declarations — it has no reason to, they are code — so a single-quoted route: inside an interface / type body is still a row.
Measured (this branch, parseLedgerSource driven directly)
export interface Entry { route: 'GET /api/v1/gone' | 'GET /api/v1/meta'; client: string }
export const L = [
{ route: 'GET /api/v1/meta', family: 'metadata', disposition: 'sdk', client: 'meta.getTypes' },
];
⇒ rows 2 · routesDeclared 2 · clientsDeclared 1 · declined 0 · outsideCode 0
Two rows from a file declaring one — the identical silent shape #10683 fixed, arriving through the other discriminator. outsideCode (#10683's reporting half) does not see it either: the lead is in code position, so it is correctly not a prose lead. And no verdict fires, for the same reason as before — rows and routesDeclared move together, so the partial-read guard sees no gap.
The literal-union member is not hypothetical as a shape: orphanSource in the self-test pins exactly that spelling on the client: key (client: 'i18n.getLocales' | 'i18n.getPlurals'), written there specifically because "a literal-union TYPE member opens with the very quote this counter reads". The route: key is the same spelling with nothing keeping it out of the row loop.
Why it is a finding and not a live defect
All seven live ledgers declare route: string; and nothing else — scanned on this branch: 0 single-quoted route: leads inside a type declaration, across all seven. Live figures stay exact (259 of 259, 221 of 221, 176 unreachable).
Direction, not a prescription
Applying typeDeclRegions to the recognizer is one line beside the codeOnly call and reuses the existing region list. ⚠️ It moves the measured population on the same terms #10683 did, so it wants its own before/after against the --bridge-coverage header — which is exactly why it was not ridden along on that card. Measured delta today would be zero.
The alternative reading is that the row loop should stop deciding code position for itself and filter declarationsIn(text) — the file already states that design goal twice ("two scans that each decide separately what "in code position" means are two scans that can drift into disagreeing while both look right"). That is a bigger change with the same population effect.
Refs: #10683, #10500, #9896.
Generated by Claude Code
Filed unassigned by the
os-devseat implementing #10683. Recording, not fixing — measured as a by-product of that card's before/after, and it is a second discriminator with its own population move, which the #10683 card's own rule says wants its own before/after rather than a rider. No live instance on today's tree.What
#10683 moved
parseLedgerSource's row recognizer (and the firstroutesDeclaredterm) to read throughcodeOnly, closing the comment/string-payload phantom. But #10500 built two exact discriminators for "is this a declaration in code position", anddeclarationsInreads through both:The recognizer now reads the first and still not the second.
codeOnlydoes not blank type declarations — it has no reason to, they are code — so a single-quotedroute:inside aninterface/typebody is still a row.Measured (this branch,
parseLedgerSourcedriven directly)⇒
rows 2 · routesDeclared 2 · clientsDeclared 1 · declined 0 · outsideCode 0Two rows from a file declaring one — the identical silent shape #10683 fixed, arriving through the other discriminator.
outsideCode(#10683's reporting half) does not see it either: the lead is in code position, so it is correctly not a prose lead. And no verdict fires, for the same reason as before —rowsandroutesDeclaredmove together, so the partial-read guard sees no gap.The literal-union member is not hypothetical as a shape:
orphanSourcein the self-test pins exactly that spelling on theclient:key (client: 'i18n.getLocales' | 'i18n.getPlurals'), written there specifically because "a literal-union TYPE member opens with the very quote this counter reads". Theroute:key is the same spelling with nothing keeping it out of the row loop.Why it is a finding and not a live defect
All seven live ledgers declare
route: string;and nothing else — scanned on this branch: 0 single-quotedroute:leads inside a type declaration, across all seven. Live figures stay exact (259 of 259,221 of 221, 176 unreachable).Direction, not a prescription
Applying⚠️ It moves the measured population on the same terms #10683 did, so it wants its own before/after against the
typeDeclRegionsto the recognizer is one line beside thecodeOnlycall and reuses the existing region list.--bridge-coverageheader — which is exactly why it was not ridden along on that card. Measured delta today would be zero.The alternative reading is that the row loop should stop deciding code position for itself and filter
declarationsIn(text)— the file already states that design goal twice ("two scans that each decide separately what "in code position" means are two scans that can drift into disagreeing while both look right"). That is a bigger change with the same population effect.Refs: #10683, #10500, #9896.
Generated by Claude Code