Skip to content

chore(release): exit Changesets pre mode (next), so the next Version Packages PR versions 18.0.0 GA #24528

Closed

Description

@objectstack-fleet

Filing gate ③: a task the maintainer directed. In domain:devx seat 1's chat (session_01FM29ZqLTrnPNXxijioZwMp), on 2026-10-19, the maintainer wrote 「发 GA 要先退出预发布模式。立卡派发」. Filed by that seat, which dispatches it at once.

Measured at filing (origin/main a5a781bc7)

Wanted

  • One PR that exits pre mode, written with the CLI (pnpm changeset pre exit), never by hand.
  • The PR body carries a dry-run of the version pass on a scratch copy, so the maintainer sees what the next Version Packages PR will publish:
    • every package's version before and after (18.0.0-next.5 → 18.0.0 for the fixed group, and whatever the others become);
    • how many changesets it consumes from .changeset/pre/ and .changeset/;
    • whether .changeset/pre.json is deleted.
  • Every gate that keys on the mode is read on the exited tree and given a conclusion: still green, or what it needs. That covers check-changeset-no-major.mjs (pending majors in .changeset/pre/ after exit), release.yml's pending count, and the major-boundary classes. A gate that would break the GA Version Packages PR is fixed in this PR when the fix is small. Otherwise it is named, with its fix, for the seat to card.
  • ⛔ No publish, no tag, no Version Packages PR touched, and no release workflow dispatched.
  • The PR stays draft for the maintainer to merge. Landing it is the GA timing call: the first Version Packages PR after it versions 18.0.0, while the target:v18 cards above are still open.

Done when

  1. The pre-exit PR is open as a draft, with the dry-run plan and each mode-keyed gate's conclusion in its body.
  2. The maintainer merges it, and the next Version Packages PR's head carries 18.0.0 for @objectstack/spec. That is the seat's post-landing reading.

Dedupe

Read by enumeration, because the search endpoint is blocked. No open or closed card since 2026-09-01 names a pre exit or a GA cut. The target:v18 cards are product work, not the mode switch. objectstack-ai/objectui is also in pre mode (tag: next) and is not in scope here. Whether it exits too is the maintainer's call.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 4 · on the maintainer's 「发 GA 要先退出预发布模式。立卡派发」 in this session's chat
    Session: session_01FM29ZqLTrnPNXxijioZwMp
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-24528-changesets-pre-exit
    Worktree: objectstack-issue-24528
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: .changeset/pre.json (written by pnpm changeset pre exit), plus a small fix to a gate that keys on the mode only if the exited tree breaks it (stop on breach; explain in the report). .github/workflows/** is Tier H if touched. ⛔ No publish, tag, Version Packages PR or release dispatch.
    Container & model: M (a one-line mode switch whose release plan and mode-keyed gates must be measured), mode:subagent, model: TIER_DEFAULT (dispatch-gates --tier: "no path-derived mandate")
    Clause-②: no
    Responsibility: n/a — not a defect card (the GA cut's mode switch, on the maintainer's order)
    Thread-read: none
    Serial constraints cleared: none — no open PR touches .changeset/pre.json or scripts/check-changeset-no-major.mjs (read at 2026-10-19T12:37Z). Landing is the maintainer's: the PR stays draft, because its merge decides when the next Version Packages PR versions 18.0.0.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 24528,
    "status": "done",
    "branch": "claude/issue-24528-changesets-pre-exit",
    "pr": "#24555",
    "session": "session_01FM29ZqLTrnPNXxijioZwMp — subagent run; the parent seat's harness-stamped id (claim 6267382000 names this branch, verified before any edit)",
    "premise_still_valid": true,
    "summary": "Draft PR #24555 (head abec338 = BASE 5b14b7f + 2 commits + origin/main 04669a4 merged before opening; draft, label skip-changeset, assignee os-warren) exits Changesets pre mode: .changeset/pre.json BEFORE {"mode": "pre", "tag": "next"} AFTER {"mode": "exit", "tag": "next"}, written by pnpm changeset pre exit (@changesets/cli 3.0.3; @changesets/pre 3.0.0 exitPre spreads the state and sets mode exit, migratePreState is a no-op with no initialVersions/changesets keys, so hypothesis 1's "expects initialVersions/changesets" is falsified for v3). A verbatim replay of release.yml version-pr Render/Validate/Restore in a scratch clone gives the fixed group (73) 18.0.0-next.5 → 18.0.0 (hypothesis 4 holds), 1029 consumed (1011 from .changeset/pre/, 18 from .changeset/), pre.json deleted — but the GA Version Packages PR cannot be produced yet: Render exits 1 at sync-release-index-currency (content/docs/releases/index.mdx v18 status still "prerelease ... no GA date") and Validate reds check:release-page-status (content/docs/releases/v18/index.mdx blockquote states no 18.x release); with stand-in GA prose in the scratch clone only, Render 0 / Validate 0 (15/15) / Restore 0, so those two release-owned sentences are the only blockers found and are named for the seat as a docs-only PR (content/docs/releases is never edited here). Files changed: .changeset/pre.json and content/docs/protocol/backward-compatibility.mdx (11 present-tense v18-prerelease sentences moved to past tense plus the exit facts, lockstep-count anchors byte-unchanged). Deviations: (1) the docs file is outside the claim's declared surface — added under the role file's must-fix rule for a published statement this change falsifies; the release-owned mirrors of the same sentences (releases/index.mdx:58-62, releases/v18/index.mdx:6-11,27,62 and its description) cannot be edited here and are folded into the named docs-only PR; (2) the scratch clone was installed with --ignore-scripts and the migration registry generated by hand, because the scratchpad path exceeds tsx's IPC socket length in spec prepare (EADDRINUSE on a 160-char pipe path); (3) a merge of origin/main 04669a4 (one new changeset) went in before opening, and the dry-run was re-taken on the merged head.",
    "tests": "Dry-run on abec338 in a full-history scratch clone (not shallow; local main 04669a4; push URL disabled; release-rehearsal-clone.mjs "✓ FIT"): Render step extracted verbatim from release.yml → pending_before=1029, pnpm run version EXIT 1 at sync-release-index-currency ("✗ sync-release-index-currency: 1 finding(s) this rewrite cannot fix"); after finishing the chain by hand (check-skill-compatibility-version --fix, 10 SKILL.md 18.0.0-next.5 → 18.0.0) Validate step verbatim under os-verify-lock: VERDICT command-exit 1, 14/15 content gates green, red = pnpm check:release-page-status; shape "1205 path(s), all inside the reviewed shape", "major-boundary surfaces left unvalidated: 0", template stamps moved 0, PROTOCOL_VERSION "already 18.0.0". Version table (before → after): 73 fixed-group members all 18.0.0-next.5 → 18.0.0 (73/73 read); private: example-crm 4.0.100-next.5 → 4.0.100, example-todo 4.0.100-next.5 → 4.0.100, example-multi-package 0.0.7-next.5 → 0.0.7, example-showcase 0.3.22-next.5 → 0.3.22, example-embed-objectql 0.0.40-next.5 → 0.0.40, dogfood 0.0.48-next.5 → 0.0.48, downstream-contract 0.0.46-next.5 → 0.0.46, http-conformance 0.1.8-next.5 → 0.1.8; unchanged: docs 4.2.3, spec-monorepo 4.0.1, objectstack-blank 0.1.0, refd-timer-testkit 0.1.0, vitest-filter-preflight 0.1.0. Consumed: 1011 deleted from .changeset/pre/, 18 from .changeset/ (= pending_before 1029); .changeset/pre.json DELETED; only README.md left as .md under .changeset; @changesets/read 1.0.1 reads 0 on the post-version tree; annotate-shipped annotated 6 changesets left unconsumed by 820fd5a. Leg B (stand-in GA prose committed in the scratch clone only): Render EXIT 0, Validate VERDICT command-exit 0 "Post-version tree validated." (15 green), Restore EXIT 0 "Pre-version tree restored: 1029 pending changeset(s), working tree clean.". Re-arm probe (scratch clone only, never pushed): a new "@objectstack/spec": major changeset on the exited tree → check-changeset-no-major --base main EXIT 1 ("This PR introduces changeset(s) that declare a major bump"); control, same tree with mode "pre" → EXIT 0 (exempt); restored with git checkout HEAD, git diff HEAD empty. First dry-run at 4fe7eb6 (pre-merge, 1028 pending) gave the same verdicts; spec CHANGELOG ## 18.0.0 section 6,006 lines / 983,037 bytes; version diff +58,729/-21,347. No package source or TypeScript touched, so no package tests/typecheck owed (NOT MEASURED by design); no ablation (no tested behaviour changed).",
    "gates": "Local at abec338: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack → 54 commands for the 2-path diff; all 54 EXIT 0 (exit captured before any pipe); --ran → "54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN" (RAN_EXIT=0). Two first attempts returned EXIT 3 PREREQUISITE NOT MET and were re-run after building under os-verify-lock (@objectstack/lint... 4 pkgs VERDICT command-exit 0 121s; @objectstack/client-react... 39 pkgs VERDICT command-exit 0 340s): pnpm check:docs-transcript-drift → 0, pnpm --filter @objectstack/spec run check:skill-examples → 0. Earlier 21-command derivation on the pre-docs head 4fe7eb6: 21/21 EXIT 0. Beyond derivation, all EXIT 0 on abec338: check-changeset-no-major --list ("18 pending changeset(s), 0 declaring a major. .changeset/pre.json mode: exit"), check-changeset-fixed ("in sync with 73"), check:docs-image-tag-sync, check:release-page-status, check-release-section-coverage --strict, check:release-index-currency-sync, check:future-spec-major, check:lockstep-package-count, check:template-version-sync, check:skill-compatibility, check:release-notes. Mode-keyed verdicts on the exited tree: check-changeset-no-major GREEN (PR-scoped clean; the 29 major-declaring files in .changeset/pre/ are not refused because the gate judges diffs; guard re-arms per the probe); release.yml pending count GREEN (exit mode counts 1029 = consumed; Restore re-reads the mode from the restored tree, replayed EXIT 0); major-boundary classes GREEN (nothing moves: PROTOCOL_VERSION already 18.0.0, templates already ^18, unvalidated 0); hotcrm block UNAFFECTED (no longer keyed on pre.json, BLOCKING 0 in every mode — card premise stale); cut-rc.yml UNCHANGED (requires mode pre + tag rc; refused before and after); release-pending-publish GREEN (--self-test 112 cases; annotate-shipped ran in the dry-run); check-docs-image-tag GREEN (exit mode expects newest GA 17.7.0; post-version green at 18.0.0); sync-docs-image-tags GREEN (9 pins 17.7.0 → 18.0.0 in the dry-run); check-published-files GREEN; check-adr-0087-registration GREEN (--base and --self-test); objectui-changeset-digest inPreMode now false (objectui majors digested as minor, mirrors the guard). CI on abec338, read once at report time (not re-run locally): completed success — The card this PR closes must claim this branch, No other open PR may claim the same issue, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, Governed Surface Queue Guard, Spec property liveness, Type Check · debt ledger, Check Documentation Links, Check PR Size, Dogfood Regression Gate, Auto Label, filter; skipped — Check Changeset (skip-changeset), Build Core, Console Pin Gate, Temporal Conformance, Dogfood Verify CLI, Packed-tarball smoke; in_progress — Test Core (1/6..6/6), Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · scoped (3), Type Check · workspace, Type Check · source gates, Type Check · consumer gates, Build Docs. NOT MEASURED: check:dev-prereqs / check:skill-frame-freshness (diff touches neither the spec build nor the frame files); the changesets/action read rehearsal (a GitHub Action — the CLI reader @changesets/read 1.0.1 was read instead).",
    "mcp_calls": "0 — no MCP GitHub tool was called (reads went through gh api REST reads; writes through the fleet relay)",
    "api_writes": "2 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]: (1) pr_create run 39262188905 → POST /repos/objectstack-ai/objectstack/pulls (draft #24555), POST /repos//issues/24555/assignees (os-warren), POST /repos//issues/24555/labels (skip-changeset); body read back 19645 bytes identical; (2) this os-dev-report comment via scripts/pm/post-stamped.mjs → POST /repos//issues/24528/comments. Plus 4 git pushes (not REST): the empty-branch probe, 4fe7eb6, 1b8d66e, abec338.",
    "open_questions": [
    {
    "question": "How should the release-owned GA prose that unblocks the 18.0.0 Version Packages PR land (content/docs/releases/index.mdx v18 status + paragraph at :58-62; content/docs/releases/v18/index.mdx release-status blockquote, :27, :62 and description)?",
    "options": [
    "A — a docs-only PR by the seat: index status "(current series: 18.0.0, released DATE)" plus a blockquote stating 18.0.0 is released, the pre-mode paragraphs rewritten; merged by the maintainer right after #24555, then one version-PR refresh. DATE = the UTC day of the refresh whose PR is merged (the rewriter never re-dates a same-version field and no gate checks the date). Cost: one small docs PR; a red refresh between the two merges, loud and publishing nothing.",
    "B — teach sync-release-index-currency a prerelease → first-GA transition. Cost: reverses the rewriter's documented boundary ("An entry whose parenthetical is prose") and still leaves the v18 page blockquote needing a sentence, so the docs PR is needed anyway."
    ],
    "recommendation": "A, because both blockers are release-time prose by this repo's own rule (content/docs/releases is compiled at release time), A adds no gate or rewriter behaviour, and B does not remove the need for A."
    }
    ],
    "out_of_scope_findings": [
    "carrier: domain:devx seat (the card asks for it to be named for the seat to card) · GA blocker, measured: on abec338 pnpm run version exits 1 at sync-release-index-currency (v18 index status "prerelease: 18.0.0-next.N ... no GA date") and Validate reds check:release-page-status (v18 page blockquote "v18 has no GA release yet"); stand-in prose turns both green; remedy = docs-only PR (open_questions A) · dedupe words: v18 GA release docs, release-page-status v18, release index currency 18.0.0, version-pr refresh red",
    "carrier: none — noted in PR Acceptance notes only · in exit mode check-changeset-no-major --list and the check-adr-0087-registration audit surfaces count root stock (18) and treat .changeset/pre/ as consumed while the GA pass consumes 1029; informational, both gates judge diffs",
    "carrier: none — noted only · standing Version Packages PR #24524 reads 18.0.0-next.6; after #24555 merges and until the docs PR lands, every refresh is red and #24524 keeps next.6; merged after the exit it would publish next.6 to next (getReleaseTag returns preState.tag while pre.json mode exit is present) — reading of the code, not measured"
    ]
    }


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-19T14:44Z

    reading result
    merge queue (gh-readonly-queue/main/pr-24555-* heads) none left: the entry has drained
    PR object PR #24555 merged by os-zhuang at 2026-10-19T14:44:15Z, on an approval at 2026-10-19T14:27Z
    origin/main at c46b5f14cf, by content .changeset/pre.json reads { "mode": "exit", "tag": "next" }

    State change: PR #24555 closed this card through Fixes #24528 (completed); pm:dispatched comes off in this act.

    Carried onward (owed by this seat): Done-when 2. The next Version Packages PR should carry 18.0.0 for @objectstack/spec. That render needs #24569's PR #24584 on main too: until it lands, every version-PR refresh is red at sync-release-index-currency and publishes nothing, which is the measured order. The seat reads the first refresh after both are on main and records it here.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Done-when 2 met: the next Version Packages PR renders 18.0.0 · domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-19T18:28Z

    Release run 39300473949 is a schedule run on main 973917c579, which carries this card's pre.json exit (PR #24555) and the GA prose (PR #24584, #24569). Its Version PR maintenance job succeeded. PR #24524's head 3fdde03e00 has @objectstack/spec, @objectstack/cli and create-objectstack at 18.0.0, with .changeset/pre.json consumed. The full reading is on #24569 (record above it in time). ⛔ No release act by this seat.


    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, iteratedomain:devxpriority:p1High: required for production / M2target:v18tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions