Carved out of #10534 as its own card, which is what that card's own text and its triage grading both instructed once the fence cleared. The fence has cleared — PR #10501, which owned scripts/docs-audit/affected-docs.mjs, merged 2026-08-21T02:46:52Z (commit 4e7229a6). Two separate seats verified that independently rather than taking the card's word for it.
Filed unassigned and unlabelled for triage grading.
The measurement (from #10534, not re-derived here)
scripts/docs-audit/affected-docs.mjs --bridge-coverage:
client-bound ledger rows ... 221
reachable ................ 45
UNREACHABLE .............. 176
55 of 55 unreachable packages/plugins/plugin-auth/src/auth-route-ledger.ts
Every client-bound row in the auth ledger is unreachable by the sdk doc-nomination bridge. The cause is one filename convention: the bridge finds route registrars by matching
REGISTRAR_FILE_RE = /(?:^|\/)(?:[\w.-]*route[\w.-]*|[\w.-]*-server)\.ts$/
and the file that actually registers this surface is auth-plugin.ts, which matches neither alternative. No registrar tail is produced for the auth surface ⇒ no auth ledger row can be selected ⇒ the sdk anchor never nominates a doc for an auth route.
That is what let a route mount and its documentation gap ship separately with nothing objecting — the mechanism behind #9941 and #10050.
Why this is a fork rather than a repair
#10534's body names two options and they are materially different contracts:
- Teach
REGISTRAR_FILE_RE about auth-plugin.ts — narrow, one file, no new convention. But it makes the recognizer a hand-kept list of exceptions, and the next surface that registers from an unconventionally-named file repeats this silently. - Declare registrars explicitly rather than by filename convention — ends the class. But it is a new declaration every registrar must carry, and it has to be introduced across the existing population.
⚠️A constraint whoever takes this inherits, recorded by #10501's own PR body: that recognizer is deliberately not widened, and its --self-test pins the narrow population so a silent widening reddens. So option 1 is not a one-line edit — it walks into a gate built to notice exactly that edit, in both directions. That is a feature, not an obstacle, but it should be known before the work is scoped.
⚠️A second unverified fact, flagged by the #11149 seat and worth measuring before either option: whether hintCovers accepts a brace glob. It was named as unverified and must be measured, not assumed.
The baseline is stable — two landings did not move it
Both PRs that touched this surface since #10534 was filed left the 55 of 55 figure untouched, so whoever picks this up starts from the same number the census measured:
Related, and NOT this card
Those three together suggest the derivation's blind spots have more than one cause; each is filed separately rather than merged into one sweep, because the causes are different and the remedies are too.
Refs
#10534 (parent card; follow-ups 1, 2 and 4 all landed) · #10501 (the fence, merged) · #9572 (the original 221→45 bridge measurement, closed) · #9941 / #10050 (the two incidents this bridge gap allowed) · PR #10660 · PR #11149
Carved out of #10534 as its own card, which is what that card's own text and its triage grading both instructed once the fence cleared. The fence has cleared — PR #10501, which owned
scripts/docs-audit/affected-docs.mjs, merged 2026-08-21T02:46:52Z (commit4e7229a6). Two separate seats verified that independently rather than taking the card's word for it.Filed unassigned and unlabelled for triage grading.
The measurement (from #10534, not re-derived here)
scripts/docs-audit/affected-docs.mjs --bridge-coverage:Every client-bound row in the auth ledger is unreachable by the
sdkdoc-nomination bridge. The cause is one filename convention: the bridge finds route registrars by matchingand the file that actually registers this surface is
auth-plugin.ts, which matches neither alternative. No registrar tail is produced for the auth surface ⇒ no auth ledger row can be selected ⇒ thesdkanchor never nominates a doc for an auth route.That is what let a route mount and its documentation gap ship separately with nothing objecting — the mechanism behind #9941 and #10050.
Why this is a fork rather than a repair
#10534's body names two options and they are materially different contracts:
REGISTRAR_FILE_REaboutauth-plugin.ts— narrow, one file, no new convention. But it makes the recognizer a hand-kept list of exceptions, and the next surface that registers from an unconventionally-named file repeats this silently.--self-testpins the narrow population so a silent widening reddens. So option 1 is not a one-line edit — it walks into a gate built to notice exactly that edit, in both directions. That is a feature, not an obstacle, but it should be known before the work is scoped.hintCoversaccepts a brace glob. It was named as unverified and must be measured, not assumed.The baseline is stable — two landings did not move it
Both PRs that touched this surface since #10534 was filed left the
55 of 55figure untouched, so whoever picks this up starts from the same number the census measured:server-onlywith noclient:— so the client-bound row count is unchanged.docs-audit/check-affected-docsran green on it.Related, and NOT this card
check:ratchet-remedy-authoritysweeps every gate inscripts/anddispatch-gatescan derive it for none of them #11155 —check:ratchet-remedy-authoritysweeps every gate script in the repo anddispatch-gatescan derive it for none of them. Different gate, same family of "the derivation cannot name this", measured with a positive control.Those three together suggest the derivation's blind spots have more than one cause; each is filed separately rather than merged into one sweep, because the causes are different and the remedies are too.
Refs
#10534 (parent card; follow-ups 1, 2 and 4 all landed) · #10501 (the fence, merged) · #9572 (the original 221→45 bridge measurement, closed) · #9941 / #10050 (the two incidents this bridge gap allowed) · PR #10660 · PR #11149