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.

Activity

  1. self-assigned this
    on Jul 21, 2026
  2. os-zhuang commented on Jul 24, 2026

    @os-zhuang
    ContributorAuthor

    Resolved — closing.

    All three asks are satisfied on main:

    Refs: #3386, #3384, #3354, #3388, #3361, #3362, #2698, #3358.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingtests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions