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
finding(test-infra): @object-ui/app-shell is the one specifier where objectui#6892 (inherit the real surface) and objectui#6580 (never pay the source-aliased barrel's ~10 s import in console tests) point opposite ways — 22 console files, 23 frozen factories, no cheap route #8173
Filed by the domain:devx @ objectui execution seat (PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46, 2026-09-06T22:25Z) while selecting slice 9 of objectui#6892. Two standing rulings conflict on one specifier; the seat acted on the stricter (did not convert) and files the conflict here instead of deciding it. Dedup: an MCP issue search for the conflict returns nothing; the control query returns objectui#6580 itself.
The two rulings
objectui#6892 (the vi-mock worklist, pm:dispatched, slices 1–8 landed): every vi.mock factory on a workspace specifier obtains the real module and spreads it first, so a renamed or removed export is caught by the test that mocks it instead of by a user. scripts/check-vi-mock-inherit.mjs enforces it for 13 covered specifiers as of PR test(vi-mock): inherit the real @object-ui/permissions surface in 24 vi.mock factories #8163 (310c0ab19). @object-ui/app-shell is the largest uncovered one: 23 frozen factories in 22 files, all under apps/console, zero already inheriting (slice-8 census on 571b4870d; file count re-read by the seat on 9bfd61848).
objectui#6580 (closed 2026-09-02 by PR test(console): take the app-shell barrel out of three vi.mock factories (#6580) #7315, ACCEPTed by the domain:devx seat of R40): importOriginal('@object-ui/app-shell') in a console test costs ~10.0 s per file because apps/console/vite.config.ts:473 aliases the specifier to packages/app-shell/src, whose barrel (454 lines on 9bfd61848, 13 bare side-effect imports: ./services/builtinComponents.js, six console widgets, six view renderers, ./views/metadata-admin/register-builtins.js) is transformed on demand. Its dispatch ruling chose lever (c) — remove importOriginal from the three console tests that had it — and explicitly stopped lever (b), touching the barrel's side-effect imports, because those are the published barrel's contract.
Converting the 22 console files under #6892's rule is the exact shape #7315 removed, at roughly 10 s × 22 per CI run in the isolated dom projects (isolate: true, so each file re-transforms the graph). Neither card anticipated the other.
What a decision needs to weigh (not decided here)
Leave @object-ui/app-shell uncovered, recorded. The gate gains a named exclusion with this card as its reason, so the remaining-population count stops carrying 23 sites nobody intends to convert. Cheapest; the console's 22 tests keep judging a frozen surface, which is the defect finding(test-infra): 298 more vi.mock factories freeze a workspace package's export surface — the per-specifier sweep worklist #6892 exists to remove — but only for this one specifier, and objectui#6580's measurement says the alternative is minutes of CI per run.
Convert with a cheaper obtain. The console tests could inherit from a lighter entry (a packages/app-shell/src/index.lite.ts or a sub-path export without the 13 side-effect imports) — a new public sub-path is a contract change and belongs to a maintainer; or the console's vitest alias could point at built dist — objectui#6580's dev ruled that out by measurement (CI's test job runs no build, dist absent at test time).
Pay the cost. Measure the real wall-clock delta on today's tree across the 4 test shards before assuming 10 s × 22; vitest's per-worker transform cache may amortise some of it. If the delta is small the conflict dissolves; if it is minutes, it is a maintainer's call.
The seat's reading, for whoever triages: (1) is the only route an execution seat can take without a ruling, and it should be the slice-9 shape only if a maintainer confirms; (3)'s measurement is the cheapest next step and could be an S-sized dispatch on this card. Slice 9 of objectui#6892 proceeds on @object-ui/plugin-detail meanwhile.
Verification recipe
git fetch origin main
git grep -l "vi.mock('@object-ui/app-shell'" origin/main -- apps packages | wc -l # 22
git show origin/main:packages/app-shell/src/index.ts | grep -c "^import '\./" # 13
git show origin/main:apps/console/vite.config.ts | sed -n '473p' # the source alias
Filed by the
domain:devx @ objectuiexecution seat (PM sessionsession_01FhBNJcLRZLe8M87VcUgpKr, R46, 2026-09-06T22:25Z) while selecting slice 9 of objectui#6892. Two standing rulings conflict on one specifier; the seat acted on the stricter (did not convert) and files the conflict here instead of deciding it. Dedup: an MCP issue search for the conflict returns nothing; the control query returns objectui#6580 itself.The two rulings
pm:dispatched, slices 1–8 landed): everyvi.mockfactory on a workspace specifier obtains the real module and spreads it first, so a renamed or removed export is caught by the test that mocks it instead of by a user.scripts/check-vi-mock-inherit.mjsenforces it for 13 covered specifiers as of PR test(vi-mock): inherit the real @object-ui/permissions surface in 24 vi.mock factories #8163 (310c0ab19).@object-ui/app-shellis the largest uncovered one: 23 frozen factories in 22 files, all underapps/console, zero already inheriting (slice-8 census on571b4870d; file count re-read by the seat on9bfd61848).domain:devxseat of R40):importOriginal('@object-ui/app-shell')in a console test costs ~10.0 s per file becauseapps/console/vite.config.ts:473aliases the specifier topackages/app-shell/src, whose barrel (454 lines on9bfd61848, 13 bare side-effect imports:./services/builtinComponents.js, six console widgets, six view renderers,./views/metadata-admin/register-builtins.js) is transformed on demand. Its dispatch ruling chose lever (c) — removeimportOriginalfrom the three console tests that had it — and explicitly stopped lever (b), touching the barrel's side-effect imports, because those are the published barrel's contract.Converting the 22 console files under #6892's rule is the exact shape #7315 removed, at roughly 10 s × 22 per CI run in the isolated
domprojects (isolate: true, so each file re-transforms the graph). Neither card anticipated the other.What a decision needs to weigh (not decided here)
@object-ui/app-shelluncovered, recorded. The gate gains a named exclusion with this card as its reason, so the remaining-population count stops carrying 23 sites nobody intends to convert. Cheapest; the console's 22 tests keep judging a frozen surface, which is the defect finding(test-infra): 298 morevi.mockfactories freeze a workspace package's export surface — the per-specifier sweep worklist #6892 exists to remove — but only for this one specifier, and objectui#6580's measurement says the alternative is minutes of CI per run.packages/app-shell/src/index.lite.tsor a sub-path export without the 13 side-effect imports) — a new public sub-path is a contract change and belongs to a maintainer; or the console's vitest alias could point at builtdist— objectui#6580's dev ruled that out by measurement (CI's test job runs no build,distabsent at test time).The seat's reading, for whoever triages: (1) is the only route an execution seat can take without a ruling, and it should be the slice-9 shape only if a maintainer confirms; (3)'s measurement is the cheapest next step and could be an S-sized dispatch on this card. Slice 9 of objectui#6892 proceeds on
@object-ui/plugin-detailmeanwhile.Verification recipe
Refs objectui#6892, objectui#6580, PR #7315, PR #8163.