Skip to content

The sdk doc-nomination bridge cannot reach the auth surface: REGISTRAR_FILE_RE matches by filename convention and auth-plugin.ts matches neither alternative (#10534 follow-up 3) #11178

Description

@os-warren

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:

  1. 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.
  2. 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

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions