You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lane:domain:devx, not domain:spec. Under the lane-merge rule, root workspace, turbo and lockfile tooling are devx's. The spike lands nothing on main and touches no governed surface.
Maintainer-action: the maintainer releases #25677 for dispatch — done when a maintainer comment on #25677 or here says go
Claim: epic #25677 round 1
Session: session_01RSDL3SFtJaKzcymvCD8RsU
Account: os-tesla
Branch: claude/project-thread-dwhq6r (mode:thread — a project thread pushes only its designated branch)
Worktree: objectstack (the thread's own checkout)
Domain: domain:devx
Seat: epic:#25677
File surface: ui/** (new subtree), pnpm-workspace.yaml, pnpm-lock.yaml, patches/@radix-ui__react-focus-scope.patch — on the branch only; nothing lands on main from this card
Container & model: M, mode:thread, model: fable (reason: the maintainer placed this epic in the director's project thread, which runs at the ceiling — Tesla, 2026-10-24 15:17Z, verbatim 「这个任务建议什么时候开始处理,你负责」; dispatch-gates --tier --repo objectstack-ai/objectstack prints no path-derived mandate for the card's paths), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6386288327
Serial constraints cleared: none — ui/ does not exist on main, no open PR or claim touches the root workspace files, and the branch opens no PR.
Labels written in the same stroke: pm:epic + pm:dispatched on, pm:awaiting-maintainer off (maintainer-action done on #25677, 15:17Z 「你负责」), assignee os-tesla.
Branch:claude/project-thread-dwhq6r (pushed; no PR — see "not measured"). Four commits on top of the full objectui history: 2bc1807eae subtree add of objectui main0984c77 (#13445, pin already at the 18.1.0 release commit), ec74d9ecfa workspace wiring + single lockfile, 4f3149d015 one react type line, 3efb112efb Console Vite chunk tests made workspace-aware. Base: objectstack maindc6c7ee.
✓ exactly one zod literal (4.6.5) in vendor-objectstack-*.js
objectui vitest --project unit packages/core packages/i18n from ui/
270 files in 26 s; 3 files fail, all of one kind (rows 1 and 6 below)
full merge diff (dispatch-gates --tier on this branch)
9 267 paths, 2 589 924 changed lines — ⛔ OVER the 3 000-line human-merge threshold: the cutover PR is a Tier H landing (maintainer merge)
What the wiring commit does (reusable by the cutover script)
pnpm-workspace.yaml: add ui, ui/packages/*, ui/apps/*, ui/examples/*; carry objectui's security floor overrides (qs, shell-quote, tmp, uuid — dompurify already pinned here) and its @radix-ui/react-focus-scope@1.1.16 patch into root patches/.
ui/package.json: drop the pnpm field (seven file:.objectstack-pin/* pins and the react 19.2.8 pins) and the preinstall pin check.
32 objectui manifests: 40 "@objectstack/*": "^18.0.0-next.N" ranges → workspace:^ (publishes as ^<version>; one fixed group makes the floor the version itself). ui/packages/core/node_modules/@objectstack/spec now symlinks to packages/spec. The card asked for npm range + root overrides instead; workspace:^ was chosen because pnpm 10 only reads overrides from pnpm-workspace.yaml and the fixed-group ruling makes a floating range meaningless — either shape works mechanically.
Remove ui/pnpm-lock.yaml and ui/pnpm-workspace.yaml (nested roots are ignored); park ui/turbo.json as ui/turbo.objectui.json (a nested turbo.json without extends is a package-config error).
Findings for sub-issues 2–5
#
Finding
Evidence
Owner
1
Pin plumbing to delete: 191 objectstack files reference .objectui-sha/build-console.sh (7 workflows: ci, cut-rc, lint, release, scheduled-full-run-card, showcase-smoke, spec-shape-gate); 33 objectui files reference .objectstack-pin/.objectstack-sha (13 workflows); 12 objectui files implement a semver "spec floor" that workspace:^ voids — one unit test already fails on it
tsc heap:@object-ui/app-shell and the Console tsc OOM at the default ~2 GB heap; with 6 GB they use 2.3 GB (3 574 files, 1.15 M lines of .d.ts). Standalone objectui sat just under the default
build logs
2: NODE_OPTIONS=--max-old-space-size=4096 in those build scripts or CI
3
react line:@objectstack/client-react wants ^19.3.0, objectui pins 19.2.8 → two @types/react, plugin-view's d.ts build fails. Fixed in the spike by root overrides to 19.3.0
build log
2: bump objectui's 31 manifests in place
4
zod ranges: 5 objectui manifests declare ^4.4.3/^4.6.1, objectstack ^4.6.5; the lock holds 4.6.1 and 4.6.5 but the Console bundle carries one (canary passes)
lock + canary
2: align to ^4.6.5
5
Console Vite config matches @objectstack/* by node_modules path: workspace links resolve to <root>/packages/<name>/dist/…, so the vendor group test, the spec counter-probe and the lazy-linter guard all missed and the build failed. Fixed (+14 lines) by adding the workspace prefix; scripts/vite-objectstack-client-dist.ts carries the same assumption, unexercised
ui/apps/console/vite.config.ts
fixed; 2 checks the client-dist helper
6
"I am the repo root" assumption: 71 objectui files locate the root via .git / git rev-parse --show-toplevel / pnpm-workspace.yaml / find-up; merged, that is the objectstack root. One unit test already reads <root>/packages/core/... and fails
filter-icontains-alignment-8976.test.ts
2: one uiRoot() helper
7
turbo: nested ui/turbo.json cannot stay as is; task names differ (type-check vs typecheck, test:dist, lint); its globalDependencies point at .objectstack-sha
turbo 2.11
2: root turbo.json absorbs the ui tasks
8
Duplicated governance under ui/:.github (28 workflows), .claude (8 hooks vs 12 at root), .changeset (83 pending changesets + its own 40-package fixed group), AGENTS.md (630 lines vs 1 117), skills/, scripts/ (136 vs 288; lockfile-integrity/dedupe, bash32-floor, entry-guard duplicated by name)
pre-push hook refuses the imported history:check:commit-card-trailers judged 3 668 objectui commits (Fixes #n in messages). No bypass needed: git remote add objectui … && git fetch objectui main makes them "reachable from a remote-tracking ref", which the gate excludes by design. CI runs only the self-test, so the cutover PR is not red on this
hook output
5: write into the cutover script
10
Stale local main trap: the sibling objectui checkout's main was 28 commits behind; the first import used it and @object-ui/auth failed TS2741 on the external org role — the two-repo drift in miniature. The cutover script must take the sha from git ls-remote
first build log
5
11
liveness and lockstep: 34 liveness ledger files mention objectui; packages/sdui-parser/objectui-lockstep.json records "one objectui revision"
ls/grep
4: in-repo paths
12
install hooks: objectui's root preinstall pin check, setup and objectstack:build scripts are dead after the merge; preinstall removed in the spike
ui/package.json
2
Only remaining peer warning after install: objectstack's pre-existing ioredis-mock vs ioredis 6.
Not measured, and why
CI wall-clock for the three PR classes (ui/ only, packages/spec only, both): no PR was opened. A 2.59 M-line PR exists only to read CI, and it trips the Tier H changed-lines gate and every path-filtered workflow at once; the local readings above are the substitute. Sub-issue 2 measures CI on its own branch once path filters exist.
--squash variant: not run; the tree is identical, only commit metadata differs, and the ruling keeps history.
Full pnpm typecheck / pnpm test across ui/: blocked by finding 7 (task names) — ran the unit project for two packages instead.
Done when, checked: branch pushed ✓ · no PR ✓ · report on the card ✓ · nothing changed on main ✓.
Closing: done · 2026-10-27T14:10Z. The spike's done-when is met: the branch was pushed, no PR was opened, and the report is on this card (comment 6386424164). Its recipe went into the real import: objectui became ui/ in #25825 (merged 2026-10-25 22:51Z), and the readiness, wiring and release-lane work it fed landed as #25685, #25723, #25710, #25738 and #25745. Nothing from this card remains open. The spike branch claude/project-thread-dwhq6r is history only; nothing reads it.
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
tooling·priority:p1·domain:devx·area:devpath·pm:awaiting-maintainer· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T15:53Z⛔ Not a claim, ⛔ not a dispatch.
ui/workspace:D1 裁定(A+)的执行父单 — 一个 PR 同时改 spec 与渲染器,删除两仓互钉,@object-ui 保留包名并与 @objectstack 同一版本组,objectui 仓归档为迁移说明 #25677, on the maintainer's instruction 「…那个改为等待维护者处理。」 (quoted there). When the maintainer releases it, this card returns topm:queuefirst; it is the only sub-card with noBlocked-by:.domain:devx, notdomain:spec. Under the lane-merge rule, root workspace, turbo and lockfile tooling are devx's. The spike lands nothing onmainand touches no governed surface.Maintainer-action: the maintainer releases #25677 for dispatch — done when a maintainer comment on #25677 or here says go
Generated by Claude Code
objectstack-fleet commentedon Oct 24, 2026
Claim: epic #25677 round 1
Session:
session_01RSDL3SFtJaKzcymvCD8RsUAccount:
os-teslaBranch:
claude/project-thread-dwhq6r(mode:thread — a project thread pushes only its designated branch)Worktree:
objectstack(the thread's own checkout)Domain:
domain:devxSeat:
epic:#25677File surface:
ui/**(new subtree),pnpm-workspace.yaml,pnpm-lock.yaml,patches/@radix-ui__react-focus-scope.patch— on the branch only; nothing lands onmainfrom this cardContainer & model: M,
mode:thread,model: fable(reason: the maintainer placed this epic in the director's project thread, which runs at the ceiling — Tesla, 2026-10-24 15:17Z, verbatim 「这个任务建议什么时候开始处理,你负责」;dispatch-gates --tier --repo objectstack-ai/objectstackprints no path-derived mandate for the card's paths),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6386288327
Serial constraints cleared: none —
ui/does not exist onmain, no open PR or claim touches the root workspace files, and the branch opens no PR.Labels written in the same stroke:
pm:epic+pm:dispatchedon,pm:awaiting-maintaineroff (maintainer-action done on #25677, 15:17Z 「你负责」), assigneeos-tesla.Generated by Claude Code
objectstack-fleet commentedon Oct 24, 2026
Report: subtree spike — feasible, 12 mechanical findings, no architectural blocker ·
session_01RSDL3SFtJaKzcymvCD8RsU· 2026-10-24T16:06ZBranch:
claude/project-thread-dwhq6r(pushed; no PR — see "not measured"). Four commits on top of the full objectui history:2bc1807eaesubtree add of objectuimain0984c77 (#13445, pin already at the 18.1.0 release commit),ec74d9ecfaworkspace wiring + single lockfile,4f3149d015one react type line,3efb112efbConsole Vite chunk tests made workspace-aware. Base: objectstackmaindc6c7ee.维护者速读
可行,没有架构级障碍。objectui 全历史并入
ui/2 秒、0 文件冲突;单 lockfile 一次装通(1 分 12 秒);Console 及 72 个依赖包能通过根 turbo 构建,产物通过本仓的"单 zod 金丝雀";objectui 单测在合并后的根下能跑。要在正式切换前做掉的 12 项都是机械性的(下表),其中 3 项 spike 里已顺手修了。两个要你知道的数:Console/app-shell 的 tsc 需要 ≥4 GB 堆;正式切换 PR 有 259 万行变更,按 Tier H 规则只能由维护者人工合并。建议直接进子卡 2。完整中文报告:项目库d1-merge/spike-report.md。Measurements
git fetch --unshallow)git subtree add --prefix=ui(history kept, no--squash)ui/)ui/source size (no node_modules)pnpm install(cold store, not frozen)pnpm-lock.yamlturbo run build --filter='@object-ui/console^...'(72 packages, cold, 4 vCPU)pnpm --filter @object-ui/console buildNODE_OPTIONS=--max-old-space-size=6144; dist 64 MB, 2 376 chunksscripts/build-console.sh --check-single-zod ui/apps/console/dist/assetsvendor-objectstack-*.js--project unit packages/core packages/i18nfromui/dispatch-gates --tieron this branch)What the wiring commit does (reusable by the cutover script)
pnpm-workspace.yaml: addui,ui/packages/*,ui/apps/*,ui/examples/*; carry objectui's security floor overrides (qs, shell-quote, tmp, uuid — dompurify already pinned here) and its@radix-ui/react-focus-scope@1.1.16patch into rootpatches/.ui/package.json: drop thepnpmfield (sevenfile:.objectstack-pin/*pins and the react 19.2.8 pins) and thepreinstallpin check."@objectstack/*": "^18.0.0-next.N"ranges →workspace:^(publishes as^<version>; one fixed group makes the floor the version itself).ui/packages/core/node_modules/@objectstack/specnow symlinks topackages/spec. The card asked for npm range + root overrides instead;workspace:^was chosen because pnpm 10 only readsoverridesfrompnpm-workspace.yamland the fixed-group ruling makes a floating range meaningless — either shape works mechanically.ui/pnpm-lock.yamlandui/pnpm-workspace.yaml(nested roots are ignored); parkui/turbo.jsonasui/turbo.objectui.json(a nestedturbo.jsonwithoutextendsis a package-config error).Findings for sub-issues 2–5
.objectui-sha/build-console.sh(7 workflows: ci, cut-rc, lint, release, scheduled-full-run-card, showcase-smoke, spec-shape-gate); 33 objectui files reference.objectstack-pin/.objectstack-sha(13 workflows); 12 objectui files implement a semver "spec floor" thatworkspace:^voids — one unit test already fails on itnormalize-list-view.declaredSpecFloor-9012.test.ts@object-ui/app-shelland the ConsoletscOOM at the default ~2 GB heap; with 6 GB they use 2.3 GB (3 574 files, 1.15 M lines of.d.ts). Standalone objectui sat just under the defaultNODE_OPTIONS=--max-old-space-size=4096in those build scripts or CI@objectstack/client-reactwants ^19.3.0, objectui pins 19.2.8 → two@types/react,plugin-view's d.ts build fails. Fixed in the spike by root overrides to 19.3.0@objectstack/*by node_modules path: workspace links resolve to<root>/packages/<name>/dist/…, so the vendor group test, the spec counter-probe and the lazy-linter guard all missed and the build failed. Fixed (+14 lines) by adding the workspace prefix;scripts/vite-objectstack-client-dist.tscarries the same assumption, unexercisedui/apps/console/vite.config.ts.git/git rev-parse --show-toplevel/pnpm-workspace.yaml/ find-up; merged, that is the objectstack root. One unit test already reads<root>/packages/core/...and failsfilter-icontains-alignment-8976.test.tsuiRoot()helperui/turbo.jsoncannot stay as is; task names differ (type-checkvstypecheck,test:dist,lint); itsglobalDependenciespoint at.objectstack-shaturbo.jsonabsorbs the ui tasksui/:.github(28 workflows),.claude(8 hooks vs 12 at root),.changeset(83 pending changesets + its own 40-package fixed group),AGENTS.md(630 lines vs 1 117),skills/,scripts/(136 vs 288; lockfile-integrity/dedupe, bash32-floor, entry-guard duplicated by name)check:commit-card-trailersjudged 3 668 objectui commits (Fixes #nin messages). No bypass needed:git remote add objectui … && git fetch objectui mainmakes them "reachable from a remote-tracking ref", which the gate excludes by design. CI runs only the self-test, so the cutover PR is not red on thismaintrap: the sibling objectui checkout'smainwas 28 commits behind; the first import used it and@object-ui/authfailed TS2741 on theexternalorg role — the two-repo drift in miniature. The cutover script must take the sha fromgit ls-remotepackages/sdui-parser/objectui-lockstep.jsonrecords "one objectui revision"preinstallpin check,setupandobjectstack:buildscripts are dead after the merge;preinstallremoved in the spikeui/package.jsonOnly remaining peer warning after install: objectstack's pre-existing
ioredis-mockvs ioredis 6.Not measured, and why
ui/only,packages/speconly, both): no PR was opened. A 2.59 M-line PR exists only to read CI, and it trips the Tier H changed-lines gate and every path-filtered workflow at once; the local readings above are the substitute. Sub-issue 2 measures CI on its own branch once path filters exist.--squashvariant: not run; the tree is identical, only commit metadata differs, and the ruling keeps history.pnpm typecheck/pnpm testacrossui/: blocked by finding 7 (task names) — ran the unit project for two packages instead.Done when, checked: branch pushed ✓ · no PR ✓ · report on the card ✓ · nothing changed on
main✓.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Closing: done · 2026-10-27T14:10Z. The spike's done-when is met: the branch was pushed, no PR was opened, and the report is on this card (comment 6386424164). Its recipe went into the real import: objectui became
ui/in #25825 (merged 2026-10-25 22:51Z), and the readiness, wiring and release-lane work it fed landed as #25685, #25723, #25710, #25738 and #25745. Nothing from this card remains open. The spike branchclaude/project-thread-dwhq6ris history only; nothing reads it.