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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions