Repository navigation
docs(releases): the v18 landing page — the page check:release-notes needs before 18.0.0-next.0, behind the URL the CLI's @next pointer names - #22928
Merged
objectstack-fleet[bot] merged 3 commits intoOct 12, 2026
Conversation
…and index A short landing page at /docs/releases/v18: the line's release status (no GA yet; 18.0.0-next.N on npm's next tag; latest stays on 17.x), its purpose (ADR-0131), and the rule for its breaking stages (ADR-0087 D6's next-before-latest, one changeset and migration per stage, protocol 18). "v18" heads content/docs/releases/meta.json and the index gains one line above v17, so the page check-release-notes requires once the version pass writes an 18.x CHANGELOG heading exists, and the URL the CLI's protocol-version-gap advisory names has a page behind it. Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2 Co-authored-by: Claude <noreply@anthropic.com>
…en doc list check:docs-audit-scope (Lint & Repo Gates) reds on any hand-written page under content/docs that scripts/docs-audit/handwritten-docs.json does not list. Regenerated with `node scripts/docs-audit/check-audit-scope.mjs --write`: +1 entry, content/docs/releases/v18/index.mdx. The same one-line companion edit the 17.7.0 release page carried. Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2 Co-authored-by: Claude <noreply@anthropic.com>
… its migration Word the per-stage changeset rule by what AGENTS.md requires of a breaking changeset (the change and its migration) rather than "old and new spelling", which fits a rename and not a stored-data reshape. Claude-Session: https://claude.ai/code/session_012yK1ddAdAqfzwigRHZq3r2 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Oct 12, 2026
objectstack-fleet
Bot
deleted the
claude/issue-22919-v18-release-landing
branch
October 12, 2026 04:37
This was referenced Oct 12, 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 #22919
Clause-②: no
What this is
The short v18 landing page that ruling
6049734955(Q2 → A, on #22085) asks for, written on the maintainer's word on #22919 (release-owned channel 1). It gives the URLpackages/cli/src/utils/protocol-version-gap.tssends@nextinstallers to (https://objectstack.ai/docs/releases/v18) a page behind it, and it is the pagecheck:release-notesdemands once the version pass writes an18.xheading intopackages/spec/CHANGELOG.md.scripts/check-release-notes.mjsis not edited; no release action is taken.Files, v17's folder shape:
content/docs/releases/v18/index.mdx(new): a release-status blockquote, the line's purpose, and the rule for its breaking stages.content/docs/releases/v18/meta.json(new):"pages": ["index"].content/docs/releases/meta.json:"v18"at the head ofpages.content/docs/releases/index.mdx: one line above the v17 line.scripts/docs-audit/handwritten-docs.json: +1 generated entry, outside the card's declared surface (see Deviations).What the page says, and the source of each claim
mainat018b077fb18.0.0-next.Non npm'snexttag;lateststays on 17.x; a^17range never moves; install by@nextor an exact18.0.0-next.N.changeset/pre.json("mode": "pre","tag": "next", landeda87d8be29, PR #22084);.changeset/22080-v18-line-opens.mddocs/adr/0131-…mdD14; the line-opens changeset ("ADR-0131 … lands on this line in stages")nextat least one RC cycle beforelatestPROTOCOL_VERSIONis18.0.0; the handshake admits'^18'and refuses'^17'packages/spec/src/kernel/protocol-version.ts, landed4e9fe9ff6(PR #22215);.changeset/22130-protocol-18.mdlatestThe page names no change beyond those landed facts, states no date, and names no 18.x version other than
18.0.0-next.N. Per H3, the 21 pending changesets carrying an@objectstack/…: majorline (33 such lines in all) were read as a source for the staging rule and are not transcribed. One wording choice: the banner reads "v18 has no GA release yet" rather than "no v18 release yet". It stays true after18.0.0-next.0publishes, which is exactly what this page unblocks, so the page is not stale on its first prerelease.H1: the gate this clears fires only on the post-version tree (measured)
check-release-notes.mjsreads majors frompackages/spec/CHANGELOG.mdheadings, unanchored, so on this PR's head it is green with or without the page. The red it clears is the version PR's post-version tree. The simulation ran on scratch copies (git archiveofpackages/spec/CHANGELOG.md,packages/spec/package.json,content/docs/releases,content/docs/meta.jsonandcontent/docs/index.mdx), with the CHANGELOG given a## 18.0.0-next.0heading andpackage.jsonset to18.0.0-next.0, which is the shape the version pass writes. The worktree was not touched.node scripts/check-release-notes.mjs018b077fb, as committed018b077fb, simulated post-version0efecc249, simulated post-version"v18"dropped frommeta.json(control)Without the page:
That is the message the triage reading
6087315917quotes from the scheduled run's log. With the page:The other release-docs gates the post-version step runs, on the same simulated head tree:
check-release-page-status: exit 0.check-release-section-coverage --strict: exit 0.sync-release-index-currency(syncIndex()on the scratch root): no rewrites, no findings,index.mdxbyte-identical.H2: what
check:release-page-statusasks of this page (measured)nextline: nothing.gaMajors()matches only end-anchored headings, so## 18.0.0-next.0is not a GA heading and v18 is outside the set it judges. Thepackage.jsoncross-check skips a prerelease version. It cannot express "no release yet", and it does not need to.index.mdxline. The page puts its status in both on purpose. Simulated GA (## 18.0.0, version18.0.0) with this page unchanged gives exit 1 with three problems: the blockquote never states that an 18.x version is released, and the index status carries theprerelease-wordandprerelease-versionsignals. So the gate forces the status rewrite at the GA cut. This page cannot go stale silently there, which is the v16/v17 status class the gate was built for.Gates
Derived on this diff with
node scripts/pm/dispatch-gates.mjs --commands(no paths): 57 commands for the five paths. The 47 the dispatch named are among them; addinghandwritten-docs.jsonbrought 10 more. All 57 exit 0 on head0efecc249.--ranwith recorded exit codes reads: "57 derived, 57 run, 0 NOT-MEASURED, 0 UNRUN". Two prerequisites had to be met first, by building@objectstack/spec,@objectstack/formula,@objectstack/lint,@objectstack/clientand@objectstack/client-react. On a fresh tree,check:docs, the two@objectstack/lintdoc gates,check:docs-transcript-driftandcheck:skill-examplesanswer PREREQUISITE NOT MET (exit 3), not a verdict. MDX: the page compiles with@mdx-js/mdx3.1.1. NOT MEASURED:Build Docs, which is CI's, and the live URL, because this container's egress deniesobjectstack.ai.Deviations
scripts/docs-audit/handwritten-docs.json(+1 line), outside the card'scontent/docs/releases/**.check:docs-audit-scope(inlint.yml, Lint & Repo Gates) reds on any hand-written page undercontent/docsthat the generated list does not carry. On this branch's first commit it read: "1 hand-written doc(s) exist but are not listed … + content/docs/releases/v18/index.mdx. Fix: node scripts/docs-audit/check-audit-scope.mjs --write". The entry was regenerated with that command. The 17.7.0 release page carried the same one-line companion edit (21c804c03, PR docs(releases): the curated 17.7.0 release page and upgrade checklist #21994). It is its own commit (62e32ad55) so the seat can judge it apart from the page. Without it this PR cannot pass the required lint job.content/docs/releases/**is in no row ofGOVERNED_SURFACES(scripts/pm/check-governed-merges.mjs), so the fork lands on the ordinary branch, and this body carries no maintainer quick-read section. The PR stays draft for the seat.Acceptance notes
/docs/upgrading, not the generated/docs/protocol-upgrade/18. That page is built at docs-build time into a gitignored directory, so the offline lychee lane (check-links.yml,--root-dir content) cannot resolve it in a fresh checkout.content/docs/releases/index.mdx(unchanged here) still says a breaking change ships as a minor release and thatcheck-changeset-no-major.mjsfails any pull request declaring a major. In pre mode that guard's RC exemption stands aside, and 21 changesets with amajorline are pending onmain. Release-side text; noted for whoever compiles the v18 notes, not edited here (the card asks for one index line).Labels:
skip-changeset. The diff moves nothing any package'sfiles[]ships.Generated by Claude Code