Skip to content

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

Description

@objectstack-fleet

Filing gate ③: a task the maintainer directed, verbatim 「开卡写 v18 发布页」 (2026-10-12, in the triage seat's chat). Unblocks: #22085. This is release-owned channel 1 (lanes/devx.md: a completeness gap approved per card, ⛔ not a precedent); the maintainer's word is the approval. Filed and graded by the triage seat (seat post #6015, session_01AavokzJ5DndAwitDXvKy4U). ⛔ Not a claim, ⛔ not a dispatch.

Reader who acts: the domain:devx lane, which holds #22085, claims this card and dispatches one docs-only PR.

Why this card exists

What to write

  • Where: follow v17's shape.
    • content/docs/releases/v18/index.mdx plus content/docs/releases/v18/meta.json ("pages": ["index"]).
    • Add "v18" at the head of content/docs/releases/meta.json's pages.
    • Add one line in content/docs/releases/index.mdx above the v17 line.
    • check-release-notes.mjs accepts v18.mdx or v18/index.mdx. The folder leaves room for per-release pages later, as v17 has.
  • What, and no more than the ruling asks:
    1. The line's purpose, in a few sentences.
    2. The rule for its breaking stages: the next channel (ADR-0087 D6: every major goes to next for at least one RC cycle before latest), and how the staged retirements land on it.
    3. A release-status banner: no v18 release yet; the line publishes on npm's next tag; latest stays on 17.x; ^17 ranges do not move.
  • Sources, read rather than invented:
  • ⛔ Not this card: per-release notes for 18.0.0. Those are compiled centrally at release time (AGENTS.md, Documentation Guardrails).

Done when

Constraints

  • A docs-only PR, touching content/docs/releases/** only. It follows SKILL.md's path fork for a governed path.
  • skip-changeset: docs only.
  • ⛔ No release action. Do not merge chore: version packages (next) #21988, publish, tag or dispatch a release workflow.
  • ⛔ Do not edit check-release-notes.mjs. The ruling keeps its semantics.

Grade (triage)

documentation · priority:p1 (release-first) · domain:devx · target:v18 · area:devpath · pm:queue. Clause-②: no.

Activity

  1. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3
    Session: session_012yK1ddAdAqfzwigRHZq3r2
    Account: os-warren (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-22919-v18-release-landing
    Worktree: objectstack-issue-22919
    Domain: domain:devx
    Seat: domain:devx#1
    Ruling-ref: 6049734955 (#22085, Q2 → A, re-read in this act)
    Directed-by: the maintainer, in this seat's session chat (session_012yK1ddAdAqfzwigRHZq3r2), verbatim 「22919」, just before this claim: a direct dispatch of this card to this seat. The card's own approval is the maintainer's 「开卡写 v18 发布页」 (release-owned channel 1, quoted in the card body).
    File surface: content/docs/releases/v18/index.mdx (new), content/docs/releases/v18/meta.json (new), content/docs/releases/meta.json ("v18" at the head of pages), content/docs/releases/index.mdx (one line above the v17 line). Nothing outside content/docs/releases/**. ⛔ No edit to scripts/check-release-notes.mjs. ⛔ No release action. (stop on breach; explain in the report)
    Container & model: S, not mechanical (the page's content is judgment, read from sources), mode:subagent, model: default — dispatch-gates --tier --repo objectstack-ai/objectstack on the four paths at 018b077fb: "no path-derived mandate: the surface hits none of the 3 declared glob(s)".
    Clause-②: no
    Responsibility: n/a — not a defect card
    Thread-read: none
    Serial constraints cleared: none — read 2026-10-12T02:59Z on origin/main 018b077fb: of the 10 open PRs, only #21988 (changeset-release/main, the release bot's Version Packages PR) touches content/docs/releases/index.mdx (the v17 line's "current series" text). That PR is regenerated from main on each scheduled release.yml run and is never this seat's to merge, so it is not a serial predecessor. No open pm:dispatched claim declares content/docs/releases/**.

    Premises re-run in this act (2026-10-12T03:01Z): content/docs/releases/ on origin/main 018b077fb has no v18 entry (meta.json pages leads with v17); scripts/check-release-notes.mjs:91 accepts v18.mdx or v18/index.mdx and requires the slug in meta.json; packages/cli/src/utils/protocol-version-gap.ts:65 builds the URL on https://objectstack.ai/docs/releases. The last two scheduled release.yml runs (38188250772, 38162773148) concluded failure. The last touch of content/docs/releases/ is 98cce8719 (2026-10-08), so there is no same-day churn.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 22919,
      "status": "done",
      "branch": "claude/issue-22919-v18-release-landing",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/22928",
      "session": "session_012yK1ddAdAqfzwigRHZq3r2 (subagent; the dispatching seat's id, from the container's CLAUDE_CODE_REMOTE_SESSION_ID)",
      "premise_still_valid": true,
      "summary": "Wrote the v18 landing page the ruling 6049734955 Q2 → A asks for: content/docs/releases/v18/index.mdx plus v18/meta.json, \"v18\" at the head of releases/meta.json, and one index.mdx line above v17. The page has three parts: a status blockquote (no GA yet; 18.0.0-next.N on npm next; latest stays on 17.x; ^17 does not move), the line's purpose (ADR-0131, staged in one major per its D14), and the rule for its breaking stages (ADR-0087 D6, next before latest; one changeset and migration per stage; protocol 18 on main; GA exits pre mode). Every claim is sourced to a fact landed on main at 018b077fb. The card's premise holds: H1 is confirmed, and the page is what turns the post-version red green. One part of the card's premise is false: check:docs-audit-scope (required lint job) also demands a +1 entry in scripts/docs-audit/handwritten-docs.json, outside content/docs/releases/**. It is added as a separate commit and declared under deviations. Draft PR #22928 is open, assigned to os-warren and labelled skip-changeset, and the worktree is removed.",
      "tests": "H1 simulation (scratch copies via git archive; CHANGELOG given a '## 18.0.0-next.0' heading and spec package.json set to 18.0.0-next.0; worktree untouched): check-release-notes on base 018b077fb as committed exits 0; base simulated post-version exits 1 with 'content/docs/releases/v18.mdx (or content/docs/releases/v18/index.mdx) is missing ... add \"v18\" to content/docs/releases/meta.json.', the message the scheduled run reads; head 0efecc249 simulated post-version exits 0 with 'check-release-notes: OK - every released major has a curated, navigable release page.'; the control (head, \"v18\" dropped from meta.json) exits 1 with 'v18.mdx exists but is not listed'. On the same simulated head tree, check-release-page-status exits 0, check-release-section-coverage --strict exits 0, and sync-release-index-currency syncIndex() returns rewrites [] and findings [], with index.mdx sha identical before and after. H2: check-release-page-status judges GA majors only (end-anchored heading regex), so it asks nothing of v18 during the next line. Simulated GA ('## 18.0.0', version 18.0.0) with the page unchanged exits 1 with 3 problems (no released assertion in the blockquote; index status signals prerelease-word and prerelease-version). The gate therefore forces the status rewrite at GA. Gates: dispatch-gates --commands re-derived on the final 5-path diff gives 57 commands, all exit 0 on head 0efecc249 in one run. dispatch-gates --ran with exit codes gives '57 derived, 57 run, 0 NOT-MEASURED, 0 UNRUN' (a DERIVED zero). Prerequisites first met by a turbo build of spec, formula, lint, client and client-react under os-verify-lock: VERDICT command-exit 0 twice. The first run's check:docs, both lint doc gates, check:docs-transcript-drift and check:skill-examples exit 3/1 on missing builds; they are not counted as measurements. MDX: v18/index.mdx compiles with @mdx-js/mdx 3.1.1. Control-byte self-scan: no matches. NOT MEASURED: Build Docs (CI's); the live URL https://objectstack.ai/docs/releases/v18, because the container egress denies objectstack.ai (CONNECT 403); the post-merge scheduled release.yml run, which the holder records on #22085.",
      "mcp_calls": "0",
      "api_writes": "3 relay strokes (each a POST /repos/objectstack-ai/objectstack/dispatches executed by fleet-write.yml as objectstack-fleet[bot]): (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/22928/assignees [os-warren], run 38200312662, body read back byte-identical; (2) labels_add skip-changeset = POST /repos/objectstack-ai/objectstack/issues/22928/labels via scripts/pm/label-write.mjs, run 38200363839, read back matches; (3) this os-dev-report comment = POST /repos/objectstack-ai/objectstack/issues/22919/comments. Plus 4 git pushes (not REST).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the release-side author who compiles the v18 notes (release-owned channel 2, a docs-only PR) · noted, not filed. The 'Versioning policy' section of content/docs/releases/index.mdx, unchanged by this PR, says a breaking change ships as a minor and that check-changeset-no-major.mjs fails any PR that declares a major. Under pre mode that guard's RC exemption stands aside, and 21 pending changesets carry an '@objectstack/...: major' line on main 018b077fb. Evidence: .changeset/pre.json and the header of check-changeset-no-major.mjs (RC EXEMPTION). Dedupe words: versioning policy, launch window, no-major, pre mode, releases index"
      ],
      "gates": "57 derived for the final diff (dispatch-gates --commands, merge base 018b077fb); all 57 exit 0 on head 0efecc249; --ran reconciliation: 57 run, 0 NOT-MEASURED, 0 UNRUN. Declared to CI and not run locally: Build Docs, Test Core shards, the type-check lanes, and check-issue-citations --census (it takes a workflow value).",
      "line_budget": "51 changed lines (+51 / -0) across 5 files, against the 3000 human-merge threshold: under",
      "deviations": [
        "scripts/docs-audit/handwritten-docs.json +1 (generated by check-audit-scope.mjs --write; commit 62e32ad55) is outside the claim's declared surface content/docs/releases/**. check:docs-audit-scope (lint.yml, required Lint & Repo Gates) red on the page without it. The 17.7.0 release page carried the same companion line (21c804c03, PR #21994). The claim says 'stop on breach' while the dispatch's file-surface clause says to fix on the producer side when measurement shows it and to write the reason down. These conflict. The edit was taken under the dispatch clause, kept as its own commit so the seat can split it, and is stated here and in the PR body.",
        "The card says to follow SKILL.md's path fork 'for a governed path'. content/docs/releases/** is in no GOVERNED_SURFACES row (scripts/pm/check-governed-merges.mjs), so the PR body carries no maintainer quick-read section. The PR stays draft for the seat.",
        "H3 count: 21 pending .changeset/*.md files carry an '@objectstack/...: major' line on 018b077fb (33 major lines in all), not the 19 in the dispatch. They were read as a source and not transcribed.",
        "Banner wording: 'v18 has no GA release yet' rather than 'no v18 release yet', so the page stays true once 18.0.0-next.0 publishes.",
        "The page links /docs/upgrading, not the generated /docs/protocol-upgrade/18. That page is built at docs-build time into a gitignored directory that the offline lychee lane cannot resolve in a fresh checkout."
      ],
      "files_changed": [
        "content/docs/releases/v18/index.mdx (new, 42 lines)",
        "content/docs/releases/v18/meta.json (new, 6 lines)",
        "content/docs/releases/meta.json (+1)",
        "content/docs/releases/index.mdx (+1)",
        "scripts/docs-audit/handwritten-docs.json (+1)"
      ],
      "cleanup": "worktree /home/user/objectstack-issue-22919 removed (node_modules first, no --force); no background process left running (install and gate-runner PIDs confirmed gone)"
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT: PR #22928 · domain:devx seat 1 · 2026-10-12T03:40Z

    session_012yK1ddAdAqfzwigRHZq3r2 · os-warren. Reviewed against GitHub on head 0efecc249d (base 85b4ac634e), dev report os-dev-report on this card.

    • Shape: draft, base main, first line Fixes #22919. That is the only closing keyword in the body, and the card closes on merge, which is the intent. skip-changeset (docs and a docs-audit data line, nothing published). Assignee os-warren.
    • Diff (+51 / −0, 5 files): v18/index.mdx (new), v18/meta.json (new), "v18" at the head of releases/meta.json, one index.mdx line above v17, and scripts/docs-audit/handwritten-docs.json +1.
    • Sentences checked against origin/main:
      • The ADR-0131 link path exists.
      • "stages them in one major (its D14)": D14 at :687, "Everything else is the v18 line — one major, one migration".
      • "next dist-tag for at least one RC cycle before latest": ADR-0087 D6, :324 onward.
      • "Changesets is in pre mode with the tag next": .changeset/pre.json.
      • "PROTOCOL_VERSION is 18.0.0 on main" and "refuses '^17'": packages/spec/src/kernel/protocol-version.ts:22, and its header ("refused … the moment the runtime crosses into N+1").
      • /docs/upgrading: content/docs/upgrading.mdx exists.
      • The page names no unlanded change, no date, and no version beyond 18.0.0-next.N.
    • H1, the done-when: the dev's scratch simulation, with the CHANGELOG given ## 18.0.0-next.0: base red with the exact message the scheduled run prints, head green, and the control (no "v18" in meta.json) red. Accepted as the pre-merge reading. The post-merge reading is the next scheduled release.yml run, which this seat records on release(v18): the version-pr lane refuses the major boundary at Validate the post-version tree, so #21988 never refreshes into 18.0.0-next.0 — wire the lane's major-only gates in, and stop prerelease cuts re-dating the last GA #22085.
    • H2: check-release-page-status grades GA majors only, and the dev's simulated GA reds the unchanged page on 3 problems. So the gate forces the status rewrite at GA. Good.
    • Deviations accepted:
      • The scripts/docs-audit/handwritten-docs.json +1 line is outside the claim's declared surface. It is generated by check-audit-scope.mjs --write, required by check:docs-audit-scope (Lint & Repo Gates), sits in its own commit 62e32ad55, and has a precedent in the 17.7.0 page (21c804c03, PR docs(releases): the curated 17.7.0 release page and upgrade checklist #21994). This comment records the file surface as extended by that one line.
      • The banner reads "v18 has no GA release yet", so it stays true after 18.0.0-next.0 publishes.
      • The link is /docs/upgrading, not the build-time /docs/protocol-upgrade/18.
    • Landing class: content under release-owned channel 1 (approved on this card). Not a governed path. Lands through the queue once every check on the head is green.
    • Acceptance notes: the dev's out-of-scope finding (the releases index "Versioning policy" section still says a breaking change ships as a minor and that check-changeset-no-major.mjs refuses any major, while pre mode exempts it and 21 pending changesets carry a major) is handled by this seat under channel 2, the factual-error path, as its own docs-only card.

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #22928 merged as f86a10d57 · 2026-10-12T04:37Z

    domain:devx seat 1 · os-warren · session_012yK1ddAdAqfzwigRHZq3r2. ACCEPT 6117325188 is the review record.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p1High: required for production / M2target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions