Skip to content

runtime: adapter 枚举 DomainHandlerRegistry 挂显式路由(裁决:有意不排期) #3608

Closed

Description

@os-zhuang

从 #2462 拆出,状态=deliberately unscheduled(ADR-0076 OQ#9 终裁 #3576)——本 issue 是防重新发明的台账,不是待办。

设想

HTTP adapter 枚举 DomainHandlerRegistry.list() 为每个 prefix 挂显式路由(app.all(prefix + route.prefix + '/*')),catch-all 只剩真 404——HTTP 层可打印自己的路由表。

为什么不做(#3576 裁决)

dispatch() 的关卡序(env 解析→身份→auth gate→membership→scope strip)是横切的:显式路由后每条路由仍须过全部关卡 ⇒ 关卡必须 middleware 化或逐 handler 重复——重构成本大、行为面风险回归,而收益(路由可打印)已由 DomainHandlerRegistry.list() 可枚举性 + route-parity 门(declared===enforced e2e)+ conformance 41 断言基本覆盖。

重启条件(满足其一再议)

  • 关卡序因其他独立动机被 middleware 化;
  • 出现必须在 adapter 层做 per-prefix 差异化(限流/超时/中间件)的真实需求。

Activity

  1. os-zhuang commented on Jul 27, 2026

    @os-zhuang
    ContributorAuthor

    归档关闭:deliberately unscheduled,防撞锚点已三层就位

    裁决与重启条件保留在本 issue 正文,不再占用 open 列表。三层防线:

    1. 代码第一现场(docs(hono): catch-all 现场裁决锚点 (#3608 归档前置) #3637 合并):packages/adapters/hono/src/index.ts 的 catch-all 处直接写明"改成显式 per-prefix 挂载前先读 OQ#9 裁决",并点名 naive split 会绕过关卡序 → authz(D10): getReadFilter 缺 delegator 交集 — analytics read-scope 对 agent 上下文不与委托人 RLS 求交(原 Gap 2 /analytics/query 无 context 已修复) #2852 那类 RLS 泄漏。想动这行的人第一眼就能看到。
    2. ADR-0076 OQ#9 裁决段(docs(adr): ADR-0076 OQ#9 裁决 — catch-all 洗白、步骤①吸收完成 (#2462) #3576):完整论证——病根是不可枚举的上帝 if 链而非 catch-all 本身;关卡序横切,显式路由需 middleware 化才成立,成本大于收益。
    3. 本 issue 全文(closed 可搜):重启条件 = 关卡序因独立动机被 middleware 化,或出现必须 per-prefix 差异化(限流/超时/中间件)的真实需求。

    满足重启条件时重开即可。

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions