Skip to content

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 into
mainfrom
claude/issue-22919-v18-release-landing
Oct 12, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-22919-v18-release-landing

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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 URL packages/cli/src/utils/protocol-version-gap.ts sends @next installers to (https://objectstack.ai/docs/releases/v18) a page behind it, and it is the page check:release-notes demands once the version pass writes an 18.x heading into packages/spec/CHANGELOG.md. scripts/check-release-notes.mjs is 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 of pages.
  • 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

Claim on the page Source on main at 018b077fb
No GA release yet; the line publishes as 18.0.0-next.N on npm's next tag; latest stays on 17.x; a ^17 range never moves; install by @next or an exact 18.0.0-next.N .changeset/pre.json ("mode": "pre", "tag": "next", landed a87d8be29, PR #22084); .changeset/22080-v18-line-opens.md
The line exists for ADR-0131 (its title), staged in one major per its D14 docs/adr/0131-…md D14; the line-opens changeset ("ADR-0131 … lands on this line in stages")
Every major goes to next at least one RC cycle before latest ADR-0087 D6
Each breaking stage says so in its own changeset, with its migration; those changesets ship as each package's CHANGELOG the line-opens changeset ("Each stage that breaks something says so in its own changeset, with its own migration"); AGENTS.md Post-Task Checklist step 3
PROTOCOL_VERSION is 18.0.0; the handshake admits '^18' and refuses '^17' packages/spec/src/kernel/protocol-version.ts, landed 4e9fe9ff6 (PR #22215); .changeset/22130-protocol-18.md
GA exits pre mode and publishes to latest the line-opens changeset ("What ends it")

The 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/…: major line (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 after 18.0.0-next.0 publishes, 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.mjs reads majors from packages/spec/CHANGELOG.md headings, 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 archive of packages/spec/CHANGELOG.md, packages/spec/package.json, content/docs/releases, content/docs/meta.json and content/docs/index.mdx), with the CHANGELOG given a ## 18.0.0-next.0 heading and package.json set to 18.0.0-next.0, which is the shape the version pass writes. The worktree was not touched.

tree node scripts/check-release-notes.mjs
base 018b077fb, as committed exit 0
base 018b077fb, simulated post-version exit 1 (output below)
head 0efecc249, simulated post-version exit 0 (output below)
head, simulated post-version, "v18" dropped from meta.json (control) exit 1, "v18.mdx exists but is not listed in content/docs/releases/meta.json"

Without the page:

check-release-notes: 1 problem(s)

  • content/docs/releases/v18.mdx (or content/docs/releases/v18/index.mdx) is missing — @objectstack/spec shipped a 18.x release but there is no curated release page. Write it (lead with breaking changes + migration), then add "v18" to content/docs/releases/meta.json.

That is the message the triage reading 6087315917 quotes from the scheduled run's log. With the page:

check-release-notes: OK — every released major has a curated, navigable release 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.
  • The version-pass rewriter sync-release-index-currency (syncIndex() on the scratch root): no rewrites, no findings, index.mdx byte-identical.

H2: what check:release-page-status asks of this page (measured)

  • During the next line: nothing. gaMajors() matches only end-anchored headings, so ## 18.0.0-next.0 is not a GA heading and v18 is outside the set it judges. The package.json cross-check skips a prerelease version. It cannot express "no release yet", and it does not need to.
  • At GA it reads exactly two places: the first blockquote after the frontmatter, and the trailing parenthetical of the index.mdx line. The page puts its status in both on purpose. Simulated GA (## 18.0.0, version 18.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 the prerelease-word and prerelease-version signals. 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; adding handwritten-docs.json brought 10 more. All 57 exit 0 on head 0efecc249. --ran with 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/client and @objectstack/client-react. On a fresh tree, check:docs, the two @objectstack/lint doc gates, check:docs-transcript-drift and check:skill-examples answer PREREQUISITE NOT MET (exit 3), not a verdict. MDX: the page compiles with @mdx-js/mdx 3.1.1. NOT MEASURED: Build Docs, which is CI's, and the live URL, because this container's egress denies objectstack.ai.

Deviations

  • scripts/docs-audit/handwritten-docs.json (+1 line), outside the card's content/docs/releases/**. check:docs-audit-scope (in lint.yml, Lint & Repo Gates) reds on any hand-written page under content/docs that 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.
  • The card asks this PR to follow SKILL.md's path fork "for a governed path". content/docs/releases/** is in no row of GOVERNED_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

  • The page links /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.
  • The "Versioning policy" section of content/docs/releases/index.mdx (unchanged here) still says a breaking change ships as a minor release and that check-changeset-no-major.mjs fails any pull request declaring a major. In pre mode that guard's RC exemption stands aside, and 21 changesets with a major line are pending on main. 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's files[] ships.


Generated by Claude Code

…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>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Oct 12, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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): node scripts/docs-audit/affected-docs.mjs --json 85b4ac634e3f3997bee7cf038090d24d029bc82c → packageMentionDocs.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 12, 2026 04:05
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 12, 2026 04:05
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 12, 2026
Merged via the queue into main with commit f86a10d Oct 12, 2026
39 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-22919-v18-release-landing branch October 12, 2026 04:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

release(v18): write the /docs/releases/v18 landing page, the one gate left on the v18 version lane (#22085)

2 participants