Repository navigation
tooling(objectui-readiness 3): objectui compiles against objectstack main HEAD — bump .objectstack-sha past the spec commits since e649c2d91e, fix the fallout (TranslationPreview TS1360), repeat until cutover (parent #25677, 2c/6) #25727
Description
Filing gate ④: sub-issue 2c/6 of the epic #25677 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU). Part of #25677. ⛔ Not a claim. Measured on the DO NOT MERGE verification PR #25718, run 2 (40145825496, head 1a76fa5).
Why. objectui main pins objectstack by commit in .objectstack-sha = e649c2d91e; objectstack main was 13 spec commits past it on 2026-10-25 and widens every hour. The merged tree compiles the Console against packages/spec at HEAD, not a pin — that is the property the merge exists to give us, and it also means every spec change made since objectui's pin becomes a build error the moment the subtree lands. Run 2 showed the first one: with the nested-turbo race fixed, the root turbo run build ran 117 tasks in 11m54s and the only red was @object-ui/app-shell#build: src/views/metadata-admin/previews/TranslationPreview.tsx(99,3) TS1360 — the record of metadata kinds lacks positions and permissions, which #25701 (47af3dd) added as translation kinds. The cutover PR cannot be green until objectui compiles against the sha it will be imported with, and because the gap grows with every spec merge, this card is repeated right before cutover.
Who does it, where it lands: the epic PM dispatches it (os-dev, objectui checkout). One PR to objectstack-ai/objectui main per round: bump .objectstack-sha to objectstack main HEAD (the normal pin-bump path, pnpm run setup / the pin scripts), fix every type and test failure the new spec brings, land. The epic PM re-measures on the verification branch (its ui/ subtree re-imported at the new objectui sha) and records the remaining reds on #25697. The last round runs inside the cutover freeze (sub-issue 5).
维护者速读
objectui 现在钉 objectstack 的提交是 e649c2d,objectstack main 已经往前 13 个 spec 提交。合并后 Console 直接对着仓内 spec HEAD 编译(这正是合并要的效果),所以 objectui 没追上的每个 spec 改动在导入那一刻都会变成编译错误 —— 验证分支第二轮已经出现第一个:TranslationPreview 缺 positions / permissions 两个翻译种类(#25701 加的)。本卡就是让 objectui 追上 objectstack main(走现有的 pin 升级流程,修掉报错),切换前再做最后一轮。不改受管面。
Measured
| Evidence | Reading |
|---|---|
| #25718 run 2 Build Core | 117 tasks, 11m54s; 1 red: @object-ui/app-shell#build TS1360 at TranslationPreview.tsx(99,3) — positions, permissions missing from the metadata-kind record |
objectui .objectstack-sha |
e649c2d91e; objectstack main on 2026-10-25 00:30Z: 13 spec commits past it (git log e649c2d91e..main -- packages/spec) |
| Run 4 (d17ed5e) Type Check UI | the tsc step over the ui packages against spec HEAD — its full error list is appended to this card when read |
Scope
- Bump
.objectstack-shato objectstackmainHEAD at the time of the round; run the pin refresh the wayAGENTS.mdprescribes (packed manifests,pnpm run setup). - Fix the fallout in objectui: TranslationPreview's metadata-kind record gains
positionsandpermissions(with the labels/previews the other kinds have); whatever else the spec delta breaks intype-check,test, and the spec-alignment gates (check:spec-symbols, designer-field-key-parity, …). - Per round, post on this card: the sha bumped to, the number of spec commits covered, the files changed, the gates that moved.
- Repeat on the epic PM's call: once now, once right before the cutover freeze (and in between if the gap exceeds ~10 spec commits).
Out of scope: any spec change in objectstack (if a spec commit is wrong, file on objectstack and bump past it); the merged-tree readers (#25723).
Verification (the dev's)
- objectui standalone:
pnpm type-check,pnpm test(affected),pnpm check:spec-symbols, the pin-floor checks — green, no gate skipped; the PR's CI green. - The epic PM: re-import the ui/ subtree at the merged objectui sha on the verification branch;
@object-ui/app-shell#buildand Type Check UI's tsc step green against spec HEAD.
Done when
- objectui
main's.objectstack-shaequals objectstackmainHEAD (±0 spec commits) at the start of the cutover freeze, and the verification branch's Type Check UI and root build are green on the spec axis.
Size: S per round (today: one component + whatever 13 commits add). Clause-②: no. Metadata-protocol: none. Blocked-by: none for round 1 (objectui#13484 of #25723 should land first so the branch claude/project-thread-dwhq6r is free; otherwise a per-card branch).
风险
- The spec gap is a moving target; the last round must be inside the freeze or the import compiles against a sha objectui never saw.
- A spec commit that is itself wrong must be fixed in objectstack first; this card never patches around spec.
Dedupe
Open issues 2026-10-25 01:10Z filtered on .objectstack-sha / pin bump / TranslationPreview / positions permissions: the routine Dependabot-style pin bumps are not cards; #25701 (closed) added the kinds. New.
Activity
objectstack-fleet commentedon Oct 25, 2026
Claim: epic #25677 round 5 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
Session:
session_01RSDL3SFtJaKzcymvCD8RsUAccount:
os-teslaBranch:
claude/project-thread-gxm6ze(the card thread's designated branch in objectstack-ai/objectui — the thread can push only this branch, a measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectui-issue-25727Domain:
domain:devxSeat:
epic:#25677File surface:
.objectstack-sha, the packed manifests the pin refresh rewrites,packages/app-shell/**(TranslationPreview and whatever the spec delta breaks), test/gate fixtures the new spec moves; no.github/**Container & model: M,
mode:thread(thread sessionsession_01K1ngdG6x8wAt8cjeVx2cSk; order:/mnt/project-files/d1-merge/dispatch/in the project, FRAME.md + the card's file),model: opus,effort: high(coordinator default)Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Serial constraints cleared: objectui#13484 (#25723) MERGED as c85408f — scripts/ surface free; #25728 (2d, branch
claude/project-thread-ulxm6b) editsscripts/**only, no overlap; #25726 (5a) touches no objectui fileGenerated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Type Check UI, remaining steps measured locally in the merged tree at verify head d17ed5e (objectstack#25718 run 4 stopped at
check:i18n-drift, see #25728).check:i18n-designer-paritytype-check:scripts,type-check:vitest-config,type-check:e2eturbo run type-checkoverui/packages/*,ui/apps/*,ui/examples/*(--continue)@object-ui/components#type-check:src/renderers/action/__tests__/resolve-icon-seam.test.ts(191,67): error TS2551: Property 'Building2' does not exist on type 'typeof index'. Did you mean 'Building'?— alucide-react1.43→1.61 recompute effect, owned by #25726 (dependency neutrality), not spec drift.type-check:vitest-setupSo against the spec HEAD this tree carries (merge-base b77bb37, 2026-10-25 ~00:30Z), the
type-checktasks of the ui packages report no spec-drift error; the drift shows only at build time —@object-ui/app-shell#buildTS1360 inTranslationPreview.tsx(99,3)(positions,permissionsmissing from the metadata-kind record; run 2) — because app-shell'stype-checkandbuildcompile different programs. For the card thread: after the.objectstack-shabump, run bothpnpm type-checkand the app-shell build (pnpm --filter @object-ui/app-shell build), and re-measure against the sha you bump to — objectstackmainhas moved past b77bb37 since this measurement.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Round 1 (objectui-readiness 3), 2026-10-25T03:00Z: draft objectstack-ai/objectui#13496.
43edf90b56db8b47ad17684c145fb7fa8bf08583(objectstackmainHEAD bygit ls-remoteat 01:52Z)e649c2d91e(git log e649c2d91e..43edf90b56 -- packages/spec); 3 of them since47af3dde42, where objectui#13485 had already moved the pinmain).objectstack-shaonly. objectui#13485 landed the TranslationPreviewpositions/permissionsrows, their en/zh headings, the i18n loader's group list and the zod^4.6.6manifests while this round was in flight; the branch mergedmainand tookmain's version of each. Lockfile unchanged, frozen install exits 0, no changeset owedpnpm type-checkred on@object-ui/app-shell#buildand#type-check(TS1360, TranslationPreview), andapps/console/src/loadLanguage.test.tsxred onpositions. At the merged head:pnpm type-check81/81,pnpm --filter @object-ui/app-shell build, the five auxiliary type-checks,check:spec-symbols, designer/action/component parity, icon names, installed-pin claims, the four i18n gates, lockfile integrity and dedupe all exit 0; the 239 test files that read the delta pass. The fullpnpm testruns on the PR's CI shardsNot this round's:
check:spec-floorsexits 1 on three findings that predate the bump (manifest ranges vs published npm spec; both named symbols exist ate649c2d91e); nolucide-reactmove, so theBuilding2class (#25726) is untouched here.objectstack-fleet commentedon Oct 25, 2026
ACCEPT round 1 — dispatch seat. objectui#13496 (head
f9c9dadec8, branchclaude/project-thread-gxm6ze, +1/−1, 1 file) is accepted as round 1 of this card. The card stays open: the order names a second, pre-freeze round at cutover time.Checked against the order (
/mnt/project-files/d1-merge/dispatch/2c-25727-objectui-spec-drift.md):.objectstack-shaline alone,47af3dde42→43edf90b56(objectstackmainHEAD at 01:52Z). The compile break the 19 spec commits bring (TranslationPreview TS1360positions/permissions) and the i18n loader group list landed with objectui#13485 while this branch was in flight; the branch mergedmainand keptmain's version everywhere, so nothing is re-fixed here..objectstack-pin/manifests byte-identical tomain's;pnpm-lock.yamlunchanged;pnpm install --frozen-lockfileexit 0; no changeset owed (check-changeset-presencereports no released surface changed).pnpm type-check81/81 (incl.@object-ui/app-shell#build), the five type-check lanes, spec-symbols / designer-field-key / action-forward / component-surface / icon-record parity, installed-pin-claims, lockfile-integrity, lockfile-dedupe, the four i18n gates — all exit 0; 239 targeted vitest files green.check:spec-floors(judges against published npm spec versions, runs on push/release, both symbols exist ate649c2d91e);check:eager-locale-catalogues(needs the built Console bundle; CI's performance-budget job covers it).check-governed-merges --pr objectstack-ai/objectui#13496: NOT governed (0 of 1 paths hit the register), 2 changed lines ≤ 3000 — ordinary queue landing.Landing: the seat flips the PR ready and arms auto-merge via the relay now. Note the objectui merge queue has been held since 02:34Z by its head entry (Dependabot #13438, whose queue checks never reported); #13496 enqueues behind objectui#13491 and lands when the head clears. The PR body says
Part of objectstack#25727(cross-repo, no auto-close); this card stays open for round 2 (the pre-freeze pin move in the cutover window, child 5). The verify branch objectstack#25718 picks the merged objectuimainup at the next subtree refresh.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Round 1 landed — dispatch seat. objectui#13496 merged to objectui
mainvia the merge queue at 03:58Z. objectui's.objectstack-shanow reads43edf90b56(objectstackmainat 01:52Z), 19 spec commits past the card's starting pine649c2d91e, with the TranslationPreview /loadLanguagefixes from objectui#13485 already onmain.The card stays open for round 2: the last pin move in the cutover window, after the 24-hour freeze notice and before the subtree import (child 5). Until then objectstack
mainkeeps moving; the seat re-measures the drift when child 5 is filed. The verification branch #25718 picks thismainup at its next subtree refresh (run 6).Generated by Claude Code
chore(deps): move .objectstack-sha to objectstack main 43edf90 (objec…
objectstack-fleet commentedon Oct 25, 2026
ACCEPT — round 2 (a), dispatch seat. objectui#13512 (head
4eb25bc56c, branchclaude/project-thread-gxm6ze, +209/−231, 14 files) is accepted as round 2 (a) of this card. The card stays open for round 2 (b) (the two.claude/skillsfrontmatter edits, governed) and the pre-freeze pin refresh.Checked against the round-2 order and the seat's report:
5874d25302(ls-remote 09:15Z): 20 commits, none underpackages/spec, manifests unchanged.better-authpinned exactly1.7.12(bill 21c,check:vendor-export-contract); the DraftChangesPanel warm import is module-scope (bill 24); the ADR-0075 citations use theObjectUI ADR-0075spelling in source and tests, the five CHANGELOG lines untouched (bill 19).aipinned exactly7.0.118instead of^7.0.118— measured in objectui standalone, the caret resolves 7.0.153, the lock holds two copies and plugin-chatbot type-check fails TS2322 atuseObjectChat.ts:893; exact + one lock copy is green. Recorded as cutover bill item 28: the cutover lock recomputes with exact@ai-sdk/react 4.0.121and exactai 7.0.118.scripts/__tests__/check-lockfile-integrity.test.tssamples (a)/(b) are built from snapshot keys that must exist in the real lock and namedai@7.0.65; commit 4eb25bc renames them toai@7.0.118, no assertion changed. Accepted: the test reads the live lock and the key moved with it.check-governed-merges --pr objectstack-ai/objectui#13512on the final file list: NOT governed (0 of 14 paths hit the register), 440 changed lines ≤ 3000 — ordinary queue landing.Landing: the seat flips the PR ready and arms auto-merge via the relay now. After the merge the seat restarts
claude/project-thread-gxm6zefrommainand pushes round 2 (b) as a draft; (b) touches.claude/**(governed) and needs an APPROVED review from os-zhuang or hotlong before the queue takes it — the epic seat routes that.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
ACCEPT — round 2 (b), dispatch seat; landing waits for the governed approval. objectui#13514 (head
ae88ed4a14, branchclaude/project-thread-gxm6zerestarted frommainafter #13512 merged, +8/−0, 2 files) is accepted as round 2 (b) of this card.Checked against the round-2 order:
.claude/skills/objectui-contributor/SKILL.mdand.claude/skills/verify/SKILL.mdchanges:metadata: internal: true(ruling C/17d — the three contributor skills stay internal whenskills/objectuimoves to the root catalog in the cutover adaptation commit). Theui/AGENTS.md:210item moved out of this round:check:agent-test-spelling's header rules that a file quoting the bad form as a warning is declared in itsCOUNTER_EXAMPLE_FILES, objectstack side, in the cutover adaptation commit (bill 21c amendment).check:skills-paths, skill-examples, skill-eval-tokens, control-bytes, shell-escape-residue, new-line-citations, lint-rule-coverage exit 0; the 6scripts/__tests__files that read.claude/skills/ SKILL.md pass (305 tests).check-governed-merges --pr objectstack-ai/objectui#13514: ⛔ GOVERNED —.claude/**×2, landing tier H: an APPROVED review from aGOVERNED_APPROVERSmember (os-zhuang / hotlong), then the owning seat lands it. 8 changed lines ≤ 3000. The approval ask went to the maintainer through the director thread; no seat approves it.Landing: the seat flips the PR ready now (so the review is on a ready PR) and arms auto-merge via the relay once the APPROVED review is on the PR. This card then closes with a landing note covering rounds 1, 2 (a) and 2 (b); the pre-freeze pin refresh (#25752 step 2) is the cutover window's, not a further round here.
Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Landed — round 2 (b). objectui#13514 (head
ae88ed4a14+ os-zhuang's merge ofmain6a60d332) MERGED into objectuimainon 2026-10-25 13:04Z through the queue, with os-zhuang's APPROVED review (5643288465) as the Tier H record. Rounds 1 (#13496), 2 (a) (#13512) and 2 (b) (#13514) are all on objectuimain: pin5874d25302,better-auth1.7.12 andai7.0.118 exact, the DraftChangesPanel warm import, theObjectUI ADR-0075citation spelling,metadata.internalon the two repo-internal.claudeskills.This card stays OPEN for exactly one more step: the final one-line pin bump to objectstack
mainat the cutover freeze (#25752 step 2), onclaude/project-thread-gxm6zerestarted frommain, called by the epic seat when the maintainer rules the freeze window. Nothing else is owed here.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Landing note (epic PM, #25752 step 2): the final pin is on objectui
main.9e1fe032866965c7cb0460cff2b6af09350236b7;.objectstack-sha= objectstack5e7cf63e71d92198a77cc88ed22f34afb1e86cb6(on objectstackmain). That commit is the frozen tip of objectuimain: nothing lands there after it, and the cutover PR imports exactly it (git subtree add --prefix=ui 9e1fe03286…).compileCelToFilterlowers a null MEMBER of a membership array straight into an RLS$in, bypassing the fail-closed path a null SCALAR variable takes — and the backends then disagree three ways on what that filter selects #13496 (round 1), Pin test-typecheck debt by error IDENTITY, not per-file count #13512 (round 2a), feat(plugin-security): walled bootstrap stops minting the platform-admin grant row; platformAdmin audit service; legacy-grant deprecation pointer (L4) #13514 (round 2b, Tier H), An ownerlessdomain:docslabel object routes cards to a lane that has no roster row, no lane file and no seat — measured by walking into it #13545 (freeze pin). Localpnpm type-checkon the pin head: 81/81 tasks, 0 errors; the Console perf-budget check passed on the PR.ai7.0.118 in the cutover lock), item 21(c) (ui/AGENTS.md:210 via COUNTER_EXAMPLE_FILES, moved to the adaptation series).Closing: done. Part of #25677.
Generated by Claude Code
chore(deps): objectui-readiness 3 round 2 — pin objectstack 5874d25, …
chore(skills): mark the two repo-internal .claude skills metadata.int…
chore(pin): bump .objectstack-sha to objectstack main 5e7cf63 at the …