Skip to content

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

Closed

Description

@objectstack-fleet

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

  1. Bump .objectstack-sha to objectstack main HEAD at the time of the round; run the pin refresh the way AGENTS.md prescribes (packed manifests, pnpm run setup).
  2. Fix the fallout in objectui: TranslationPreview's metadata-kind record gains positions and permissions (with the labels/previews the other kinds have); whatever else the spec delta breaks in type-check, test, and the spec-alignment gates (check:spec-symbols, designer-field-key-parity, …).
  3. Per round, post on this card: the sha bumped to, the number of spec commits covered, the files changed, the gates that moved.
  4. 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#build and Type Check UI's tsc step green against spec HEAD.

Done when

  • objectui main's .objectstack-sha equals objectstack main HEAD (±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

  1. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: epic #25677 round 5 (card threads; Tesla 2026-10-25 「你应该使用 pm-dispatch 技能派发」「并发可以到6」)
    Session: session_01RSDL3SFtJaKzcymvCD8RsU
    Account: os-tesla
    Branch: 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 to claude/issue-<n>-<slug>)
    Worktree: objectui-issue-25727
    Domain: domain:devx
    Seat: epic:#25677
    File 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 session session_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) edits scripts/** only, no overlap; #25726 (5a) touches no objectui file


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    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).

    Step Result
    check:i18n-designer-parity exit 0
    type-check:scripts, type-check:vitest-config, type-check:e2e exit 0 each
    turbo run type-check over ui/packages/*, ui/apps/*, ui/examples/* (--continue) 115 of 116 tasks green. The one red is @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'? — a lucide-react 1.43→1.61 recompute effect, owned by #25726 (dependency neutrality), not spec drift.
    type-check:vitest-setup exit 0

    So against the spec HEAD this tree carries (merge-base b77bb37, 2026-10-25 ~00:30Z), the type-check tasks of the ui packages report no spec-drift error; the drift shows only at build time — @object-ui/app-shell#build TS1360 in TranslationPreview.tsx(99,3) (positions, permissions missing from the metadata-kind record; run 2) — because app-shell's type-check and build compile different programs. For the card thread: after the .objectstack-sha bump, run both pnpm type-check and the app-shell build (pnpm --filter @object-ui/app-shell build), and re-measure against the sha you bump to — objectstack main has moved past b77bb37 since this measurement.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Round 1 (objectui-readiness 3), 2026-10-25T03:00Z: draft objectstack-ai/objectui#13496.

    Fact Reading
    Sha bumped to 43edf90b56db8b47ad17684c145fb7fa8bf08583 (objectstack main HEAD by git ls-remote at 01:52Z)
    Spec commits covered 19 since the card's e649c2d91e (git log e649c2d91e..43edf90b56 -- packages/spec); 3 of them since 47af3dde42, where objectui#13485 had already moved the pin
    Files changed (net vs objectui main) .objectstack-sha only. objectui#13485 landed the TranslationPreview positions / permissions rows, their en/zh headings, the i18n loader's group list and the zod ^4.6.6 manifests while this round was in flight; the branch merged main and took main's version of each. Lockfile unchanged, frozen install exits 0, no changeset owed
    Gates that moved Before the fix, at the new pin: pnpm type-check red on @object-ui/app-shell#build and #type-check (TS1360, TranslationPreview), and apps/console/src/loadLanguage.test.tsx red on positions. At the merged head: pnpm type-check 81/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 full pnpm test runs on the PR's CI shards

    Not this round's: check:spec-floors exits 1 on three findings that predate the bump (manifest ranges vs published npm spec; both named symbols exist at e649c2d91e); no lucide-react move, so the Building2 class (#25726) is untouched here.

  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT round 1 — dispatch seat. objectui#13496 (head f9c9dadec8, branch claude/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):

    • Net diff is the .objectstack-sha line alone, 47af3dde42 → 43edf90b56 (objectstack main HEAD at 01:52Z). The compile break the 19 spec commits bring (TranslationPreview TS1360 positions / permissions) and the i18n loader group list landed with objectui#13485 while this branch was in flight; the branch merged main and kept main's version everywhere, so nothing is re-fixed here.
    • .objectstack-pin/ manifests byte-identical to main's; pnpm-lock.yaml unchanged; pnpm install --frozen-lockfile exit 0; no changeset owed (check-changeset-presence reports no released surface changed).
    • Local gates at the merged head: pnpm type-check 81/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.
    • Two readings declared not this PR's and accepted as such: check:spec-floors (judges against published npm spec versions, runs on push/release, both symbols exist at e649c2d91e); check:eager-locale-catalogues (needs the built Console bundle; CI's performance-budget job covers it).
    • CI on the PR head: 34/34 check runs green (Type Check, Build & E2E, 16 test shards, dist pins, Lint, Repo Gates, Bundle Analysis, changeset gates). check-governed-merges --pr objectstack-ai/objectui#13496: NOT governed (0 of 1 paths hit the register), 2 changed lines ≤ 3000 — ordinary queue landing.
    • Writes: 1 relay write (pr_create), 0 MCP writes, no review requested.

    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 objectui main up at the next subtree refresh.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Round 1 landed — dispatch seat. objectui#13496 merged to objectui main via the merge queue at 03:58Z. objectui's .objectstack-sha now reads 43edf90b56 (objectstack main at 01:52Z), 19 spec commits past the card's starting pin e649c2d91e, with the TranslationPreview / loadLanguage fixes from objectui#13485 already on main.

    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 main keeps moving; the seat re-measures the drift when child 5 is filed. The verification branch #25718 picks this main up at its next subtree refresh (run 6).


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — round 2 (a), dispatch seat. objectui#13512 (head 4eb25bc56c, branch claude/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/skills frontmatter edits, governed) and the pre-freeze pin refresh.

    Checked against the round-2 order and the seat's report:

    • Pin moves to objectstack 5874d25302 (ls-remote 09:15Z): 20 commits, none under packages/spec, manifests unchanged.
    • better-auth pinned exactly 1.7.12 (bill 21c, check:vendor-export-contract); the DraftChangesPanel warm import is module-scope (bill 24); the ADR-0075 citations use the ObjectUI ADR-0075 spelling in source and tests, the five CHANGELOG lines untouched (bill 19).
    • Deviation accepted: ai pinned exactly 7.0.118 instead 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 at useObjectChat.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.121 and exact ai 7.0.118.
    • Between CI runs one test fix: scripts/__tests__/check-lockfile-integrity.test.ts samples (a)/(b) are built from snapshot keys that must exist in the real lock and named ai@7.0.65; commit 4eb25bc renames them to ai@7.0.118, no assertion changed. Accepted: the test reads the live lock and the key moved with it.
    • Local gates all exit 0: frozen install; type-check 81/81; 121 test files (touched tests + plugin-chatbot + auth); spec-symbols; installed-pin-claims; lockfile integrity + dedupe; phantom/unused deps; changeset gates; new-line-citations; skills gates; shell-escape; control-bytes; doc-json; test-path-roots; i18n-keys; designer parity; type-check:scripts; lint:root; eslint over the touched files.
    • CI on the PR head: all 16 Test shards, Type Check, Build & E2E, Lint, Repo Gates, lockfile integrity and dedupe, changeset checks and the governed guard green (suite completed 10:18Z). check-governed-merges --pr objectstack-ai/objectui#13512 on the final file list: NOT governed (0 of 14 paths hit the register), 440 changed lines ≤ 3000 — ordinary queue landing.
    • Writes: 1 relay write (pr_create), 0 MCP writes, no review requested.

    Landing: the seat flips the PR ready and arms auto-merge via the relay now. After the merge the seat restarts claude/project-thread-gxm6ze from main and 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

  7. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — round 2 (b), dispatch seat; landing waits for the governed approval. objectui#13514 (head ae88ed4a14, branch claude/project-thread-gxm6ze restarted from main after #13512 merged, +8/−0, 2 files) is accepted as round 2 (b) of this card.

    Checked against the round-2 order:

    • Only the frontmatter of .claude/skills/objectui-contributor/SKILL.md and .claude/skills/verify/SKILL.md changes: metadata: internal: true (ruling C/17d — the three contributor skills stay internal when skills/objectui moves to the root catalog in the cutover adaptation commit). The ui/AGENTS.md:210 item 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 its COUNTER_EXAMPLE_FILES, objectstack side, in the cutover adaptation commit (bill 21c amendment).
    • Gates: no changeset owed; check:skills-paths, skill-examples, skill-eval-tokens, control-bytes, shell-escape-residue, new-line-citations, lint-rule-coverage exit 0; the 6 scripts/__tests__ files that read .claude/skills / SKILL.md pass (305 tests).
    • CI on the PR head: 16 Test shards, Test aggregate, Type Check, Build & E2E, Lint, Repo Gates, changeset checks, Governed Surface Queue Guard (pull_request leg) green, suite completed 10:49Z.
    • check-governed-merges --pr objectstack-ai/objectui#13514: ⛔ GOVERNED — .claude/** ×2, landing tier H: an APPROVED review from a GOVERNED_APPROVERS member (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.
    • Writes: 1 relay write (pr_create), 0 MCP writes. The seat will not push to this branch again, so the approval stays valid.

    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

  8. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed — round 2 (b). objectui#13514 (head ae88ed4a14 + os-zhuang's merge of main 6a60d332) MERGED into objectui main on 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 objectui main: pin 5874d25302, better-auth 1.7.12 and ai 7.0.118 exact, the DraftChangesPanel warm import, the ObjectUI ADR-0075 citation spelling, metadata.internal on the two repo-internal .claude skills.

    This card stays OPEN for exactly one more step: the final one-line pin bump to objectstack main at the cutover freeze (#25752 step 2), on claude/project-thread-gxm6ze restarted from main, called by the epic seat when the maintainer rules the freeze window. Nothing else is owed here.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing note (epic PM, #25752 step 2): the final pin is on objectui main.

    Closing: done. Part of #25677.


    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