Skip to content

Route parity: discovery-advertised routes must be reachable on the hono server (os serve/dev) — declared === enforced #3369

Description

@os-zhuang

Problem

Two v16.0 regressions found in the #3358 sweep — #3361 (per-request admin-gated Server-Timing) and #3362 (mark-notification-read) — share one root cause: the handler is registered on the runtime HttpDispatcher / createDispatcherPlugin path, but os serve / os dev / os start actually run the hono server (@objectstack/plugin-hono-server), which resolves identity via its own self-contained resolveCtx and mounts only a subset of routes. Handlers on the dispatcher path silently 404 / no-op on the shipped server, even though discovery advertises them (hono-plugin.ts:688 advertises notifications: → 404). /api/v1/mcp returns 501 from the same block (dispatcher-plugin.ts:660). This is a declared ≠ enforced gap for HTTP routes.

Because unit tests exercise the two registration paths in isolation (e.g. server-timing.test.ts calls allowPerfDisclosure() manually "as the dispatcher would"), the integration gap is invisible.

Ask — make route reachability declared === enforced

Why

A metadata/discovery-driven platform must not advertise routes that 404 on its own default server. One reconciliation + one boot-the-real-server test closes an entire class of "works in the dispatcher, dead on os serve" bugs.

Refs: #3358 (sweep), #3361, #3362. Also surfaced in objectstack-ai/objectui#2762.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingtests

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions