Skip to content

aftercare(ui-merge): move the 65 travelled ui/.changeset files into the root .changeset so the first post-cutover Version PR bumps @object-ui/* (parent #25677, before #25753) #25831

Closed

Description

@objectstack-fleet

Filing gate ③ + ④: post-cutover card of the epic #25677 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU). Part of #25677. Blocked-by: #25752 (the cutover PR #25825 must be on main first). Must land before the first post-cutover Version PR is merged (#25753 scope 1), so it is dispatched the moment the cutover lands.

谁付代价(业务筛): the root .changeset/config.json reads .changeset/ only. objectui's 65 pending changesets travelled with the subtree and sit under ui/.changeset/, where changeset version never sees them: the first joint Version PR would bump the @objectstack/* side and leave every @object-ui/* package at 18.1.0 with its CHANGELOG missing the 65 entries. #25753's acceptance ("both scopes at one version, 39 @object-ui/* published") cannot pass without this; objectui's downstream users get no release from the merged repo until it does.

维护者速读

objectui 带过来的 65 个 changeset 文件还在 ui/.changeset/,根目录的 changesets 配置不读那里。切换后第一个 Version PR 之前要把它们搬到根 .changeset/,顺手处理根门禁在这 65 个文件上的三处红:3 个空 changeset、#13526 同名文件冲突、ADR-0087 标记行。J 的 22 号补丁是量过的起点(未贴到切换分支,见 SERIES.md)。不新增决策:PM 裁决 39(b)(2026-10-25 17:16Z)定了「切换时留在 ui/,首个 Version PR 前搬家」。

Inputs (read first)

  • Ruling 39(b) and the measurements: /mnt/project-files/d1-merge/out/5-cutover-bill-notes.md item 39 + amendments; /mnt/project-files/d1-merge/out/cutover-adaptation/SERIES.md (patch 22-*.patch, "kept as aftercare input, not applied", with the three root-gate reds it measured: the ADR-0087 marker line from objectui#13450, three empty changesets refused by the root empty-changeset gate, and the 13526 basename collision with a root changeset).
  • Root changeset gates: scripts/check-changeset-fixed.mjs (counts public members; object-ui private, 4a adds PRIVATE_FIXED_MEMBERS), check-changeset-no-major, the empty-changeset and polarity gates named in SERIES.md, and check:lockstep-package-count (111 after 4a's runner exclusion).
  • The fixed group after 4a release(ui-merge): one release lane for both scopes — @object-ui joins the fixed group, @objectstack/console builds from ui/apps/console, the objectui pin is deleted (#25711) #25745 lands: one fixed[0] with both scopes; ignore = example-*, site, runner, test-support.

What to do

  1. git mv the 65 files from ui/.changeset/ to .changeset/ (keep ui/.changeset/README.md only if something under ui/ still reads it; otherwise delete the directory). Start from patch 22, rebased on main after the cutover + 4a.
  2. The three empty changesets: give each the one-line summary its originating objectui PR title states, or delete it with the PR number in the commit body if the change is already described by another file of the same PR. ⛔ Do not leave an empty file (root gate refuses it).
  3. The #13526 basename collision: rename the travelled file (<name>-objectui.md), content unchanged.
  4. The ADR-0087 marker line (objectui#13450): keep the sentence, respell the reference to the merged repo's ADR path if the root check:adr-anchors gate refuses the objectui-form anchor; record the before/after.
  5. pnpm changeset status --verbose on the result: every @object-ui/* public package listed with its bump; node scripts/check-changeset-fixed.mjs 0; check-changeset-no-major 0; the full root changeset gate family from lint.yml 0.

Acceptance

  • ls .changeset/*.md | wc -l = root count + 65 − deletions (state the arithmetic); ui/.changeset/ gone or README-only.
  • pnpm changeset status names both scopes; all changeset gates in lint.yml exit 0; the derived gate list for the diff (node scripts/pm/dispatch-gates.mjs --commands) exits 0.
  • PR body quotes the three resolutions (empty ×3, collision, marker) with the file names.

Size: S (mechanical, measured once by patch 22). Clause-②: no. Metadata-protocol: none. Responsibility: n/a — epic step.

风险

Dedupe

Epic family only: #25753 (6/6) covers the release itself and names this gap as a prerequisite; #25803 (J) measured the move as patch 22 and kept it unapplied by ruling 39(b). New as a card.

Activity

  1. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Input from the cutover branch, 2026-10-25 19:19Z (PM, epic #25677 child 5).

    Card 4a (#25745) measured the move of the 65 ui/.changeset/*.md to the root .changeset/ on cutover head c04b36d + 4a, running the dispatch-gates family for the moved paths with --base = the cutover head (30 commands). 28 exit 0, 2 exit 1:

    • check-empty-changeset: exit 1 on 3 files (the 25723, 25733 and 25763 changesets).
    • check-adr-0087-registration: exit 1 on 41 changesets, not the 1 that the adaptation series predicted. Examples: 13449, 13450, 13453 (×4), the 22 13465-react-peer-* files, 13476. Each is a breaking change with no adr-0087: disposition line.

    Writing 41 ADR-0087 dispositions is a protocol-ledger judgment, so 4a dropped the move (its README step 1) and the files stay under ui/.changeset/ at cutover. 4a still deletes ui/.changeset/config.json, because changesets reads only the root config.

    So this card's work is: move the 65 files (keeping the ui- prefix on the one that collides with react-pages-default-off), fill or empty-out the 3 empty ones, write the 41 dispositions, then rerun the same dispatch-gates family on the result. The adaptation series patch 22 at /mnt/project-files/d1-merge/out/cutover-adaptation/ is a starting point for the move itself.

    Must land before the first post-cutover Version PR.

    维护者速读:4a 选了 (b),changesets 不随 cutover 搬到根目录;本卡要补 41 条 ADR-0087 处置 + 3 个空 changeset。

  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Re-scoped by maintainer ruling (Tesla, 2026-10-25 22:38Z, item 28 = B).

    This card no longer moves the 65 ui/.changeset/*.md files. Instead it adds ONE consolidated changeset at the root:

    Done when: check-changeset-no-major, check-empty-changeset, check-adr-0087-registration and check-changeset-fixed exit 0 on the tree; pnpm changeset version --dry-run shows the 38 @object-ui/* packages moving with the group. Still must land before the first post-cutover Version PR (#25753).

    The earlier comment's 41-disposition list stays as the input for the five paragraphs and the summary; option A (full move, 41 one-line markers) was offered back to the maintainer and is open only if he switches the ruling.

    维护者速读:按 28 B 执行:一条合并 changeset(38 个 @object-ui 包 minor,5 个 ! 提交各一段带 adr-0087 标记,其余按提交区间汇总),原 65 条留在 ui/.changeset 作历史。

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 aftercare (child of the epic; unblocked by #25752 closing 2026-10-26 07:50Z; gates the joint 18.2.0 Version PR #25753) 2026-10-26T10:32Z
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: claude/project-thread-sefzdx (the card thread's designated branch in objectstack-ai/objectstack — the thread can push only this branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25831
    Domain: domain:devx
    Seat: epic:#25677
    Scope: the card as re-scoped by maintainer ruling item 28 = B (comment 6404422838): ONE consolidated root changeset naming every public @object-ui/* package in the fixed group (38) as minor; the five ! commits of the objectui 18.1.0 → freeze range each get a paragraph with exactly one ADR-0087 disposition marker; the rest summarised by commit range with objectui PR numbers; the 65 originals stay under ui/.changeset/ as history. Done when check-changeset-no-major, check-empty-changeset, check-adr-0087-registration and check-changeset-fixed exit 0 and pnpm changeset version --dry-run moves the 38 @object-ui/* packages with the group
    Why now: changesets reads only the root .changeset/, so until this lands a Version PR would leave every @object-ui/* package at 18.1.0 and the first joint release (#25753, expected 18.2.0) cannot be cut
    Container & model: S, mode:thread (thread session session_0119jY1rheeWvbYGGbLXr6sL; order: this card's body plus comment 6404422838, FRAME.md applies), model: opus, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — epic step
    Thread-read: none
    Serial constraints cleared: #25832 (skills move, parallel seat) touches no .changeset/ path; ⛔ do not move or edit the 65 ui/.changeset/*.md; ⛔ no major. Tier S expected (one new .changeset/*.md): the PR stops at draft; report the derived gates and the push-environment battery (GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs, 2182/0) before the PM flips ready

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim amendment (PM, epic #25677) 2026-10-26T10:37Z — supersedes two lines of the Claim 6413883349 and records how ruling 28 = B is executed.

    Clause-②: yes (narrowing)
    Metadata-protocol: narrowed

    Why: the consolidated changeset ships the objectui 18.1.0 → freeze range, which retires and adds @object-ui/* surfaces. A minor beside Metadata-protocol: none is refused by Check Changeset, so the Claim's original no / none lines were wrong for this content.

    Execution of ruling 28 = B (the seat's measurement on main bbf70614, PM accepts option A):

    • check-adr-0087-registration accepts exactly ONE disposition marker per changeset file (a five-marker probe exits 1, self-test R9). Every mechanical category compares merge-base with HEAD, and the five retirements are already on main, so the only admissible category here is not-required (no-migration-prescription), which refuses an inline FROM/TO table.
    • Therefore: ONE root changeset, **BREAKING**, five paragraphs (one per ! commit) naming what each retired and who it reaches, each pointing at its original ui/.changeset/*.md and objectui PR for the migration table, and ONE marker whose reason covers all five.
    • This keeps the ruling's shape (one consolidated changeset, five paragraphs, the 65 originals left as history). The only change is one marker instead of five, because the gate requires it. It is not a new direction; if the maintainer wants per-break markers, that is option B (six files) and can be reopened on this card.
  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25831,
      "status": "done",
      "branch": "claude/project-thread-sefzdx",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26068",
      "session": "session_0119jY1rheeWvbYGGbLXr6sL",
      "premise_still_valid": true,
      "summary": "One root changeset .changeset/25831-object-ui-18-1-to-merge.md names the 38 public @object-ui/* fixed-group packages as minor. Body: a BREAKING lead for objectui a3c0da9 (18.1.0 release) .. 9e1fe03 (freeze); one paragraph per ! commit (PRs #13475, #13473, #13506, #13507, #13515), each pointing at its original ui/.changeset file for the migration table; a summary of the other PRs with objectui numbers. ONE adr-0087 not-required (no-migration-prescription) marker, per Claim amendment 6413971007 (the gate takes one marker per file; base-relative categories cannot apply because the retirements are already on main). The 65 ui/.changeset originals are untouched. Declarations: Clause-②: yes (narrowing) / Metadata-protocol: narrowed in the changeset and PR body.",
      "tests": "No code moved. pnpm changeset status --verbose --since origin/main: 112 fixed members to 18.2.0, the 38 @object-ui/* citing this file. changesets v3.0.3 has no version --dry-run, so pnpm changeset version ran on a scratch state at 213e4d2b (head differs only by moving the two declaration lines to the end) and was reset: 38 public @object-ui/* manifests at 18.2.0, ui/packages/core/CHANGELOG.md gains the entry, 337 files touched. Probe: a five-marker changeset exits 1 in check-adr-0087-registration (R9).",
      "gates": "Local at 0329dd0514: dispatch-gates --commands derived 20, all exit 0; --ran reconciliation 20 derived / 20 run / 0 NOT-MEASURED. check-changeset-no-major --event with this PR body: exit 0 (LEVEL AXIS green); with no/none: exit 1. check-changeset-fixed: exit 0 (111 public + 1 private). Push-environment battery GITHUB_ACTIONS=true GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs: 2182/0 (fast 1917, slow 265), EXIT=0, 1276 s. PR check-runs on 0329dd0514: 39, all success or skipped, incl. Lint & Repo Gates, TypeScript Type Check, Test Core, Check Changeset, Governed Surface Queue Guard success; Build Core, Lint UI, Type Check UI, Build & E2E UI skipped by the path filter.",
      "dogfood_battery": "NOT MEASURED: the Clause-② line carries the (narrowing) arm, but the diff is one .changeset file and moves no package source; CI Dogfood Regression Gate success (path-skipped shards). Seat to decide if a full run is owed.",
      "mcp_calls": "4 read calls (issue_read x2, pull_request_read get_check_runs, subscribe_pr_activity); no MCP write tool",
      "api_writes": "1 relay stroke: pr_create objectstack-ai/objectstack#26068 (run 40311437006) + this post-stamped comment",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    PM note on #26068 2026-10-26T11:19Z: the full dogfood run that os-dev owes on a (narrowing) arm is not owed for this PR. The diff is one .changeset/*.md file (+79/−0). It changes no code, and nothing it describes is new on main: the five retirements it records landed earlier, and the scheduled and push full batteries ran Dogfood Regression Gate against them. A dogfood run on this head would exercise the same tree as main. The NOT MEASURED line in the report stands with this reason. Flipping ready with automerge (Tier S: one changeset file, CI green, push battery 2182/0, derived gates 20/20).

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Pointer from devx seat 1 (#6023), carried from #25920 (closed). The maintainer's ruling there was 「全按推荐」, 2026-10-26 14:51Z.

    When this card moves ui's pending changesets into the root .changeset/, also re-decide ui/scripts/check-pending-changeset-literals.mjs. Today it reads ui/.changeset/. After the move, either delete it or point it at the root .changeset/, so it doesn't pass vacuously over an empty directory. ⛔ Not a claim.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions