Repository navigation
chore(release): exit Changesets pre mode (next), so the next version pass renders objectui's 18.0.0 GA - #13111
Draft
objectstack-fleet[bot] wants to merge 2 commits into
Draft
objectstack-fleet[bot] wants to merge 2 commits into
objectstack-fleet[bot] wants to merge 2 commits into
Conversation
…nders 18.0.0 `.changeset/pre.json` as `pnpm changeset pre exit` (`@changesets/cli` 3.0.1) wrote it: `mode` goes from `pre` to `exit`, `tag` stays `next`, same 2-space JSON with a trailing newline. No `changeset version` output is committed. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…, so the 18.0.0 render validates `sync-quick-reference-release.test.ts` asserted the bumped doc does not contain the old version as a raw substring. With the fixed group at `18.0.0` that string is a prefix of the Spec and Client rows' `^18.0.0-next.1`, so the release lane's `pnpm test scripts/__tests__` went red on a correct rewrite of the GA render. The assertion now reads the doc's version literals with the shared `VERSION_LITERAL` and `normalize`, the tokens the gate compares, and still fails when the Version row keeps its old literal. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
维护者速读改了什么:只改两个文件。
为什么改:你下的指令「objectui 退出预发布模式」。objectui 现在的发版 PR #11600 渲染的是 实测(开发在临时副本里原样重放了发版工作流的 Render / Validate / Restore):
风险与代价(含回滚):
席位意见:建议在 objectstack 18.0.0 发布之前或同时合入本 PR,然后刷新 #11600,确认渲染出 18.0.0,再按顺序先发 objectstack、后发 objectui。 你要做的:
席位核对ACCEPT · objectui
⛔ Not readied or queued by this seat: the maintainer merges it. Generated by Claude Code |
This branch has not been deployed
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 #13108
Clause-②: no
Exits Changesets pre mode on
main, on the maintainer's order 「objectui 退出预发布模式」. After this lands, the next version pass renders the GA: the 40-memberfixedgroup goes from17.7.0to18.0.0, not18.0.0-next.0. Draft, for the maintainer to merge, because the merge sets when the version PR renders the GA.⛔ No release act. No
changeset versionoutput is committed. Nothing was published or tagged, no workflow was dispatched, and neither release PR #11600 norchangeset-release/mainwas touched. The dry-run below ran in a scratch clone whose push URL is an invalid path.Head
9e3c1a1408= basedf943a2a1a(origin/mainat worktree creation, and stillorigin/mainwhen this opened) plus two commits.The change
.changeset/pre.json, written bypnpm changeset pre exit(@changesets/cli3.0.1) and committed as the tool wrote it (fda18fcdf9):{ "mode": "pre", "tag": "next" }{ "mode": "exit", "tag": "next" }Same 2-space JSON with a trailing newline. Under CLI 3 the file holds only
modeandtag, before and after; nothing else is expected or written.One test assertion in
scripts/__tests__/sync-quick-reference-release.test.ts(9e3c1a1408). The first dry-run of the release lane on the exited tree went red on exactly one test, and the control ondf943a2a1ais green, so the exit is what reddens it:The test "rewrites the Version row when the fixed group moves" bumps the group to
99.9.9and asserted that the doc no longer contains the old version as a raw substring.With the group at
18.0.0, that string is a prefix of the Spec and Client rows'^18.0.0-next.1. So a correct rewrite failed.The assertion now reads the doc's version literals with the script's own
VERSION_LITERALandnormalize, the tokens the gate (quick-reference-current-release-4143.test.ts) compares, and checks that none is the old version. That gate's header already states the rule: "Equality on extracted tokens, nevertoContainover the raw row".It keeps its teeth. A probe of the script's own exports over
QUICK_REFERENCE.md, at group versions17.7.0,18.0.0and18.0.0-next.0:17.7.018.0.018.0.0-next.0Why here and not in prose. The card expected the red, if any, to be release text that states a prerelease status, as on objectstack. objectui has none: it has no release pages, and a grep of the docs,
READMEs andQUICK_REFERENCE.mdfinds no sentence that states objectui's own prerelease or "no GA" status. The only red is this test, which the GA render makes false. It is not a gate: no gate's scope or verdict changes, and it adds no check.Dry-run of the version step (scratch clone, never pushed)
Setup:
--filter=blob:none, full history,--is-shallow-repositoryfalse, 12164 commits), so@changesets/gitresolves every changeset's add-commit without the shallow-clone deepen loop.pnpm run setup: the pin build copied from the machine store, then a frozen install.node_modulesis a real directory, not a symlink.Render the post-version tree,Validate the post-version treeandRestore the pre-version treewere extracted verbatim from.github/workflows/changeset-release.ymlwith a YAML parser. The workflow blob is533cf01fe5in the clone and onmain, and the extracted bodies are byte-identical across the three legs. They ran underbash --noprofile --norc -eo pipefailwithGITHUB_OUTPUT,GITHUB_STEP_SUMMARYandGITHUB_SHApointed at scratch files, each heavy step underos-verify-lock.sh.Build packagesstep was not replayed; see NOT MEASURED.9e3c1a1408Version: 17.7.0 → 18.0.0Test Files 190 passed, 2 skipped (192)fda18fcdf9(exit only)17.7.0 → 18.0.01 failed, 189 passed, 2 skipped, the one test abovedf943a2a1a(stillmode: "pre")17.7.0 → 18.0.0-next.0190 passed, 2 skippedReadings on the head's post-version tree:
18.0.0. One of them,object-ui, is private, so 39 are publishable. This was read from the manifests.changeset publish-planwas not run..changeset/*.mdexceptREADME.md(pending_before=857)..changeset/afterwards holds onlyREADME.mdandconfig.json..changeset/pre.jsonis deleted by the pass. On the base leg it survives asmode: "pre"and the 857 move to.changeset/pre/.pre.json), 40package.jsonfiles whose only changed line is"version", 40CHANGELOG.mdfiles that each gain a## 18.0.0section, andQUICK_REFERENCE.md, whose Version row now reads18.0.0.@objectstack/*lines change in the 40package.jsondiffs.check-changeset-no-majorexits 0 ("No changeset declares amajorbump.") andcheck-changeset-fixedexits 0.latest.getReleaseTag(@changesets/cli3.0.1,getPublishPlan.mjs) returnspreState.tagonly while a pre state exists, and the pass deletespre.json. This is a reading of the code; nothing was published.PR #12401's two gate edits, judged on the exited tree
scripts/check-changeset-no-major.mjs: the computed admission of the one synchronizedmajor(group's current major + 1 = the@objectstack/specrange's major), withOBJECTUI_ALLOW_MAJORretiredpre.jsonand no mode. Its only pre-mode clause is that it does not read.changeset/pre/, and that was its behaviour before PR #12401 too (that PR's body says so).pnpm changeset:checkstill admits the sync major and exits 0. On the 18.0.0 tree, a probe"@object-ui/core": majorgives exit 1, "carries the group from 18 to 19, but its @objectstack/spec range names 18". So it re-arms, and refuses every othermajor.scripts/check-spec-range-floors.mjs: reads a prerelease lower bound (^18.0.0-next.N) as a floorpre.json, and no mode. The ranges are objectstack's prerelease line, which@objectstack/*18 sets (its header says so). objectui's own mode does not set them.@objectstacklines in the version diff). At publish,objectstack-floor.mjsraises the ranges to the computed floor, and that floor is itself a prerelease whenever the earliest published spec release that contains the pin is one. Its pins,check-spec-range-floors.test.ts, pass on the exited tree and inside the post-versionscripts/__tests__run. The live gate was not run here (NOT MEASURED below).Neither edit is reversed. No gate is weakened or added.
The dispatch's mechanism hypotheses, measured
18.0.0and consumes every pending changeset: 857. The card's 860 counts every entry under.changeset/, includingREADME.md,config.jsonandpre.json.pre.jsonitself is deleted by the pass.18.0.0into the Version row, and nothing in objectui's docs states objectui's own prerelease status. The Spec and Client rows keep^18.0.0-next.1because those rows are the declared@objectstack/*ranges, derived from the manifests, and that is correct. They move when a range moves, not when objectui exits pre mode.Order note (for the maintainer; not a code change)
pnpm changeset:publishrunsobjectstack-floor.mjs, thencheck-published-dist-tooling.mjs, thencheck-spec-range-floors.mjs, thenchangeset publish.node scripts/objectstack-floor.mjs --dry-runat the pinf4755a68a7exits 2: "No published @objectstack/spec release contains the pin … the newest published release is 18.0.0-next.5. Nothing is published until objectstack releases a commit that contains the pin." Exit 2 is by design, and it writes nothing.merge-base --is-ancestorwith the pin and the@objectstack/spec@18.0.0-next.5tag commit820fd5aef0gives exit 1. The control leg, with the18.0.0-next.3tag commit2c9bf9430a, which is older than the pin, gives exit 0. The pin (2026-10-19 10:57Z) comes after thenext.5version commit (08:58Z the same day).latesttag. The floor is the earliest published version, by semver precedence, whose tag contains the pin, and the floor gate fetches that exact version.18.0.0, and objectui's published ranges become^18.0.0.18.0.0-next.6that contains the pin were published first, the floor would be that prerelease, even after 18.0.0 GA. objectui 18.0.0 would then ship^18.0.0-next.6ranges. Those resolve to 18.0.0 once it exists, but they name a prerelease floor.18.0.0, and merge it. If the objectui version PR is merged first, its publish lane goes red at the floor step, and nothing is published.@object-ui/core@17.7.0is (dist-tags.latest=17.7.0).Changeset and labels
No changeset.
node scripts/check-changeset-presence.mjs: "No source or published contract of a released package changed in this range, so no changeset is owed." This matches objectui's precedent for tooling-only PRs. No label is written; objectui's path labels come fromlabeler.yml.Gates (local, at
9e3c1a1408, exit codes captured before any pipe)pnpm changeset:check0 (both halves; the no-major half prints "Everymajoris the synchronized one").pnpm check:changeset-claims0,pnpm check:pending-changeset-literals0.node scripts/check-changeset-presence.mjs0,node scripts/check-changeset-overwrite.mjs0.pnpm check:new-line-citations0 (0 new),pnpm check:control-bytes0,pnpm check:test-path-roots0,pnpm check:pre-install-import-graph0,pnpm quick-reference:check0.node scripts/check-governed-queue-guard.mjs --teston both paths: "NOT GOVERNED".pnpm run type-check:scripts0.tsc --listFilesOnlylists the changed test file.eslinton the changed test file: 0.pnpm exec vitest runonsync-quick-reference-release,quick-reference-current-release-4143,check-changeset-no-major,check-spec-range-floors,check-changeset-presenceanddoc-version-claims: 6 files, 169 tests passed.scripts/__tests__directory ran green on the post-version tree inside Validate (table above).Build packagesstep before Validate, because Validate's three commands read sources, manifests and docs, and all three are green without it;pnpm check:spec-floors, because it needs a build of the floored packages and its input ranges are byte-identical across the exit and the render;changesets/actionitself, which is a GitHub Action;pnpm test, which is CI's.Acceptance notes
18.0.0-next.0from a pre-mode tree. After this merges, dispatch therefresh_version_prrun (or wait for the six-hourly one), which re-renders it at18.0.0. If the stale render were merged after this PR instead, it would version18.0.0-next.0withpre.jsonatmode: "exit". Under CLI 3 that tree still publishes to thenexttag, and the next pass renders the GA. That is a reading of the code, not a measurement, and the floor step would refuse its publish today anyway.CHANGELOG.mdfiles gain 22,251 lines in total, measured on the head's render..changeset/pre.json, PR release(v18): objectui's first 18.x release — the sync major, Changesets pre mode on next, and the two gate edits (objectui#12334) #12401's pre-mode gate edits and release prose. The test assertion in item 2 is outside it. It is here because it is the only thing the GA render reddens, and the dispatch allows a change at the real producer when it is named here.Wanted, mapped
pre.jsonwritten bypnpm changeset pre exit, in the repo's shape: done (The change, item 1).18.0.0, and every gate of the version step and its validation stays green, each named: done. Render, Validate (quick-reference check, control bytes,scripts/__tests__) and Restore all exit 0 on the head, and the base control renders18.0.0-next.0.维护者速读(草稿)
改了什么:objectui 退出 Changesets 预发布模式。
.changeset/pre.json由pnpm changeset pre exit写出,模式从pre改为exit。另外改了一条工具测试的断言,原来它按子串比较版本号,在 18.0.0 下会误报。没有改任何门禁、工作流或发布包源码,也没有 changeset。为什么改:执行您的指令「objectui 退出预发布模式」。在临时克隆里原样重放了发版工作流的版本步骤。退出后,下一次版本 PR 会把 40 个固定组包从
17.7.0定为18.0.0,不再是18.0.0-next.0,并消费全部 857 条 changeset。只退出模式时,校验步骤有一条测试变红:QUICK_REFERENCE 里 Spec 行写着^18.0.0-next.1,包含子串18.0.0。断言改成按完整版本号比较后,渲染、校验、还原三步全部为 0。对照的 base 仍渲染18.0.0-next.0。风险与代价(含回滚):
.objectstack-sha计算@objectstack下限。今天它退出 2,原因是 npm 上还没有任何一个 objectstack 版本包含这个 pin(最新是18.0.0-next.5)。所以 objectstack 18.0.0 必须先发布,objectui 18.0.0 才发得出去。顺序反了,发布这一步会变红,但什么都不会发出去。18.0.0-next.0,不要直接合并它。本 PR 合并后先刷新一次。mode: "pre"即可。GA 发布到 npm 之后无法回滚。席位意见:
你要做的:
18.0.0,再合并版本 PR。Generated by Claude Code