Skip to content

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

Description

@xuyushun441-sys

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

事实

packages/core/src/api-registry.tsApiRegistry(路由冲突检测、优先级解析、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.tsApiEndpointRegistrationSchema 整面零执行,不只是 #4686 盯的 rateLimit(registry.zod.ts:379),还包括 requiredPermissions(注释里承诺「the gateway layer automatically validates these permissions before allowing the request to proceed」—— 没有任何 gateway 层读它,这是安全语义)、parametersrequestBodyresponsessecurityoperationIdtags

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

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

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

  1. 按 ADR-0049 摘除 ApiEndpointRegistrationSchema / ApiRegistryEntrySchemaApiRegistry 本身,示例一并删除。
  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

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions