在 #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` 的二选一(#4936),否则是把第二套方言也养大。 3. **与 #4936 合并裁决**:两套端点声明的存废本就该一起决定,分开裁很容易留下第三份形状。 ⚠️ `requiredPermissions` 的注释以**现在时**承诺自动鉴权(`registry.zod.ts` 约 383 行起),对着这段注释写元数据的作者会以为端点受保护 —— 无论走哪条路线,这段注释都必须先改成事实。 关联:#4686、#4910、#4936、#4938、ADR-0049、ADR-0076、Prime Directive #10。
Activity
xuyushun441-sys commentedon Aug 4, 2026
分诊更新(2026-08-04):维护者已裁 —— 无条件退役,与 #4936 的「响亮拒绝」同批执行(裁决全文见 #4936)。两套端点声明形状收敛为一套;本形状只在 examples 装配过,零业务损失。不单独派发。
Generated by Claude Code
os-zhuang commentedon Aug 4, 2026
🔒 认领(随 #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
os-zhuang commentedon Aug 4, 2026
✅ 验收通过,随 PR #5065 与 #4936 同批落地(退役件:
registry.zod.ts全家 12 def / 67 authorable key、coreApiRegistry家族、honouseApiRegistry死选项;ConflictResolutionStrategy因跨仓 ratchet 保留移入api/router.zod.ts)。验收全文见 #4936。Generated by Claude Code
feat(spec,core,runtime)!: 声明式 `apis:` 响亮拒绝 + ApiRegistry 整面退役 (object…
test(spec): kernel test titles state each cited decision in words ins…
test(spec): the second api/ file group's test titles state each cited…