Skip to content

cutover(ui-merge): build the cutover PR adaptation commit as a measured patch series against the verify tree — lock splice, ui/ manifests, gate ledgers, skills move, decisions C/F/G1, bill items 1–32 (parent #25677, #25752 step 4) #25803

Closed

Description

@objectstack-fleet

Filing gate ③ + ④: pre-cutover card of the epic #25677 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU). Part of #25677. This is step 4's "commit 2" of #25752, split out so a dev seat builds and measures it while the epic PM runs the freeze, the pin bump and the verify refresh in parallel. Deliverable = a patch series the epic PM applies onto the cutover branch, not a PR of its own.

谁付代价(业务筛): the cutover PR (git subtree add --prefix=ui + one adaptation commit) must read green class-for-class with the last verify run, and the maintainer merges it by hand in one sitting (proposed 2026-10-26 09:00Z). Every adaptation item left out is a red gate in that PR's CI that the maintainer sees and the seat has to explain live; the verify branch #25718 measured each of them over 11 runs (bill items 1–32). Building the series now, in parallel with the freeze, is what lets the sitting happen tomorrow instead of a day later.

维护者速读

切换 PR 的第二个提交(适配提交)交给一个席位先做成补丁序列并在合并布局上测量,PM 在冻结后把它贴到切换分支上。内容全部来自验证分支 11 轮的账单(1–32 项)和你已裁的 C/F/G1。不新增决策。

Inputs (read first)

What to produce

A patch series under /mnt/project-files/d1-merge/out/cutover-adaptation/ — numbered NN-<slug>.patch (git format-patch output, one logical item per patch), a SERIES.md listing each patch with: bill item(s) / decision it implements, files, the gate it clears, the before/after measurement on the merged layout, and whether it is root-side (applies at the repo root) or ui-side (applies with git apply --directory=ui against objectui main). Root-side and ui-side patches in separate number ranges. The epic PM applies the series onto the cutover branch after the subtree refresh, so every patch must apply with git am --3way on 9e37acd + the series before it.

Items (from #25752 step 4; measurement wins over the wording here):

  1. lockfile: scripts/ui-import/splice-lockfile.mjs then pnpm dedupe (5a, items 6/16/28: exact @ai-sdk/react 4.0.121 AND exact ai 7.0.118, one lock copy each); root pnpm-workspace.yaml overrides scoped so objectui's dependency lines are not rewritten (react-router 7, happy-dom 21). ⛔ never re-run splice-lockfile.mjs --out on a spliced base (item 8). Note the lock is the one patch that must be REBUILT on the frozen objectui main, so deliver it as a recipe (commands + expected pnpm dedupe --check output) as well as a patch.
  2. ui/ manifests: every @objectstack/* dependency workspace:^; ui/package.json whole-suite test script dropped (item 4); ui/turbo.json parked as turbo.objectui.json; QUICK_REFERENCE rows on workspace:^ (coordinate with 4a's patch: only rows 4a does not touch).
  3. gates: check-type-check-coverage.mjs accepts objectui's type-check spelling for members under ui/, remaining findings get ledger rows (item 1); check:lockfile-integrity per-package verdict and check:lockfile-dedupe from the workspace root (items 6/7); root build filter !./ui/apps/site if still needed after A2 (item 3).
  4. census: packages/client/src/envelope-caller-census.test.ts — OBJECTUI_CENSUS constant becomes a live LEDGER row for ui/packages/data-objectstack/src/index.ts (analytics.query, production consumer), count 28 → 29 (item 17).
  5. skills catalog: ui/skills/objectui → root skills/ (decision C, item 18) — ⛔ skills/** is Tier H; keep this as its own patch and flag it in SERIES.md.
  6. decisions carried: root eslint.config.mjs global ignores gains ui/** with the config's own census comment (G1, item 25); check:test-source-alias vitest-alias half scoped to non-ui/ members (F, item 21d; the clocked half is already fixed by tooling(test-source-alias): a type reference or literal text is not a clocked load #25781); check:dts-closure expands * subpath patterns against dist (item 22); scripts/js-comment-mask.mjs stops reading JSX text as a comment opener, pinned self-test (item 23); check:adr-anchors allowlist rows for the ui/**/CHANGELOG.md ADR-0075 lines (item 19); check:undeclared-dep-imports ledger row for ui/apps/console/src with the bundled-SPA evidence (item 20); watch-hint / population declarations list ui/** (item 21a: check:tier-file-adoption, check:turbo-task-graph, check:workspace-manifest-cycles, check:merge-driver, check:cross-package-test-inputs, check:published-files floor, check-closing-keyword-parity ui parsers); ui/.objectstack-pin/** deleted (item 21b); check:agent-test-spelling COUNTER_EXAMPLE_FILES gains { path: 'ui/AGENTS.md', reason } (item 21c amendment); scripts/partition-test-shards.mjs excludes members under ui/ (run 4 note, with item 2 above).
  7. Anything else the merged-layout gates print that is not in the accepted-red-classes list of cutover(ui-merge): the switch itself — freeze both repos, git subtree add objectui as ui/ with its adaptation commit, land 4a / PR B / 4b PR 2 in order, migrate open objectui branches and cards, archive the objectui repo (parent #25677, 5/6) #25752: measure, fix if mechanical, otherwise list it in SERIES.md as a new class for the epic PM to rule.

Acceptance

Size: L (many small mechanical items, each measured). Clause-②: no. Metadata-protocol: none. Responsibility: n/a — epic step.

风险

Dedupe

The epic's family only (#25752 step 4 is this work; #25753 aftercare takes what is not needed for the sitting). New as a card: the procedure card deliberately kept the adaptation commit for the seat; it is split out now for parallelism under the maintainer's 13:39Z freeze ruling.

Activity

  1. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01CUXv64KLMfYv3ia2sWi6te
    Account: os-tesla (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-vmrkwz
    Worktree: objectstack-issue-25803
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: patch series only (no PR): root gates/ledgers/config named in the card items 1–7, ui/ manifests and skills move as separate patches, lock recipe (stop on breach; explain in the report)
    Container & model: L, mode:thread, model: opus (default judgment tier), effort: xhigh
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — epic step (#25752 step 4, commit 2)
    Thread-read: none
    Premise: holds — verify tree 9e37acd is the measured base; bill items 1–32 name every item
    Serial constraints cleared: 4a #25745's ui patch surface (QUICK_REFERENCE release rows, sync script, ui/.github/workflows) is excluded; the verify branch is read-only; no PR is opened by this card
    Resume-from: none

    Dispatched by the epic seat (session_01RSDL3SFtJaKzcymvCD8RsU) under the pm-dispatch frame; order: /mnt/project-files/d1-merge/dispatch/J-25803-cutover-adaptation-series.md. Part of #25677.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Card J: drop 2 of 2 delivered, 2026-10-25T17:13Z

    This is a patch series for the cutover PR #25825, not a PR of its own. The base is claude/project-thread-dwhq6r at 1c0d02e. The files are in the project workspace under d1-merge/out/cutover-adaptation/, and SERIES.md there is the full record: apply order, per-patch before/after and the drop 1 rows.

    Root patches 02–22 apply with git am --3way; ui patches 54–57 add --directory=ui. On a fresh worktree at 1c0d02e, patches 02–21 and 54–57 apply cleanly and give exactly the measured tree. Patch 22 passes git apply --check, but it has not been run (see below).

    # side item gate before → after
    02 root G1 root lint (ui/** left to Lint UI) → 0
    03–09, 15, 16 root bill 19–21 agent-test-spelling, adr-anchors, undeclared-dep-imports, four population declarations, merge driver, cross-package-test-inputs, closing-keyword-parity, pnpm-flag-spellings, manifest-repository-directory each 1 → 0
    10 root bill 1 type-check-coverage (ui/ type-check spelling) 1 (490) → 0
    11 root F test-source-alias 1 → 0
    12 root bill 22 dts-closure (subpath patterns) 1 → 0 (119-task build)
    13 root bill 17 envelope census 28 → 29 3 failed → 21/21
    14 root bill 23 comment-mask corpus (JSX text) 1 file disagrees → 0
    17 root K1 published-files 1 → 0
    18 root README step 6 happy-dom comment (optional) 0 → 0
    19 root Tier H, C skills move skill gates 0 → 0
    20 root item 38 check:pm-dispatch-gates fast tier 1 of 1917 failed → 1917 pass
    21 root item 39(a), 4a's text byte for byte check-changeset-fixed / lockstep-package-count 1 → 1 / 0 → 1
    22 root item 39(b) 65 ui changesets to the root .changeset/ not measured
    54–56 ui bill 2, 21(b) pin snapshot delete, repository retarget, QUICK_REFERENCE command rows quick-reference-commands-4149 passes
    57 ui item 37 lazy-node pin 6 → 5 2 failed → 314/314

    Gate sweep on the result.

    • ui scripts/__tests__ has 15 failures, all in accepted classes: the pin class (7, plus the lockfile-integrity file, which fails as a whole), and 4a's QUICK_REFERENCE release-sync (8, which is 4a's surface).
    • doc-json-fences, skill-examples, ui type-check:scripts and the package type-checks all exit 0.

    Open for the epic PM:

    • Item 39(a): main's two gates stay red with 4a's text. object-ui is private, so main's check-changeset-fixed calls it missing, and the lockstep count reads 112 against 111. 4a's own script edits are what make both 0. A probe without object-ui gives 0 on both.
    • Item 39(b): written but not run. Patch 22 was not applied locally. One file is renamed, 13526-react-pages-default-off.md, because its basename collides with the root's file of the same name. Reading the gate rules, I expect check-empty-changeset to fail on 3 changesets with empty frontmatter, and check-adr-0087-registration on 1 BREAKING changeset with no marker. I have not run either gate.
    • 4a overlap. Merging the result with 4a 9a776c6 conflicts in one file, scripts/ui-import/README.md.
  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Card J: series complete, 2026-10-25T18:21Z

    All three drops are on the cutover branch claude/project-thread-dwhq6r (#25825); run 4's head is c04b36d. The full record (apply order, per-patch before/after, measurements, rulings) is SERIES.md in the project workspace under d1-merge/out/cutover-adaptation/. This card opened no PR.

    patches item state on the branch
    01, 51–53 + lock recipe (drop 1) ui workspace deps, nested root, turbo scripts, splice script applied
    02–18, 54–56 (drop 2) bill 1, 2, 17, 19–23, 25, 34 (K1), decision F, README step 6 applied
    19 (Tier H, skills move) decision C applied, then reverted (3ee2fbc); decision C becomes its own card after the import
    57, 20, 21 (drop 2) items 37, 38, 39(a) applied
    22 item 39(b), 65 ui changesets not applied; input for the aftercare card
    58–60, 23 (drop 3) item 40, OSV: wait-on ^9.5.1, shadcn ^4.22.1, next 16.4.1, three root overrides, recomputed lock applied; pnpm audit 28 → 1 (main's own @azure/msal-node), dedupe --check 0, frozen install 0
    24 (drop 3) item 44, respin of 13 applied; census 28 walked + 1 recorded = 29, check-ci-filter-parity and self-test 0
    25 (drop 3) item 43, companion of 11 applied; bare-root-worklist REFUSE-WIDE row, self-test 0
    61 (drop 3) pin class applied; ui objectstack-pin, ci-cd-pipeline-doc and lockfile-integrity tests assert the merged workspace, 138/138
    62 pin class (claims-gate delete) not applied; it collides with 4a, which deletes the whole pin class at the sitting

    The PM's own commits beside the series: cba73d0 (item 39 follow-up), 0b8ae93 (item 18, metadata.internal on the objectui skill bundle), d2342a1 and c04b36d (item 45), 1180de6 (item 46).

    Left for 4a: 12 Test UI reds, QUICK_REFERENCE ×8 and the claims test ×4. Two notes for the 4a apply, both read from its patch and not measured with 4a applied:

    • 4a's removal of the claims-test row in markdown-test-inputs.mjs probably reds "EVERY tracked markdown document is an input" for ui/.github/pull_request_template.md. That row is the file's only reader.
    • 4a still applies cleanly on the run-4 tree (git apply --check --directory=ui).
  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Epic PM audit (#25677 step 4): card J complete. Drops 1–3 are on the cutover branch (claude/project-thread-dwhq6r, head c04b36d = run 4 of #25825); SERIES.md "Final state on the cutover branch" maps every patch to its commit, 19 reverted (decision C → its own aftercare card), 22 and 62 kept as aftercare input. Closing as completed; no PR was part of this card by design.

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions