Skip to content

Six more packages mount routes on the raw Hono app with no route ledger — the ledgers' blind spot is wider than trigger-api #11882

Description

@claude

Measured while implementing #11863 (the trigger-api hooks ledger). Filed unassigned — an
observation from that card's population sweep, not a claim on anyone's time.

What was measured

origin/main @ 4019e16cdc. IHttpServer.getMountedRoutes() cannot see a route mounted on
the framework-native handle — "routes an adapter mounts on its framework-native handle behind
getRawApp are outside this table by construction"
(packages/spec/src/contracts/http-server.ts).
So the #7526 route-ledger ↔ live-mount parity gate, which reads that table off a booted server,
is structurally blind to every getRawApp() mount, and the per-package ledgers (#3636) are the
only thing that can cover them.

Two of those mounters are covered. The rest are not. Every path below was grepped against all
seven in-repo route ledgers (runtime, rest, service-storage, service-i18n,
service-datasource, service-settings, plugin-auth): zero hits.

mounting fileroute(s)ledger
packages/cloud-connection/src/cloud-connection-plugin.ts (8 mounts, lines 231-634)GET/POST /api/v1/cloud-connection/{status,bind/start,bind/poll,unbind,install,installation,installed,org-packages}none
packages/cloud-connection/src/marketplace-install-local-plugin.ts (5 mounts, lines 246-251)POST/GET /api/v1/marketplace/install-local, DELETE .../:manifestId, POST .../:manifestId/{reseed,purge}-sample-datanone
packages/cloud-connection/src/marketplace-proxy-plugin.ts:371ALL /api/v1/marketplace/*none
packages/cloud-connection/src/runtime-config-plugin.ts:875,877GET /api/v1/runtime/config, GET /api/v1/studio/runtime-confignone
packages/metadata/src/routes/hmr-routes.ts:126,185 (mounted at plugin.ts:468)GET/POST /api/v1/dev/metadata-eventsnone
packages/cli/src/utils/console.ts:536-608GET /, GET /_console, GET /_console/*, GET /runtime/assets/:filenamenone

Covered, for contrast — the two that show the shape is answerable:

Why this is the known defect class

It is #11863's own rationale, one population wider: a route surface a package serves that
nobody reviewed the SDK disposition of is what #3528 was, and the /.well-known/objectstack
case (#7526) was found only because something read a live mount table. These cannot be found
that way — the mount table does not contain them.

Secondary effect, the same one #11863 records: #11050's corpus-wide detector takes the ledger
union as its authority, so each of these can only ever land in its unmatched listing.

Not proposed here

Whether each family wants a per-package ledger (#3636), a source-enumerating gate
(check-auth-mount-ledger.mjs's shape, which fits a rawApp mount better), or a single gate
over all raw-app mounters, is a design call — and the cli console rows in particular are
static-asset serving rather than API surface. The measurement is the contribution; the shape
is triage's.


Generated by Claude Code


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions