fix(spec)!: 退役处方指向 protocol 17 —— 这趟车真正会发的 major (#4350) - #4359
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
…this train actually ships (#4350) Ten tombstones told authors a key "was removed in `@objectstack/spec` 18", and the machine agreed: a whole `step18` chain step plus two `toMajor: 18` conversions were wired for a major the release train cannot reach. 17 is what ships. `latest` is 16.1.0, `rc` is 17.0.0-rc.0 (17.0.0 never published), and `.changeset/pre.json` records spec at initialVersion 16.1.0 — changesets computes a pre-mode bump from the last *published* version, so 16.1.0 + major = 17.0.0. `changeset status` confirms 17.0.0-rc.0 -> 17.0.0-rc.1. `PROTOCOL_VERSION` is '17.0.0' and `protocol-version.test.ts` pins it to the package major, so it cannot unilaterally become 18 either. The "18" came from counting up from the in-flight rc instead of from 16.1.0. The prose was the smaller half. `composeMigrationChain(from, to = PROTOCOL_MAJOR)` filters `m <= toMajor`, so a step keyed 18 was unreachable: `os migrate meta --from 16` walked 11-17 and stepped over it. The same ceiling applies to `composeSpecChanges`, so the committed `spec-changes.json` carried none of these seven retirements — `query.joins`, `windowFunctions` and `validateOnly` appeared zero times, and the upgrade guide contained no "18" at all. Authors would have hit a tombstone with no chain hop to run and no guide row to read. - Fold `step18` into `step17` (rationale, both `conversionIds`, all six semantic migrations); drop `MIGRATIONS_BY_MAJOR[18]`; retarget both conversions to `toMajor: 17` (`migrations.test.ts` requires conversion major == step major) and merge `CONVERSIONS_BY_MAJOR[18]` into `[17]`. - Retarget all 30 hand-written "18" references: the ten prescriptions, the `query.test.ts` regex that pinned the wrong number, internal comments, the liveness ledger + README, and the seven unconsumed changesets. - Regenerate `spec-changes.json` (+108), `protocol-upgrade-guide.md` (+32) and the five reference pages. - Write the seven retirements into the v17 release notes and upgrade checklist, where they had no entry at all — there is no v18.mdx for them to land in. No behaviour is added or withdrawn: every key retired by #3963, #4052, #4158, prescription names the version that will carry it, and `os migrate meta` applies the two stack conversions instead of stepping over them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
xuyushun441-sys
force-pushed
the
claude/tombstone-version-mismatch-6d43c7
branch
from
July 31, 2026 09:02
89747f0 to
2d52025
Compare
Contributor
📓 Docs Drift CheckThis PR changes 4 package(s): 111 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
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.
Closes #4350
十处墓碑告诉作者某个键 "was removed in
@objectstack/spec18"。issue 的判断属实,而且机器也写着 18,并且是承重的:一整个step18chain step 加两个toMajor: 18conversion,被接在了这趟发布列车到不了的 major 上。为什么是 17
latest= 16.1.0,rc= 17.0.0-rc.0 —— 17.0.0 从未发布.changeset/pre.json@objectstack/specinitialVersions = 16.1.0changeset status@objectstack/spec 17.0.0-rc.0 -> 17.0.0-rc.1PROTOCOL_VERSION'17.0.0',且protocol-version.test.ts把它钉在 package major 上"18" 是从在研的
17.0.0-rc.0往上数了一位,而 changesets 是从 16.1.0 往上算的。文案只是小的那一半
composeMigrationChain(from, to = PROTOCOL_MAJOR)按m <= toMajor过滤,所以 key 为 18 的 step 走不到:os migrate meta --from 16走完 11–17 就跨过去了。同一个天花板卡住composeSpecChanges,于是已提交的spec-changes.json里这七项退役一条都没有——query.joins/windowFunctions/validateOnly出现 0 次,docs/protocol-upgrade-guide.md里连一个 "18" 都没有。也就是说:作者会撞上墓碑,却既没有 chain hop 可跑,也没有升级指南可查。只改文案会让处方说"17 移除"、机器却仍归档在 18 并继续丢弃。
改动
step18折进step17—— rationale、两个conversionIds、六条 semantic migration 全部迁移;删掉MIGRATIONS_BY_MAJOR[18];两个 conversion 改toMajor: 17(migrations.test.ts要求 conversion major 等于 step major),CONVERSIONS_BY_MAJOR[18]并入[17]。query.test.ts正则、内部注释、liveness ledger + README、七份未消费的 changeset。spec-changes.json(+108)、protocol-upgrade-guide.md(+32)、五个参考文档页(12 行,全部只含版本号)。packages/spec/json-schema/是 gitignore 的构建产物。没有任何行为被增删:#3963 / #4052 / #4158 / #4196 / #4286 退役的每个键仍按原条款退役。变的是处方名字对了,且
os migrate meta真的会执行那两个 stack conversion。验证
check:api-surface/check:liveness/check:spec-changes/check:upgrade-guide)@objectstack/spec测试:278 文件 / 7156 用例全绿check:i18nPASSRelated
wait表单仍提供已退役的waitEventConfig.timeoutMs/.onTimeout—— 下一次 spec rc 刷新会被对账测试点名 objectui#3101 —— 下游照着错文案排期的实例waitEventConfig.timeoutMs/.onTimeout—waitnever had a timeout (#4158) #4198 / [P3] data:FieldNode's nested-select object form is declared but nothing produces or consumes it — enforce or remove #4196 / [P2] data:QueryASTdeclares 12 members no executor runs — the liveness ledger governs metadata types, not the request surface #4286 / 把 public 从"全局开关的副产品"升级为声明式能力,然后删掉 api.requireAuth 开关 #3963 /wait声明了超时契约但完全没有实现:onTimeout零读取者,timeoutMs被当成定时时长用 —— showcase 自己在依赖它 #4158 / BatchOptions.validateOnly 声明了 dry-run 但从不实现 —— "预演"会真实落库(PD #10) #4052 —— 引入这些墓碑的 PR🤖 Generated with Claude Code