Skip to content

chore(release): exit Changesets pre mode (next), so the next chore: release packages PR renders objectui's 18.0.0 GA #13108

Closed

Description

@objectstack-fleet

Filing gate ③: a task the maintainer directed. The order came in objectui domain:devx seat 1's chat (session_01FM29ZqLTrnPNXxijioZwMp), 2026-10-20, verbatim: 「objectui 退出预发布模式」. It answers the seat's open question, asked after objectstack exited pre mode for its 18.0.0 GA (objectstack-ai/objectstack#24528, PR objectstack-ai/objectstack#24555). Filed and claimed by that seat (os-warren). The lane is domain:devx, which owns objectui's build and release pipeline (pm-dispatch references/lanes/devx.md).

Measured (objectui origin/main df943a2a1a)

Wanted

Order note (for the maintainer, not a gate)

objectui's packages depend on @objectstack/* at ^18.0.0-next.N ranges, which 18.0.0 satisfies. changeset:publish runs scripts/objectstack-floor.mjs and check-spec-range-floors.mjs first. The dev measures what those require of the @objectstack versions on npm when objectui 18.0.0 publishes, and says whether objectstack 18.0.0 must be on latest first.

Dedupe

Searched objectui issues for "exit pre mode", "pre.json exit" and "18.0.0 GA release packages": none open on this. objectui#12334, closed, entered pre mode.


Generated by Claude Code

Activity

  1. added
    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repo
    and removed on Oct 20, 2026
  2. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 14 (objectui seat) · on the maintainer's 「objectui 退出预发布模式」 (this session's chat, 2026-10-20). Dispatched as soon as a 「并发2」 slot frees (both slots hold #24579 rounds 7 and 8, which touch no objectui file)
    Session: session_01FM29ZqLTrnPNXxijioZwMp
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13108-changesets-pre-exit
    Worktree: objectui-issue-13108
    Domain: domain:devx
    Seat: domain:devx#1 (objectui, seat post #5748)
    File surface: .changeset/pre.json (pnpm changeset pre exit). Also any of PR #12401's two pre-mode gate edits that exist only for pre mode, with their pins, and any objectui release text that states a prerelease status, so that the version render is green. Stop if the fix needs more, and explain why in the report. ⛔ .github/workflows/** is Tier H governed and not in this claim. ⛔ No release act: no merge or queueing of PR #11600, no publish. The PR stays draft for the maintainer's merge.
    Container & model: S (pre-mode exit plus a version-step dry-run), mode:subagent, model: TIER_DEFAULT
    Clause-②: no
    Responsibility: objectui's changesets stay in pre mode on next, so its release PR renders 18.0.0-next.0, not the GA | none: no objectui 18.x version is published yet; the GA waits on this | every objectui consumer of the 18.0 line, at objectui's GA release
    Thread-read: none
    Serial constraints cleared: no open objectui PR touches .changeset/pre.json, .changeset/config.json or the changeset / floor scripts (read at 2026-10-20T01:43Z). Release PR #11600 is the subject, not a sibling.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 13108,
    "status": "done",
    "branch": "claude/issue-13108-changesets-pre-exit",
    "pr": "#13111",
    "session": "session_01FM29ZqLTrnPNXxijioZwMp — subagent run; the parent seat's harness-stamped id (claim 6281363328, the newest Claim: on the card, names branch claude/issue-13108-changesets-pre-exit; verified before any edit)",
    "premise_still_valid": true,
    "summary": "Draft PR #13111 (head 9e3c1a1 = BASE df943a2 + 2 commits; origin/main still df943a2 at open; assignee os-warren; label tests set by labeler.yml, not by me) exits Changesets pre mode. Commit fda18fc: .changeset/pre.json written by pnpm changeset pre exit (@changesets/cli 3.0.1), before {"mode":"pre","tag":"next"}, after {"mode":"exit","tag":"next"}, the same 2-space JSON with a trailing newline (objectui's shape is CLI 3's two keys, as objectstack's). Commit 9e3c1a1: the first verbatim dry-run of the release lane on the exited tree went red on exactly ONE test, scripts/tests/sync-quick-reference-release.test.ts 'rewrites the Version row when the fixed group moves'. Its not.toContain(anchors.version) is a raw-substring check, and with the group at 18.0.0 that string is a prefix of the QUICK_REFERENCE Spec/Client rows' ^18.0.0-next.1. It now compares whole literals with the script's own exported VERSION_LITERAL + normalize, the rule the 4143 gate's header states ('Equality on extracted tokens, never toContain over the raw row'). An in-process probe shows it is still RED on an un-rewritten Version row at 17.7.0, 18.0.0 and 18.0.0-next.0, while the old assertion false-REDs only at 18.0.0. objectui has no release text stating a prerelease or no-GA status (no release pages; grep finds none), so the one red was a test, not prose. Neither of PR #12401's two gate edits is keyed on pre mode; both are kept, nothing reversed, no gate weakened or added. Files changed: 2, +8/-2 (.changeset/pre.json 1/1; scripts/tests/sync-quick-reference-release.test.ts 7/1, file 227 -> 233 lines). No changeset (check-changeset-presence: none owed). Deviations: (1) the test file is outside the claim's declared file surface. The claim said stop if more is needed; the dispatch said fix at the real producer and name it. I followed the dispatch, named it in the PR body's Acceptance notes, and the seat should extend the claim's surface. (2) The workflow's Build packages step was not replayed before Validate. (3) The live check:spec-floors was not run. (4) Commit trailers use AGENTS.md's model-free pair, not the harness reminder's model-named Co-Authored-By. (5) A git fetch in the scratch clone auto-started a background git gc; it had exited (no gc.pid) before the clone was deleted. Cleanup: scratch clone deleted; worktree node_modules removed and git worktree remove exited 0 without --force; no process of mine is left running.",
    "tests": "DRY-RUN (scratch blobless full-history clone from GitHub, not shallow, 12164 commits; push URL /nonexistent; pnpm run setup = pin copied from the machine store + frozen install, real node_modules). The three steps 'Render the post-version tree' / 'Validate the post-version tree' / 'Restore the pre-version tree' were extracted VERBATIM from .github/workflows/changeset-release.yml with the clone's yaml parser. The workflow blob is 533cf01fe5 on both clone and main, and the extracted bodies are byte-identical (cmp) across all legs. They ran under bash --noprofile --norc -eo pipefail with GITHUB_OUTPUT/GITHUB_STEP_SUMMARY/GITHUB_SHA set to scratch files, and Render/Validate under os-verify-lock.sh. LEG head 9e3c1a1: Render EXIT 0 ('Version: 17.7.0 → 18.0.0', pending_before=857, 'paths the version step moved: 939', 'Rewrote QUICK_REFERENCE.md's "Current Release" block'; lock VERDICT command-exit 0). Validate EXIT 0: quick-reference:check '✅ ... already states every anchor', check:control-bytes '✅ OK', pnpm test scripts/__tests__ 'Test Files 190 passed | 2 skipped (192) / Tests 5708 passed | 2 skipped (5710)'; lock VERDICT command-exit 0. Restore EXIT 0: 'Pre-version tree restored: 857 pending changeset(s), working tree clean.', then porcelain 0 and git diff HEAD 0 bytes. Rendered tree: fixed group 40/40 members at 18.0.0 (1 private: object-ui, so 39 publishable; read from the manifests, publish-plan not run); 857 changesets consumed (every .changeset/*.md but README.md); .changeset/pre.json DELETED by the pass; .changeset/ left holding README.md + config.json; 939 paths = 858 deleted (857 + pre.json) + 40 package.json (only the "version" line, 40-/40+) + 40 CHANGELOG.md (+22,251 lines in all) + QUICK_REFERENCE.md (Version row 17.7.0 -> 18.0.0); 0 @objectstack lines move in the package.json diff. On that tree check-changeset-no-major EXIT 0 ('No changeset declares a major bump.'), check-changeset-fixed EXIT 0, and a probe \"@object-ui/core\": major gives EXIT 1 ('carries the group from 18 to 19, but its @objectstack/spec range names 18'); the probe was removed before Restore. LEG first commit fda18fc (exit only): Render EXIT 0 (17.7.0 → 18.0.0, 857, 939); Validate EXIT 1 ('Test Files 1 failed | 189 passed | 2 skipped (192)'; the one failure is sync-quick-reference-release.test.ts 'rewrites the Version row when the fixed group moves': "expected '# Quick Reference…' not to contain '18.0.0'"; quick-reference:check and control-bytes both ✅); Restore EXIT 0 (857, clean). CONTROL LEG BASE df943a2 (mode pre): Render EXIT 0 'Version: 17.7.0 → 18.0.0-next.0', 40/40 at 18.0.0-next.0, pre.json PRESENT (mode pre), 857 moved to .changeset/pre/, pending_before=857, 939 paths; Validate EXIT 0 ('190 passed | 2 skipped (192)'); Restore EXIT 0 (857, clean). UNIT, worktree at 9e3c1a1 under the lock: pnpm exec vitest run on sync-quick-reference-release, quick-reference-current-release-4143, check-changeset-no-major, check-spec-range-floors, check-changeset-presence and doc-version-claims gave EXIT 0, 'Test Files 6 passed (6) / Tests 169 passed (169)'. Assertion teeth: an in-process probe of the script's exports over QUICK_REFERENCE.md. Correct rewrite: new/old assertion green/green at 17.7.0, green/RED at 18.0.0, green/green at 18.0.0-next.0. Version row left un-rewritten: RED/RED at all three. No permanent test was added; no ablation file mutation, since the diff changes an assertion, not a tested behaviour.",
    "gates": "Local, at 9e3c1a1 (git rev-parse --short HEAD), each exit captured before any pipe: pnpm changeset:check 0 (check-changeset-fixed ✅ + no-major '✅ Every major is the synchronized one'); pnpm check:changeset-claims 0; pnpm check:pending-changeset-literals 0; node scripts/check-changeset-presence.mjs 0 ('no changeset is owed'); node scripts/check-changeset-overwrite.mjs 0; pnpm check:new-line-citations 0 ('VERDICT ... 0 new citation(s)'); pnpm check:control-bytes 0; pnpm check:test-path-roots 0; pnpm check:pre-install-import-graph 0; pnpm quick-reference:check 0; node scripts/check-governed-queue-guard.mjs --test on both paths 0 ('NOT GOVERNED'); pnpm run type-check:scripts 0 (lock VERDICT command-exit 0; tsc --listFilesOnly lists the changed test, count 1); eslint on the changed test file 0. dispatch-gates.mjs not used (objectstack-only, per dispatch). PR #12401's TWO GATE EDITS: (1) check-changeset-no-major.mjs computed sync-major admission: NOT keyed on pre mode. The script reads no pre.json and no mode; its only pre clause, not reading .changeset/pre/, was its behaviour before #12401 too. KEPT: it is the maintainer's GA version-alignment rule (objectui#12030 ruling) and is needed again at the next major; it admits the sync major on the exited tree (changeset:check 0) and re-arms on the 18.0.0 tree (probe major EXIT 1, 18 to 19). (2) check-spec-range-floors.mjs prerelease-floor reader: NOT keyed on pre mode; it reads no changeset state, pre.json or mode, and its input is the ^18.0.0-next.N @objectstack ranges, which objectstack's prerelease line sets (its header says so), unchanged by the exit and by the GA render (0 range lines move). KEPT: also needed at publish whenever objectstack-floor computes a prerelease floor. Its pins pass on the exited tree and inside the post-version scripts/tests run. The live gate was NOT MEASURED: it needs a build of the floored packages, and its input is byte-identical across exit and render. HYPOTHESES: H1 holds with the count corrected: 857 consumed (the card's 860 = every entry under .changeset/ incl. README.md, config.json, pre.json); pre.json deleted. H2 falsified for both edits. H3 holds: Version row -> 18.0.0; the Spec/Client rows keep ^18.0.0-next.1 because they are the manifest-derived @objectstack ranges (correct); no objectui doc states objectui's own prerelease status. ORDER NOTE: node scripts/objectstack-floor.mjs --dry-run at pin f4755a68a7 EXIT 2: 'No published @objectstack/spec release contains the pin … the newest published release is 18.0.0-next.5' (npm dist-tags: latest 17.7.0, next 18.0.0-next.5). Git two legs in the full-history /home/user/objectstack (is-shallow false): merge-base --is-ancestor pin 820fd5aef0 (the next.5 tag commit) EXIT 1; control --is-ancestor 2c9bf9430a 820fd5aef0 (the next.3 tag commit, older than the pin) EXIT 0; next.5 commit is an ancestor of the pin, EXIT 0. So objectui 18.0.0 CANNOT publish before objectstack publishes a spec release whose tag contains the pin (in practice objectstack 18.0.0, objectstack#24524). The steps read npm versions + tags, not the latest dist-tag, so latest itself is not required. The floor is the EARLIEST such version by semver precedence: if 18.0.0 is the first, objectui ships ^18.0.0; if a containing 18.0.0-next.6 were published first, it would ship ^18.0.0-next.6 even after GA. Merging this PR publishes nothing (@object-ui/core@17.7.0 is on npm, the lane guard's predicate). CI on PR #13111 head 9e3c1a1 at report time: 34 check-runs, 10 success (Build Docs, Changeset Bump Policy, Changeset Claim Re-read, Changeset Declaration, Changeset Fixed Group Check, Changeset Overwrite Report, Governed Surface Queue Guard, Line Citation Gate, Test (dist pins), label), 3 skipped (Test (coverage), Test (coverage shard N/8), dependabot), 21 in_progress (Build & E2E, Lint, Live E2E (informational), Repo Gates, Type Check, Test (shard 1..16/16)). No CI wait, per contract. NOT MEASURED: the full pnpm test (CI's), changesets/action itself (a GitHub Action), the workflow's Build packages step before Validate, live check:spec-floors.",
    "mcp_calls": "0 — no MCP GitHub tool called",
    "api_writes": "2 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]: (1) pr_create, request fw-20261020T023059Z-308481, run 39359341760 conclusion success, sending POST /repos/objectstack-ai/objectui/pulls (draft #13111) and POST /repos//issues/13111/assignees [os-warren]; body read back 16341 bytes sent = 16341 stored, identical; assignees listed os-warren. (2) this os-dev-report comment via scripts/pm/post-stamped.mjs --repo=objectstack-ai/objectui, i.e. POST /repos//issues/13108/comments. Plus 3 git pushes (not REST): the empty-branch probe, fda18fc and 9e3c1a1. No label write, no card assignee write, no review request, no ready flip.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted, not filed — objectstack-floor.mjs floors at the EARLIEST published @objectstack/spec version whose tag contains the pin, by semver precedence, prereleases counted (by design, per its header 'Prereleases count'). A published 18.0.0-next.6 that contains the pin would floor objectui 18.0.0's published ranges at ^18.0.0-next.6 even after objectstack 18.0.0 GA. Recorded in PR #13111's order note as the maintainer's release-time call; not a defect.",
    "carrier: PR #13111 Acceptance notes · noted, not filed — release PR #11600 still renders 18.0.0-next.0 from a pre-mode tree. It must be refreshed (refresh_version_pr dispatch or the 6-hourly run) after #13111 merges, not merged as it stands. Merged stale after the exit, it would publish next.0 to next (getReleaseTag returns preState.tag while pre.json mode exit exists; reading of @changesets/cli 3.0.1 getPublishPlan.mjs, not measured), and the floor step would refuse that publish today anyway."
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    File-surface addendum to claim 6281363328 · objectui domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T02:39Z

    The dev's dry-run found that the one producer of the exited tree's red is a test: scripts/__tests__/sync-quick-reference-release.test.ts ('rewrites the Version row when the fixed group moves'). Its raw-substring not.toContain(anchors.version) false-reds once the group is at 18.0.0, because 18.0.0 is a prefix of the QUICK_REFERENCE Spec/Client rows' ^18.0.0-next.1. The dispatch said to fix the real producer and name it, and the dev did.

    This seat adds that test file to the claim's file surface:

    • The change compares whole literals with the script's own exported VERSION_LITERAL + normalize. That is the rule the 4143 gate's header states.
    • It is +7 / −1.
    • An in-process probe keeps it RED on an un-rewritten Version row at 17.7.0, 18.0.0 and 18.0.0-next.0.
    • It weakens no assertion.

    Nothing else widens.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 20, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · objectui domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T14:02Z

    reading result
    merge queue none left: the entry has drained
    PR object PR #13111 merged at 2026-10-20T14:01Z as cbc312d78b (not governed), on this seat's ACCEPT 6292366569, under the maintainer's ruling 6292098274
    objectui main, by content .changeset/pre.json (421211bc43, "mode": "exit") and scripts/__tests__/sync-quick-reference-release.test.ts (419277b54c) are byte-identical to the PR head 9e3c1a1408
    main checks at cbc312d78b the merge-group runs (CI, Lint, Repo Gates, Changeset Presence, Governed Surface Guard) are success. The push runs of CI, Lint and Repo Gates are in progress at this write. Changeset Release on push is success, and it neither publishes nor refreshes the version PR

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

    What is next, and whose it is. Release PR #11600 still reads "chore: release packages (next)" from its last render (2026-10-20T12:24Z). changeset-release.yml refreshes it on its 6-hourly schedule, or at once on a dispatch with refresh_version_pr. After the refresh it should render the fixed group at 18.0.0, not 18.0.0-next.0. The dispatch, the merge of #11600 and the npm publish are the maintainer's acts; this seat takes none of them. The pin move to 06cab4849a is #13261.


    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

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p1

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions