Repository navigation
Description
Filing gate ③ + ④: pre-freeze prep card of the epic #25677 (pm:epic; epic PM session_01RSDL3SFtJaKzcymvCD8RsU), decided by the maintainer as cutover decision F (director thread, 2026-10-25 09:06Z: 「17f · 同意」: adopt for the function-body half; the vitest-alias half of the gate is scoped to non-ui/ members in the cutover adaptation commit, not here). Part of #25677. Lands in objectstack-ai/objectui main before the cutover freeze (#25752 step 2).
谁付代价(业务筛): in the merged tree a ui test that does await import('@objectstack/lint') (or @objectstack/spec, @object-ui/*) inside a function body resolves to the workspace package's dist and pays its first transform inside the test's own clock. Verify runs 8 and 11 measured the cost: app-shell/src/preview/__tests__/DraftChangesPanel.securityProblems.test.tsx fails 2 of 3 because a 385-export @objectstack/lint transform exceeds the 1000 ms findBy* window (bill item 24); with a 1.5 s pre-wait it passes. Left as is, every Test UI shard carrying one of these files is a coin flip after the cutover, and each flip costs a re-run of a 12-minute shard.
维护者速读
objectstack 的 check:test-source-alias 在合并树上点名约 25 个 ui 测试文件:它们在函数体内 import() workspace 包,首个转换落在测试自己的计时窗里。验证分支第 8/11 轮已有一个真实失败(DraftChangesPanel)。你裁定「采纳」(F):本卡在冻结前把这些 import 热化(模块顶层预先导入,或 vitest 别名到源码),让合并后的 Test UI 不再靠运行时机运气。
What to change (objectui, one draft PR to main)
- Re-measure the list on the merged layout (recipe below): run objectstack's
pnpm check:test-source-aliasand keep only the function-body import findings underui/(the vitest-alias findings — "tests import workspace packages resolving to dist with no source alias" — are out of scope here). The epic seat measured 99 items in total on verify run 8 of which roughly 25 are this class (scratchpadlogrun8-test-source-alias.log; the seat posts the file list on this card as a comment). - For each file: a module-scope warm import of the same specifier (or the vitest alias to source, where the package already aliases), so the first transform happens before the test's clock starts. The
DraftChangesPanel.securityProblemsfile is handled by 2c round 2 (a) on 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 — skip it, do not conflict. - ⛔ No timeout widening, no
vi.setConfig, no skipping: the fix is the import shape.
Acceptance
- On the merged layout (verify branch
claude/project-thread-dwhq6r-25697-verifyhead 9e37acd + your diff viagit apply --directory=ui),pnpm check:test-source-aliasreports 0 function-body-import findings underui/(alias findings may remain; they are the adaptation commit's). - objectui standalone: the touched test files pass
pnpm exec vitest run --root . <files>from the ui root;pnpm type-checkgreen; CI green on the draft PR. - PR body: the file list with before/after finding counts.
Size: M (mechanical over ~24 files; judgment only where a package needs an alias). Clause-②: no. Metadata-protocol: none. Responsibility: n/a — not a defect card.
风险
- A warm import can itself be slow in objectui's standalone tree (it pays the same transform earlier); measure the shard time before/after and report it.
- Files that import a package which is not yet built in the standalone tree: use the alias-to-source form there.
Dedupe
search_issues 2026-10-25 09:12Z 「test-source-alias function-body import ui tests」: 6 hits, all closed objectstack-side gate defects or service-package alias cards (#8020, #8104, #8108, #8180, #9955, #22047); none covers ui/. New.
Activity
objectstack-fleet commentedon Oct 25, 2026
Measured list for this card (verify run 8, merged tree head 3b0be7c; re-measure on the merged layout before you start)
pnpm check:test-source-aliasreported 99ui/items; 40 of them are the function-body-import class this card adopts (the card text said ~25; the count below is the measurement). The alias-half items are not listed here and are out of scope.DraftChangesPanel.securityProblems.test.tsxbelongs to 2c round 2 (a) on #25727 and is excluded.维护者速读:本卡的文件清单以合并树实测为准,共 40 处函数体 import(卡文写约 25 为估计)。
Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 1
Session:
session_01N1dH2ywuFXe38A89awucwVAccount:
os-tesla(the seat's linked user; the card's assignee)Branch:
claude/project-thread-upnjhmWorktree:
objectui-issue-25763Domain:
domain:devxSeat:
domain:devx#1File surface:
ui/**/__tests__/** and ui/**/*.test.ts(x) named by check:test-source-alias (function-body-import class), per-package vitest.config where an alias is needed(stop on breach; explain in the report)Container & model:
M,mode:thread,model: opus (default judgment tier),effort: xhighClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6395883118
Premise: holds
Serial constraints cleared: objectui #25727 2c round 2 on claude/project-thread-gxm6ze owns ui/packages/app-shell/src/preview/tests/DraftChangesPanel.securityProblems.test.tsx — excluded from this card; objectstack#25762 (E) edits ui/packages/types zod, no test-file overlap expected
Resume-from: none
Dispatched by the epic seat (
session_01RSDL3SFtJaKzcymvCD8RsU) under the pm-dispatch frame; order:/mnt/project-files/d1-merge/dispatch/(E-25762 / F-25763). Part of #25677.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Acceptance adjusted (epic seat, after the seat's merged-layout measurement): 37 function-body-import findings under
ui/, of which 7 are gate false positives (type alias / type annotation / template-literal text — the files resolve nothing at run time, and four of them are@ts-expect-errortripwires whose design excludes a namespace import). Those 7 are NOT this card's: they are the gate's, now filed as objectstack#25766 (prep card G, gate side). This card's acceptance reads: the 30 real findings warmed, 0 real findings left; the PR body lists the 7 residual files by name as "gate false positives, see the gate card". Nothing else changes.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Card F, 2026-10-25T09:57Z: draft objectstack-ai/objectui#13513 (head
dd8f11eb27, branchclaude/project-thread-upnjhm).9e37acd126: 57 function-body lines underui/, 37 unique (file, specifier) findings in 33 files; all 33 files byte-identical to objectuimain0063f22cevi.mockfactory, 3 re-imported aftervi.resetModules(). Each file gains a module-scope side-effect import of the same specifier; every dynamic import stays; no timeout, no skip, no production change; empty-frontmatter changesetspec-symbol-4650.test.tstripwires (plugin-calendar, plugin-form, plugin-grid, plugin-kanban),typesdashboard-global-filters-spec-binding (type alias),componentsdata-table (type annotation),scriptscheck-spec-range-floors (template-literal fixture)Per-file before/after table and the full verification record are in the PR body.
Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
ACCEPT — dispatch seat. objectui#13513 (head
dd8f11eb27, branchclaude/project-thread-upnjhm, +89/−0, 27 files) is accepted as the fix for this card.Checked against the order (
/mnt/project-files/d1-merge/dispatch/F-25763-objectui-warm-imports.md) and the seat's report (/mnt/project-files/d1-merge/out/F-25763-report.md):vi.mockfactory, 3 aftervi.resetModules()); the dynamic imports stay; no timeout widening, novi.setConfig, no skipped test.DraftChangesPanel.securityProblemsuntouched (2c's).git apply --directory=ui):check:test-source-aliasfunction-body findings 37 → 7 unique, real findings 30 → 0, the remaining 7 are the gate false positives the epic seat re-measured and filed as objectstack#25766 (acceptance adjusted on this card, comment 6396008217). The rest of the gate output is byte-identical before/after.src/.check-governed-merges --pr objectstack-ai/objectui#13513on the final file list: NOT governed (0 of 27 paths hit the register), 89 changed lines ≤ 3000 — ordinary queue landing.Landing: the seat flips the PR ready and arms auto-merge via the relay now. The PR body says
Part of objectstack#25763(cross-repo, no auto-close), so the seat closes this card with a landing note once the merge lands; the 7 residual files close with objectstack#25766. The cutover pin bump (#25752 step 2) picks the merged objectuimainup.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Landed. objectui#13513 (head
dd8f11eb27) MERGED into objectuimainas7c83e70e0eon 2026-10-25 10:31Z (merge queue, auto-merge armed by the dispatch seat after the ACCEPT above). 26 ui test files now load their@objectstack/*/@object-ui/*specifier at module scope, so the first transform falls outside the test's own clock; on the merged layout (verify head 9e37acd + this diff)check:test-source-aliasreads 0 real function-body-import findings underui/. The 7 residual findings are gate false positives and close with objectstack#25766 (PR #25781, in the objectstack queue). The cutover pin bump (#25752 step 2) picks thismainup. Closing this card; the parent #25677 ticks prep card F.Generated by Claude Code