Repository navigation
docs(releases): state 18.0.0 as the v18 GA release, so the GA Version Packages PR renders - #24584
Conversation
…ex and the v18 page The v18 index entry's status becomes "(current series: 18.0.0, released 2026-10-19)", the one shape sync-release-index-currency rewrites, and its "major in prerelease" paragraph moves to the exited state. The v18 page's description, release-status blockquote and the two pre-mode bullets state 18.0.0 as the GA release, which publishes to npm's latest tag. With the pre-mode exit, these two passages were the only refusals of the version-pr Render and Validate steps: sync-release-index-currency and check:release-page-status. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…8-ga-release-prose
…ense "While the line is open, every other breaking change that lands on main ships on it too" stops being true once Changesets leaves pre mode and the no-major guard fails a major bump again, so it is stated as what the line did. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
维护者速读改了什么:只改两页发版文档,
为什么改:这是 GA 的第二步。#24555 已经在 14:44Z 合入, 风险与代价(含回滚):
席位意见:建议今天合入。#24555 已在 main,合入本 PR 后 GA 的前置就齐了。 你要做的:合入本 PR。之后让 Version Packages PR 刷新一次,确认渲染出 席位核对ACCEPT ·
⛔ Not readied or queued by this seat: the maintainer merges it. PR #24555 is already on Generated by Claude Code |
|
Measured instance of what this PR fixes · Release run 39273742219 (
Generated by Claude Code |
Fixes #24569
Clause-②: no
The v18 GA release prose for the two release-owned pages that refuse the GA Version Packages PR. This PR pairs with PR #24555, which exits Changesets pre mode. With both applied, the
version-prlane's Render, Validate and Restore steps all exit 0 and the lockstep group renders18.0.0. Draft, for the maintainer to merge.Merge order: PR #24555 first, this PR second, then one Version Packages refresh.
⛔ Nothing was published or tagged. No release workflow was dispatched. The Version Packages PR (#24524) and
changeset-release/mainwere not touched. The dry-run ran in a scratch clone outside the worktree, and nothing from it was committed or pushed. No gate or rewriter changed.Head
b174b74605isba4afcc239(origin/main, merged in before opening) plus two docs commits. The worktree's base was04669a467e.The change (docs only,
content/docs/releases/only)content/docs/releases/index.mdxThe v18 entry's trailing status is now in the one shape
sync-release-index-currencyrewrites (STATUS_SHAPE):The prose before the status now reads: "its breaking changes landed in stages through the
18.0.0-next.Nprereleases on npm'snexttag, each with its own changeset and migration, and its GA release, 18.0.0, publishes to npm'slatesttag and moves it from 17.x to 18".The paragraph "The v18 line is a major in prerelease. …" (old lines 58-62) is now "The v18 line is a major, and 18.0.0 is its GA release." The pre-mode regime is in the past tense, and the paragraph states the exited state: the 18.0.0 cut publishes to
latest, andcheck-changeset-no-major.mjsagain fails a pull request that declares a major bump. The wording follows PR chore(release): exit Changesets pre mode (next), so the next version pass cuts the 18.0.0 GA #24555's edit ofbackward-compatibility.mdx.content/docs/releases/v18/index.mdxThe
descriptionfront matter is now: "The v18 line and its GA release, 18.0.0, which closes the18.0.0-next.Nprerelease train and publishes to npm'slatesttag. …"The release-status blockquote, in full:
The two pre-mode bullets are rewritten. "Through
nextbeforelatest" (old:27) is now in the past tense and ends with "18.0.0 is the cut that takes the line tolatest". "GA ends the prerelease" (old:62) is now "18.0.0 ends the prerelease. It is the GA cut: it leaves pre mode and publishes the line tolatest." The "Curated notes … are not written yet" sentence is kept verbatim.One more sentence, of the same class and in the same file (second commit
b174b74605): "While the line is open, every other breaking change that lands onmainships on it too" is now in the past tense. That sentence stops being true once the guard fails a major bump again.Every heading and anchor is unchanged. In particular
## How a breaking stage lands on this linestays as it is: its anchor is linked from the release index and five times fromprotocol/backward-compatibility.mdx.Why the text is worded this way
(current series: X.Y.Z, released YYYY-MM-DD)is the only shape the rewriter rewrites, so the 18.1.0 version pass will stamp the next minor without a person. A probe of the rewriter's own functions on this text:rewriteStatusField(field, '18.0.0', …)returnsnull, meaning it leaves a field that already names the newest GA alone, date included.rewriteStatusField(field, '18.1.0', '2026-11-01')returnscurrent series: 18.1.0, released 2026-11-01.releasedAssertionReaccepts. It contains none of the sixPAGE_STALE_SIGNALS. Probed with the gate's own predicates:pageStatusProblems(18)returns[],indexStatusProblems(18)returns[]andindexCurrencyFindings(18, '18.0.0')returns[]. The control on the base text: 1 page problem, the index signalsprerelease-wordandprerelease-version, and 1 currency finding.latest, or that "a plain install now resolves 18.0.0". 18.0.0 is described as the release the page documents and by what it does: it "publishes to npm'slatestdist-tag". That stays true for a reader onmainbetween this merge and the publish, and after the publish. The one dated claim is the index status, discussed next.DATE
released 2026-10-19is the UTC day this PR is opened.indexCurrencyFindingsjudges the version only, andcheck:release-page-status's index matcher judges only the prerelease signals.Proof: the paired dry-run (scratch clone, never pushed)
Setup:
/home/user/objectstackat a short scratch path, with the push URL set to an invalid path.--is-shallow-repositoryfalse). Localmainisba4afcc239.rehearsal2= this PR's headb174b74605merged with PR chore(release): exit Changesets pre mode (next), so the next version pass cuts the 18.0.0 GA #24555's headabec338235, giving merge468a6ad229. That tree differs frommainin exactly the 4 files of the two PRs, and.changeset/pre.jsonreadsmode: "exit".release-rehearsal-clone.mjsreported "✓ FIT".pnpm install --frozen-lockfileran with its scripts this time, since the short path stays under tsx's IPC socket limit.version-prsteps were extracted verbatim fromrelease.ymlwith a YAML parser. The blob47db41eeeais the same in the clone and onmain. They ran underbash -ewithRUNNER_TEMP,GITHUB_OUTPUTandGITHUB_STEP_SUMMARYpointed at scratch files, each underos-verify-lock.sh.pending_before=1029, 1205 paths moved.sync-release-index-currency: "(v16, v17, v18) already names the newest GA release … nothing rewritten".check-skill-compatibility-version --fix: 10 of 10 SKILL.md stamps moved to18.0.0.check:release-page-statusandcheck:release-index-currency-syncamong them. "1205 path(s), all inside the reviewed shape", "major-boundary surfaces left unvalidated: 0".Rendered versions:
@objectstack/specis18.0.0.18.0.0..changeset/pre.jsonwas deleted by the pass.(current series: 18.0.0, released 2026-10-19).The first round on head
3754bbeddb, before commit 2, gave the same three exit codes and the same readings.NOT MEASURED: the read-rehearsal steps (
changesets/action), because that is a GitHub Action.This PR alone on
main(stillmode: "pre")It may sit on
mainbriefly before or after #24555, so every docs gate was run on this branch's own head (b174b74605,.changeset/pre.jsonatmode: "pre"). Exit codes were captured before any pipe.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 47 commands for the two-file diff, and all 47 exit 0. The--ranreconciliation reads "47 derived, 47 run, 0 NOT-MEASURED (a DERIVED zero — all 47 recorded an exit code and none of them is 3)". On the first pass, five families (check:doc-formula-expressions,check:doc-security-posture,check:docs,check:skill-examplesandcheck:docs-transcript-drift) returned a PREREQUISITE refusal (exit 3, or exit 1 "Generate it first"). I built@objectstack/specplus the@objectstack/lint...closure, and the@objectstack/client-react...closure, underos-verify-lock.sh, then re-ran all 47.check:release-index-currency-sync,node scripts/sync-release-index-currency.mjs(wrote nothing; the tree stayed clean),check:docs-image-tag,check:docs-image-tag-sync,check:release-page-status,check-release-section-coverage.mjs --strictandcheck:release-notes. Onmainthe CHANGELOG has no## 18.0.0heading yet, so the v18 entry is not in those gates' GA scope. The text is green there for that reason, and green on the post-version tree as shown above.Changeset and label
There is no changeset, because nothing here publishes. Neither file is reachable from any public package's
files[]: 73 public packages, none of whosefiles[]entries namescontent,docsorreleasesor climbs out of its package. The positive control is that 73 of 73 namedist. Soskip-changesetrides the create.Acceptance notes
check-release-section-coveragealready reports it on the post-version tree: "NO heading on this page names the 18.0 series". It is advisory in Validate and green there. The nightlyrelease-coverage-patrol.ymlruns--strictand records it on its anchor issue until the curated 18.0.0 notes are compiled. That compile is the release-time step the page itself names ("Curated notes … are compiled at release time"), as with every 17.x minor. Writing a heading only to satisfy the patrol would be a heading with no notes under it. Noted, not carded.[v18]. GA lines use[v17.0.0]-style text, but no gate reads link text and the card did not ask for it. Noted only.维护者速读(草稿)
改了什么:只改了两页发布文档,都在
content/docs/releases/下。(current series: 18.0.0, released 2026-10-19)。这是版本步骤的改写器唯一能识别、以后能自动更新的格式。同一页的"v18 正在预发布"段落改成已退出预发布的说法。description、发布状态引用块,以及三句预发布模式下的现在时句子,改为"18.0.0 是 GA 版本,发布到 npm 的latest"。为什么改:PR #24555 退出预发布模式后,版本 PR 的刷新会在这两处按设计拒绝:Render 卡在
sync-release-index-currency,Validate 卡在check:release-page-status。在临时克隆里同时套上 #24555 和本 PR,原样重放release.yml的 Render / Validate / Restore 三步:退出码都是 0,15 个内容门禁全绿,@objectstack/spec渲染为18.0.0,73 个锁步包全部是18.0.0。风险与代价(含回滚):
latest上提供 18.0.0",只写 18.0.0 是本页记录的 GA 版本,它会发布到latest。唯一带日期的说法是索引里的released 2026-10-19。main上(仍是mode: "pre")时,派生出的 47 个门禁全部为 0,其余发布文档门禁也全绿。next), so the next version pass cuts the 18.0.0 GA #24555 合并,main上会短暂出现"已退出预发布模式"的文字,但当时仍处于预发布模式。门禁不会变红。席位意见:
你要做的:
next), so the next version pass cuts the 18.0.0 GA #24555,再合并本 PR,然后触发一次版本 PR 刷新。@objectstack/spec是18.0.0,再按发布流程合并版本 PR 并批准发布。Generated by Claude Code