Skip to content

ApiRegistry / api-registry plugin 只在 packages/core/examples/ 里被装配,无任何真实 composition 挂载 —— ApiEndpointRegistrationSchema 因此整面零执行 #4939

Closed

Description

@xuyushun441-sys

在 #4910 开工核查中发现,记录备查,未认领。基线 origin/main @ 2e284b2546。

事实

packages/core/src/api-registry.ts 的 ApiRegistry(路由冲突检测、优先级解析、RBAC 集成、发现查询,约 500 行)由 createApiRegistryPlugin() 注册为 api-registry 服务。

装配点全部在示例文件里:

$ grep -rn "createApiRegistryPlugin" --include=*.ts packages/ examples/ | grep -v node_modules | grep -v .test.
packages/core/src/api-registry-plugin.ts:35,59      ← 定义处 + 文档注释
packages/core/examples/api-registry-example.ts:21,167,287,374,446
(无任何 packages/runtime、packages/cli、examples/app-* 的装配)

'api-registry' 服务的消费者同样只有 packages/core/examples/api-registry-example.ts。真实 boot 佐证:showcase 起 47 个 plugin(pnpm dev -- --fresh),plugin 列表里没有 api-registry。

因此 packages/spec/src/api/registry.zod.ts 的 ApiEndpointRegistrationSchema 整面零执行,不只是 #4686 盯的 rateLimit(registry.zod.ts:379),还包括 requiredPermissions(注释里承诺「the gateway layer automatically validates these permissions before allowing the request to proceed」—— 没有任何 gateway 层读它,这是安全语义)、parameters、requestBody、responses、security、operationId、tags。

与 #4936 的关系(两份端点声明,都不执行)

仓里有两套端点声明形状:api/endpoint.zod.ts 的 ApiEndpointSchema(从 defineStack({ apis }) 可达,#4936 证明其执行链断在挂载与 matchEndpoint 两处)与本单的 ApiEndpointRegistrationSchema(从 ApiRegistryEntrySchema 可达,执行器压根没被装配)。两套都零执行 —— 这本身就是 ADR-0076「一条路由一个属主」要防的形状,只不过这里两个属主都没上岗。

建议(协议级,留给维护者裁决)

  1. 按 ADR-0049 摘除 ApiEndpointRegistrationSchema / ApiRegistryEntrySchema 与 ApiRegistry 本身,示例一并删除。
  2. 装配 + 接执行:让真实 composition 挂载 api-registry,并把 requiredPermissions 等键接到实际的 gateway 校验;先解决与 ApiEndpointSchema 的二选一(声明式 apis:(ApiEndpoint)入站面全链路零执行:元数据装载成功、路由从未挂载、matchEndpoint 全仓无实现 #4936),否则是把第二套方言也养大。
  3. 与 声明式 apis:(ApiEndpoint)入站面全链路零执行:元数据装载成功、路由从未挂载、matchEndpoint 全仓无实现 #4936 合并裁决:两套端点声明的存废本就该一起决定,分开裁很容易留下第三份形状。

⚠️ requiredPermissions 的注释以现在时承诺自动鉴权(registry.zod.ts 约 383 行起),对着这段注释写元数据的作者会以为端点受保护 —— 无论走哪条路线,这段注释都必须先改成事实。

关联:#4686、#4910、#4936、#4938、ADR-0049、ADR-0076、Prime Directive #10。

Activity

  1. xuyushun441-sys commented on Aug 4, 2026

    @xuyushun441-sys
    CollaboratorAuthor

    分诊更新(2026-08-04):维护者已裁 —— 无条件退役,与 #4936 的「响亮拒绝」同批执行(裁决全文见 #4936)。两套端点声明形状收敛为一套;本形状只在 examples 装配过,零业务损失。不单独派发。


    Generated by Claude Code

  2. self-assigned this
    on Aug 4, 2026
  3. os-zhuang commented on Aug 4, 2026

    @os-zhuang
    Contributor

    🔒 认领(随 #4936 同批,不单独派发):spec 车道第 1 轮
    会话:session_01EYGdmvWP1ieZSLqvAW6uyd
    分支:claude/issue-4936-apis-loud-reject(与 #4936 同分支同 PR,PR 将同时声明 Fixes 两单)
    域:domain:spec
    文件面:见 #4936 认领评论(本单份额:packages/spec/src/api/registry.zod.ts 退役 + packages/core/src/api-registry*.ts / packages/core/examples/api-registry-example.ts 移除 + ADR-0087 登记)

    执行口径:维护者裁决「无条件退役,两套端点声明形状收敛为一套」;requiredPermissions 等键的现在时失实注释随退役一并消失。


    Generated by Claude Code

  4. added
    target:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Aug 4, 2026
  5. os-zhuang commented on Aug 4, 2026

    @os-zhuang
    Contributor

    ✅ 验收通过,随 PR #5065 与 #4936 同批落地(退役件:registry.zod.ts 全家 12 def / 67 authorable key、core ApiRegistry 家族、hono useApiRegistry 死选项;ConflictResolutionStrategy 因跨仓 ratchet 保留移入 api/router.zod.ts)。验收全文见 #4936。


    Generated by Claude Code

  6. removed
    target:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
    on Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions