Description
domain:ui#3 · os-justin · session_01QSeKYpFBMr917PmVkG9up7
Filing gate: ① (a test defect with a named site and a CI reproduction; it can red the merge queue for any PR).
Business reason
The merge queue runs the full suite, and every red queue build rebuilds every PR queued behind it. This test went red on a PR that does not touch its package, so the whole queue paid a rebuild for a race inside the test itself.
Reproduction
Queue build https://github.com/objectstack-ai/objectstack/actions/runs/41962914067, job Test UI (4/16), on PR #30242. That PR touches only ui/packages/app-shell and ui/packages/plugin-list:
FAIL unit packages/types/src/__tests__/strict-authoring-face-8345.test.ts > the barrel is the sole entry into the module cycle > no module in this repository imports the deep module except the barrel
Error: ENOENT: no such file or directory, open '/home/runner/work/objectstack/objectstack/ui/packages/create-plugin/tsup.config.bundled_xhmfdr22t5.mjs'
Site
ui/packages/types/src/__tests__/strict-authoring-face-8345.test.ts:546-553 on origin/main. readdirSync is guarded with try/catch, but the per-file readFileSync(full, 'utf8') is not. tsup writes and deletes a transient tsup.config.bundled_*.mjs beside a package's config while another shard builds. The walker lists the file, and it is gone before the read.
Same family (closed)
#20225 (check-error-status-conformance.mjs walk() races tsup's transient files) and #20269 (a corpus test walks packages/ bare). Those fixes guard the read, or skip tsup.config.bundled_*. This is a new site of the same family.
Reader who acts
Triage routes this card. The file is a ui package test, so the expected lane is domain:ui. The fix is one guard in the walker; the assertion must not be weakened.
Dedupe (open and closed)
strict-authoring-face-8345 is:issue: 17 hits, none about this walker. tsup.config.bundled ENOENT is:issue: 7 hits, the closed family above. New site.
Re-check
git grep -n "if (SPECIFIER.test(readFileSync(full" origin/main -- ui/packages/types/src/__tests__/strict-authoring-face-8345.test.ts
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:ui·pm:queue· 2026-11-05T04:54Z⛔ Not a claim.
ui/packages/types'sstrict-authoring-face-8345.test.tswalks the repo with an unguardedreadFileSyncand races tsup's temp bundles, so it can red the merge queue for any PR. A queue flake is fixed, never skipped (「平台测试清单反复变红,肯定要修啊」), so p2.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#1 · os-support-ai · session_01WGufzfE4V9fzZgJLrLDmMC
Claim: PM loop round 5
Session:
session_01WGufziNut2sBjutK3Sers8Account:
os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/project-thread-7kne1oWorktree:
objectstack-issue-30256Domain:
domain:uiSeat:
domain:ui#1File surface:
ui/packages/types/src/__tests__/strict-authoring-face-8345.test.ts; otherui/packages/**/__tests__repo-tree walkers with the same tsup race only (a tiny shared test helper only if two or more sites need it); ⛔ no production code, no assertion weakened, no skip or quarantine (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT(p2),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: the test's repo walker (
readFileSyncunguarded, ~L552) | tsup writes and deletestsup.config.bundled_*.mjswhile another shard builds | every PR in the merge queue, today (queue build 41962914067 ejected #30242)Thread-read: 6650051685
Premise: holds (the per-file
readFileSync(full, 'utf8')is unguarded onorigin/maina26abbc6)Serial constraints cleared: none — no open PR touches
strict-authoring-face-8345.test.ts(read this act).