feat(spec): ProvisionEnvironmentResponse 增加可选 hostnameAssignment —— 自动改名的响亮回执 (#5185) - #6068
Merged
Merged
Conversation
按 cloud#1070 方案 C(维护者已批)在 ProvisionEnvironmentResponseSchema 上声明
可选的 hostnameAssignment { requestedHostname, assignedHostname }:控制面在
hostname 撞车时自动改名,该字段让改名"响亮"——仅在真的发生改名时填充。
声明在 spec 而非控制面本地 extend:未声明的兄弟键会被 z.object 剥离(靠蒸发
合规);塞 metadata 袋则在 caller-wins 先例下可被调用者压制或伪造;且 AI 生成
的 provisioning 客户端按 api-surface.json 生成,字段不进 spec 表面就永远读不到。
生成物按 os-regen 纪律整体重生成(authorable-surface / references 文档 /
strictness 计数),外加契约测试与 changeset。
Refs #5185, cloud#1070
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…vision-hostname-assignment # Conflicts: # packages/spec/authorable-surface.json
#5837(PR #6069)把三个单体生成物按 category / entrypoint 拆成分片目录。 本分支原先是对着单体布局生成的,merge origin/main 时 authorable-surface.json 取 main 侧(接受删除,不手工恢复),再整体重生成让本单的 schema 变更落到 分片布局里:packages/spec/authorable-surface/cloud.json 新增一行 `cloud/ProvisionEnvironmentResponse:hostnameAssignment`。 分片的 locality 在这里得到实测:14 个 authorable 分片只动了 cloud.json 一个, api-surface/ 与 json-schema.manifest/ 零改动(本单不新增导出符号)。 check:generated 10 门全绿。 Refs #5185, #5837 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
qq9340100
marked this pull request as ready for review
August 7, 2026 01:01
This was referenced Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5185
cloud#1070 响亮改名裁定(方案 C,维护者已批)的契约半边。cloud 侧实现被本单阻塞,合并后走
bump-objectstack.sh拾取 —— 本 PR ⛔ 不碰 cloud、不碰其它 schema。问题
环境的 canonical hostname 是 UNIQUE 的。provision 时若请求的 hostname 撞车,控制面不会让整个调用失败,而是追加一小段后缀自动改名。改名以前只体现在返回的
environment.hostname上 —— 调用方除非自己把请求的 hostname 存下来再逐字符比对,否则无从知道自己拿到的并不是自己要的那个。改了什么
packages/spec/src/cloud/environment.zod.ts的ProvisionEnvironmentResponseSchema新增可选字段:.describe()把语义写死为 「仅在真的发生了自动改名时才填充」:没撞车、原样分配的调用完全不带这个键,因此hostnameAssignment !== undefined本身就是信号。⛔ 缺席不等于「未知」—— describe 里对这条做了显式否定,免得下游把它当三态读。为什么必须 declare 在 spec,而不是控制面本地 extend
三条理由都写进了字段上方的 TSDoc,便于后来者原地读到:
z.object出站即剥离 —— 回执靠蒸发「合规」。本 PR 用一条测试把这个事实钉住了(见下)。metadata袋:在 caller-wins 先例下,调用方可以压制、也可以伪造这个由服务端发出的信任信号。api-surface.json)生成 —— 字段不进 spec 表面,生成出来的客户端永远不会去读它。兼容性
纯增量的可选字段。既有的 provisioning 响应(不带该键的)照旧合法,无需改动任何调用方;
ProvisionOrganizationResponse.defaultEnvironment因嵌套本 schema 自动继承(生成文档里的…省略号即是)。changeset:@objectstack/specminor。测试
packages/spec/src/cloud/environment.test.ts新增 7 条契约测试 —— 该 schema 此前零测试覆盖:hostnameAssignment解析通过undefinedhostnameAssignment解析通过assignedHostname/ 缺requestedHostname各一条assignedHostname传数字hostnameAssignment传字符串renamedHostname被剥离本 PR 未引入任何 fake engine,故无
assertEngineDeleteDispatch落点。生成物
按 os-regen 纪律:先
build(内含gen:schema+gen:openapi),再check:generated让它自己报哪些 stale,只--fix它证明为 stale 的那 2 项 —— 不整套重刷。packages/spec/authorable-surface.json:+1 行cloud/ProvisionEnvironmentResponse:hostnameAssignmentcontent/docs/references/cloud/environment.mdx:新字段行 +defaultEnvironment的嵌套省略号docs/audits/2026-07-unknown-key-strictness-ledger.counts.md:cloud/82 → 83(新增的那一个z.object(站点;cloud/属未三诊目录,只计站点数,不含 strict/strip 判定)check:api-surface绿 —— 本 PR 不新增导出符号packages/spec/json-schema/(含openapi.json)被.gitignore排除,故补跑gen:openapi无提交物🤖 Generated with Claude Code
https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
Generated by Claude Code