chore(release): 发版状态对账 —— main 版本对齐 2026-08-03 已发布的 17.0.0-rc.3 - #6149
Conversation
…c.3 publish (#6135) The 2026-08-03T16:42Z release published 17.0.0-rc.3 to npm and pushed 69 package tags atomically, but the "chore: version packages (rc)" commit (c6a52d3) never landed on main. main therefore still declared rc.2, so `changeset version` recomputed the already-published rc.3 — merging the version PR would have skipped every package at publish time while marking this cycle's changesets as released. Aligns the `version` field of the 68 tagged packages still present in the workspace to 17.0.0-rc.3, so the next `changeset version` computes rc.4. Version fields only: no .changeset/* file is touched (they are rc.4's input), no workspace:* dependency is altered, and the lockfile is unchanged. Fixes #6135 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JwwiU9bjhwy2SWj13ho8uv
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 68 package(s): 143 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
Fixes #6135
发版状态对账:把 main 各
package.json的version字段对齐到 2026-08-03 实际发布的状态,让 changesets 下一次计算出 rc.4 而不是已被 npm 占用的 rc.3。一、问题复现(先证伪再动手)
issue 的前提成立,并且在本 PR 里被直接跑出来了。发布提交找到了:
即「version packages」提交确实发布了、打了 tag,但从未进入 main 的祖先链。
二、事实源 = 08-03 原子推送的 tag 集
git ls-remote --tags origin全量 14391 行,去重(每 tag 有普通与^{}peeled 两行)后 7196 个 tag。筛选结果:-rc.3结尾的 tag 共 69 个,全部指向同一个提交c6a52d3a4,且全部是17.0.0-rc.3;17.0.0版本族的 rc.3 tag:0 个;example-*/dogfood/showcase相关 tag:0 个(私有包 changesets 从不打 tag)。额外交叉验证:把
c6a52d3a4整棵树取下来逐个读package.json,69 个 tag 的版本号与该提交里对应包的version字段逐一相等,零例外。tag 集是该提交在「可发布包」上的投影,两个独立事实源互证。三、npm 交叉验证(10 个公共包,超出要求的 6 个)
npm view pkg@17.0.0-rc.3 versiondist-tags.rc10/10 一致,无一例外。目标版本 rc.4 确认未被占用:
@objectstack/spec|cli|core@17.0.0-rc.4均为E404。四、改了什么
68 个包的
package.jsonversion字段:17.0.0-rc.2→17.0.0-rc.3。仅此一处。69 个 tag 对应 68 个改动,差额来自
objectstack-vscode(见下)。改法是逐文件正则替换后做 JSON 往返比对(
json.loads两侧弹出version后断言剩余对象完全相等),从结构上保证除 version 外无任何字段变动;connector-openapi用的是 4 空格缩进,缩进原样保留。五、未对账的包(workspace 内存在但不在 tag 集中)—— 一律不动
rcdist-tag,即它从未参与 17 系列 rc 发布。写成 rc.3 等于宣称一次不存在的发布反向的一个:
objectstack-vscode@17.0.0-rc.3有 tag 但 workspace 里已无该包 ——packages/vscode-objectstack/在 08-03 之后被删除,故无处可写。这就是 69 个 tag 对应 68 个改动的差额。六、rc.4 干跑证明(在一次性临时副本中执行,用后即删)
两个副本各含完全相同的 1260 个
.changeset/*.md,唯一差别是version字段:BEFORE(未对账的 origin/main,rc.2)
AFTER(本 PR 对账后,rc.3)
逐包核对:68 个改动包全部计算为
17.0.0-rc.4,零例外(tagged pkgs NOT computing to 17.0.0-rc.4: NONE)。driver-turso虽然停留在 rc.2 未动,但它在.changeset/config.json的fixed组内,干跑显示它被 fixed 组统一扫到 17.0.0-rc.4 —— 即「不动它」不会在 fixed 组里留下版本裂缝。一处与验收表述不符,如实报告
验收项写的是「示例包同族递增」。实测并非如此,而且不应如此:示例/私有包不在 fixed 组内,干跑结果是
4.0.92-rc.2 → 4.0.92-rc.3(仍是 rc.3 档),不会进入 rc.4 档。原因是本 PR 按 tag 集口径只对账了公共包。这不影响本 issue 要修的故障:私有包不发 npm,不存在版本号被占用、
changeset publish跳过的问题。留作维护者决定的一个可选项见下。七、验收结果
git diff --name-only全是 package.json"17.0.0-rc.2",新增侧唯一值"17.0.0-rc.3".changeset/零变更git status --porcelain .changeset/→ 0 行workspace:*依赖未动workspace:的增删行 0pnpm install后git status --porcelain pnpm-lock.yaml→ 0 行(内部依赖全为workspace:*,版本号变动不入锁)node scripts/check-nul-bytes.mjsOK (scanned 5875 tracked text file(s); ... no raw ASCII control bytes)pnpm --workspace-concurrency=2 --filter '@objectstack/cli...' build→ exit 0(cli 及其全部依赖)额外跑的发布相关门禁,全部 PASS:
check:prerelease-pins、check:empty-changeset、check:published-files、check:override-consistency、check:node-version。根
version脚本链上的两个同步脚本确认为 no-op(两者都只取 major,17 未变):八、关于 changeset 与标签
本 PR 是发版状态对账,不是用户可见变更,正确形态就是不带 changeset(而且
.changeset/**是 rc.4 的原料,一个字节都不能动),故挂skip-changeset标签。九、待维护者确认(不阻塞本 PR)
上表第五节的 7 个私有 rc 系包(dogfood / downstream-contract / example-crm / example-todo / example-showcase / example-embed-objectql / http-conformance)在 08-03 的发布提交里同样被 rc.2 → rc.3 提升过,但因私有而无 tag、无 npm 痕迹。本 PR 按派发口径(事实源 = tag 集)未动它们,代价是它们的版本号会永久比公共包低一档。
若希望 workspace 与 08-03 发布提交完全一致,可在本 PR 追加这 7 个包的同样一行改动(纯记账,无功能影响);若认为「未发布就不该记账」,则维持现状即可。请维护者择一。
Generated by Claude Code