Skip to content

docs(adr-0121): 声明式端点的路由归属与通道分工 —— 命名空间制 + actions/apis 按调用方分工 + type: flow 保留 (#5060) - #5064

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-5060-adr-endpoint-routing
Aug 4, 2026
Merged

docs(adr-0121): 声明式端点的路由归属与通道分工 —— 命名空间制 + actions/apis 按调用方分工 + type: flow 保留 (#5060)#5064
os-zhuang merged 1 commit into
mainfrom
claude/issue-5060-adr-endpoint-routing

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #5060

维护者 2026-08-04 三项裁决的持久记录落档。docs-only —— 不改任何代码、schema 或生成物;执行体由 #5040 的 E 系列(E7 翻转 PR 落 publish 门)实施。

编号:0121,不是预计的 0120

按验收要求以 origin/main + 开放 PR 双查:origin/maindocs/adr/ 最大编号是 0119,但开放 PR #5054 已占用 0120docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md#4986/#5030)。故取下一空位 0121。0121 在 origin/main 与全部开放 PR 的改动文件中均未出现。

落档内容

# 决定 一句话
D1 端点只能认领本应用的命名空间 路径收紧为 运行前缀 + /apps/命名空间/子路径,publish 期强制
D2 命名空间段派生,不是作者自由字段 派生自 stack 身份(manifest.namespace),作者只自由命名子路径
D3 通道按调用方在哪分工 调用方在平台内 → actions;调用方在平台外 → apis
D4 type: flow 保留在 ApiEndpoint 「URL 触发 flow」是入站集成第一原语,摘除即逆北极星
D5 同管线红线 flow 端点纯委派 automation 服务,与 action 触发零语义分叉
D6 匿名端点必须自带限流 authRequired: false 未声明 rateLimit → publish 拒绝并附处方
D7 范围与非目标 不写实现细节;签名验证明示为将来词表候选,不预支

起草时实核过的事实(全部以 origin/main @ 94f7b6a 为准)

起草要求「命名派生源要点名,不能含糊」,以下四条是 D1/D2 的地基,逐条核过:

  1. apps 段确实可切:domain registry 的前缀集(/health /ready /data /meta /actions /mcp /ai /auth /analytics /i18n /notifications /security /keys /ui /share-links /packages /automation,见 packages/runtime/src/domains/*.tshttp-dispatcher.ts)与 LEGACY_CHAIN_PREFIXESpackages/runtime/src/route-ledger.ts)中均无 /apps,切出即生效。
  2. 声明单位是 stack,不是 appapis:ObjectStackDefinitionSchema 顶层键;App.apis 已于 spec 17.0.0 退役并留墓碑(packages/spec/src/ui/app.zod.ts"Declarative endpoints belong to the stack (defineStack({ apis })), not the app shell.")。所以身份键取 stack 身份,AppSchema.name 这一读法在结构上不成立。
  3. 规范身份键是 manifest.namespacepackages/spec/src/kernel/manifest.zod.ts)—— stack 上唯一同时满足「URL 安全(^[a-z][a-z0-9_]{1,19}$)/带实例内唯一性契约/已作为每个对象名前缀被强制执行(validateObjectNamespacePrefixpackages/spec/src/kernel/namespace-prefix.ts,两处执行点)」的键。manifest.id 虽必填但是反向域名且 schema 上零字符集约束,不 URL 安全;同文件既有的 deriveNamespaceFromPackageId 说明「id → namespace」本就是既有规范化方向。
  4. 今天的 path 确实无归属约束packages/spec/src/api/endpoint.zod.ts 上只有 z.string().regex(/^\//)

与既有 ADR 的关系(已逐份 grep 核对,无冲突)

副作用:#5040 设计文档的两处收窄

D1 生效后,#5040 设计 §1 的保留前缀 pin 清单 + spec/runtime 双端一致性测试整体作废(E1/E3 面缩小),§7-8「部署前缀与声明脱钩」大幅收窄。ADR 正文把「需要一个测试来防止腐坏的机制,本身就是腐坏的机制」写成了否决 O1 的理由。

Alternatives Considered(按要求收录,各自两轴分析)

Changeset

按仓内近期 ADR PR 惯例实核后随带 .changeset/adr-0121-endpoint-routing-namespace.md:docs-only 的 ADR 变更在本仓的先例(adr-0078-status-calibrationadr-0044-revise-service-owned-noteadr-0104-attestation-adr-note 等)一律是空 frontmatter--- / ---)+ 正文散文 + 结尾「Documentation only; releases nothing.」,本 PR 照此形制。

验收自检

顺带记录的域外发现

🤖 Generated with Claude Code

https://claude.ai/code/session_01EYGdmvWP1ieZSLqvAW6uyd


Generated by Claude Code

…ype: flow` 保留 (#5060)

维护者 2026-08-04 三项裁决的持久记录。docs-only:不改任何代码或 schema,
执行体由 #5040 的 E 系列(E7 翻转 PR 落 publish 门)实施。

D1/D2 命名空间制:`ApiEndpointSchema.path` 今天只约束首字符为斜杠,应用元数据
因此可以合法认领 `/api/v1/data/…` 或与另一个已安装包互撞。路径收紧为
`<运行前缀>/apps/<命名空间>/<子路径>`——`apps` 是平台保留的唯一切出段(已实核:
domain registry 前缀集与 LEGACY_CHAIN_PREFIXES 中均无 `/apps`),命名空间段派生自
`manifest.namespace`(stack 上唯一同时 URL 安全、带实例内唯一性契约、且已作为每个
对象名前缀被强制的身份键;`App.apis` 已于 spec 17.0.0 退役并留墓碑,声明单位是
stack 不是 app)。撞内建域与跨应用互撞由此在构造上消失,#5040 设计 §1 的保留前缀
pin 清单与 spec/runtime 双端一致性测试整体作废。

D3 通道分工:调用方在平台内(会话、平台方言:UI 按钮、AI/MCP、SDK)→ actions;
调用方在平台外(第三方 webhook、合作方系统)→ apis。判据的维度是调用方在哪,
不是「做什么」——后者会退化成口味之争。

D4-D6 `type: flow` 保留,配三条纪律:判据入两侧 describe(spec 车道执行项)、
同管线红线(flow 端点纯委派 automation 服务,选错通道只是风格问题不是行为问题)、
匿名端点防呆门(`authRequired: false` 必须伴随 `rateLimit`)。签名验证明示为将来
词表候选,不预支。

替代方案按两轴收录 O1(自由路径 + 保留前缀门)与 O3(actions 全面替代 /
Dataverse 模式)及否决理由。

编号取 0121:0120 已被开放 PR #5054 占用(origin/main + 开放 PR 双查)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYGdmvWP1ieZSLqvAW6uyd
@vercel

vercel Bot commented Aug 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 4, 2026 1:34am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/m labels Aug 4, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 4, 2026 01:37
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 4, 2026
Merged via the queue into main with commit a1a855a Aug 4, 2026
19 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-5060-adr-endpoint-routing branch August 4, 2026 01:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ADR] 声明式端点路由归属与通道分工:命名空间制 + actions/apis 按调用方分工 + type: flow 保留(起草,预计编号 0120)

2 participants