Skip to content

test(vi-mock): inherit the real @object-ui/plugin-designer surface in 10 vi.mock factories - #8233

Merged
baozhoutao merged 2 commits into
mainfrom
claude/issue-6892-vi-mock-inherit-slice11-plugin-designer
Sep 7, 2026
Merged

test(vi-mock): inherit the real @object-ui/plugin-designer surface in 10 vi.mock factories#8233
baozhoutao merged 2 commits into
mainfrom
claude/issue-6892-vi-mock-inherit-slice11-plugin-designer

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Part of #6892 (slice 11: @object-ui/plugin-designer)

Eleventh slice of the per-specifier vi.mock sweep. All ten frozen factories on @object-ui/plugin-designer now inherit the real module's export surface, and the specifier joins COVERED_SPECIFIERS in this same PR — the gate's documented precondition (zero frozen, then admit).

Base: ecf8e726e (carries PR #8207, slice 10). Head at the time of every reading below: 89fb451e2.

STEP 0 — PROCEED

Method. The static import graph was walked from packages/plugin-designer/src/index.tsx with the TypeScript parser, every module-scope statement of every reached module classified, TS ESM './x.js' resolved to ./x.ts/.tsx, and the alias table read out of vitest.config.mts itself. It was then corroborated empirically by importing the real barrel under both vitest projects the ten sites run in.

Graph. 619 modules, 6,825 module-scope statements (2,850 import/export, 1,456 fn/class declarations, 1,099 bindings, 968 type declarations, 452 other) over fourteen workspace packages: components 206, core 95, fields 77, react 64, plugin-grid 31, plugin-designer 29, plugin-form 28, i18n 27, types 18, mobile 16, permissions 10, sdui-parser 8, data-objectstack 5, providers 5. 98 bare side-effect imports (the @object-ui/components renderer cascade) and one CSS import, inert because the root config declares no css option.

Registrations — NOT inert, and NOT bare. 130 module-scope ComponentRegistry.register(...) calls, zero of them bare: ui 89, plugin-designer 10, element 10, page 7, action 5, plugin-form 4, plugin-grid 2, view 2, record 1. The five rows in packages/components/src/renderers/layout/page.tsx that read as bare carry namespace: 'ui' through the spread pageMeta constant (page.tsx:663), so register()'s deprecation console.warn cannot fire. The namespace lives in register()'s third argument, never in the registered key — slice 10's correction, re-confirmed here. Beyond registration the only effects are the benign class slice 7 already measured in packages/fields: five registerFieldRenderer(...) map writes, one setCellRendererResolver(...) assignment, registerAllFields(), one subscribeDataChanges listener add and two forEach registration loops. Zero timers, globals, storage, fetch or connections.

Empirical import, per project. Zero console.warn and zero console.error in both, 29 exports in both.

project isolated cold import (3 runs) median registry keys
dom (light setup; the nine app-shell files) 6890 / 6895 / 6621 ms 6890 ms 0 -> 405
apps/console project (merged config, HEAVY vitest.setup.dom.tsx; the console file) 538 / 551 / 506 ms 538 ms 391 -> 421

The order-of-magnitude gap is slice 10's finding repeated: the console project's setup has already loaded 391 registry keys before the barrel is asked for. Neither number decides anything.

Marginal cost, in the files that pay it (three runs each, Duration medians):

file frozen inheriting marginal
packages/app-shell/.../AppContent.bootRedirectCoverage.test.tsx (app-shell, dom) 9.49 / 9.19 / 9.08 s -> 9.19 s 9.70 / 9.55 / 8.92 s -> 9.55 s +0.36 s
apps/console/src/__tests__/AppContent.systemHubRoutes.test.tsx (console project) 18.84 / 18.60 / 19.05 s -> 18.84 s 20.98 / 19.22 / 19.00 s -> 19.22 s +0.38 s
packages/app-shell/.../AppContent.noAppsCta.test.tsx (the file that actually renders a designer route) 12.65 / 14.64 s 13.80 / 12.03 s within noise
packages/app-shell/.../AppContent.pseudoRouteSegments.test.tsx (ditto) 10.65 / 11.36 s 10.20 / 10.17 s within noise

Aggregate — the number CI pays, and the one that decides. The ten files as ONE invocation, including two legs taken as an interleaved A/B against a committed tree so machine drift could not decide it:

state runs median
frozen 35.05 / 32.72 / 39.14 / 37.65 s 36.35 s
inheriting 39.99 / 38.20 / 48.13 / 44.81 / 36.23 s 39.99 s

+3.6 s (~+10%) for the whole slice, 103/103 tests green in both states — the same order as slice 10's +2.7 s, and nowhere near the retired objectui#6580's ~10 s x 22 files STOP band. Verdict: PROCEED.

Mechanism, measured rather than argued. Every one of the ten files already holds 590 of the barrel's 619 modules at module scope (with the mocked specifiers excluded from the walk), so inheriting adds exactly the 29 modules of packages/plugin-designer/src itself. That is why the per-file marginal is a third of a second against a 6.9 s cold import.

⚠️ A failure mode this worklist had not met, and the one repair beyond the factories

Two of the ten went red on load timing, not on behaviour — and only in the ten-file invocation, never alone. AppContent reaches CreateAppPage only through React.lazy(() => import('@object-ui/plugin-designer')) (AppContent.tsx:73-75), so an inheriting factory first runs when that lazy boundary resolves — i.e. inside the RTL findByTestId budget of the two files that assert on the rendered designer page. Alone they pass; with ten files in flight the transform pipeline is saturated, the 29 added modules do not fit in 1000 ms, and the assertion fails while the shell is still booting (Unable to find an element by data-testid=create-app-page, 1021 ms, with the boot screen still on the page).

The repair is the one AGENTS.md prescribes for an unbounded module load counted against a bounded window: a module-scope import '@object-ui/plugin-designer'; in exactly those two files, which moves the cost into the import phase where no timeout applies. The specifier is byte-identical to the component's own, so ESM hands the lazy factory the already-resolved module. No assertion, and no test's behaviour, was touched; the timeout was NOT raised. Five subsequent aggregate runs are green. This is declared as a deviation from the dispatch's "the ten factories and nothing else" surface, because it is two extra lines in two of those same ten files.

Census, through the gate's own exported scan()

Re-derived on ecf8e726e with covered widened in memory to the 22 workspace specifiers any vi.mock call site names; the constant on disk was never widened-and-reverted.

specifier judged inheriting before frozen before inheriting after frozen after
@object-ui/plugin-designer 10 0 10 10 0

Owning packages: 9 under packages/app-shell, 1 under apps/console — the first slice on this worklist to reach outside packages/. All ten are one syntactic shape (the zero-parameter object-literal arrow), each hand-listing the same three of the barrel's 29 exports, so the repair is the same factory shape ten times: shape count = 1.

Population: 659 judged, 609 inherit, 50 frozen before -> 40 frozen after, no site moving the other way. Gate verdict line on the final head: 602 call site(s) on ... 16 specifiers ... judged (602 inherit, 0 auto-mocked); 4403 tracked source file(s), 2677 test-named; 606 carry a mock.

⚠️ Like slices 4 and 7, this specifier had zero already-inheriting sites, so there is no free confirmation — the suite runs are the evidence, which is weaker than a pre-existing green site, and the full app-shell and console suites were run for that reason.

Neighbour reading

Every other vi.mock factory in all ten files was classified through the gate before editing, then judged against the walked graph. Zero neighbouring repairs owed, predicted in advance:

neighbour sites verdict
@object-ui/auth 10 already inheriting
@object-ui/i18n 10 already inheriting
@object-ui/react 8 already inheriting
@object-ui/plugin-form 1 already inheriting
local whole-module replacements 39 out of scope by construction
third-party factories 0

Slice 6's collection-death class needs a frozen neighbour that the newly-real graph reaches. There is not a single third-party factory in this family at all, so the frozen lucide-react neighbour that killed 15 files in slice 6 cannot exist here even though this barrel's graph reads lucide-react 106 times. No file among the ten mocks @object-ui/app-shell — re-derived on this base, the parked specifier (objectui#8173) stays parked.

Dependency-edge reading

packages/app-shell/package.json declares @object-ui/plugin-designer as a workspace:^ peer (:99) and a workspace:* dev dependency (:116); apps/console/package.json declares it as a workspace:* devDependency (:76) — a refinement on the dispatch, which named the line but not the section. Both edges are declared, so the typed generic importOriginal<typeof import('@object-ui/plugin-designer')>() is licensed in all ten files, and check:phantom-deps exits 0 on the final head.

Positive control

Two legs from the committed tree, each under a trap with absolute paths, on packages/app-shell/src/console/__tests__/AppContent.bootRedirectCoverage.test.tsx. Every mutation is proven on disk by an anchored count and a changed blob before the gate result is read; every restore is proven by STATE — git hash-object equalling the HEAD blob and git diff HEAD naming zero paths — never by a checkout exit code. The on-disk guard is anchored on the designer spread line specifically, because this file carries three other spreads (its already-inheriting auth, i18n and react neighbours) and a file-wide count would never fall to zero. No dist preflight is owed: the gate is a source-text scanner and both configs alias the specifier to source.

leg blob gate
control, unmutated 3426082ebfa89448a5fde77036df045e96461b4f exit 0
1 — obtain, bind, never spread 50cbc4da3102f15904c97b3b87f23b2de6fe6977 exit 1, naming AppContent.bootRedirectCoverage.test.tsx:37 with reason the factory obtains the real module but never spreads it
2 — full freeze (checked out from the base) 9d07165133ee3e8d8281ea26ea89660f9b36c6d8 exit 1, same site, reason the factory never obtains the real module

Leg 1 is the shape objectui#8183 names as the only valid control: a spread that merely mentions the obtained module reads as inheriting and would be a void reading. Leg 2's blob is byte-identical to this file's base blob, so the leg provably reconstructed the exact frozen form the gate must reject. Both restores: hash equal to HEAD, git diff HEAD empty, final git status clean.

Covered-set diff — 15 -> 16

Exactly one line added to COVERED_SPECIFIERS ('@object-ui/plugin-designer'), the header's count word fifteen -> sixteen, the slice-11 per-specifier record added in the shape slices 5-10 used, and the remaining-population paragraph refreshed 50 -> 40 with @object-ui/app-shell still annotated PARKED under objectui#8173. The record was written without the shape objectui#8117's pin rejects (a backticked test filename followed by a comma or a bracket): a mechanical scan of the whole gate source for that pattern returns 0 matches, and the pin itself needed no edit — confirmed by running it, since it still derives its names from COVERED_SPECIFIERS.

Gates — every exit code captured by redirect-then-capture, pinned to 89fb451e2

gate result
node scripts/check-vi-mock-inherit.mjs exit 0 — 602 judged over sixteen specifiers, 602 inherit, 0 auto-mocked, 0 frozen for @object-ui/plugin-designer
vitest run scripts/__tests__/check-vi-mock-inherit.test.ts exit 0, 67/67, the pin file UNEDITED
vitest run scripts/__tests__/ (whole directory) exit 0, 115 files / 3415 tests
the ten converted files, one invocation exit 0, 10 files / 103 tests — the same count as the same ten frozen, so no test was lost, gained or died during collection
vitest run packages/app-shell/ (4 shards) exit 0 all four — 639 files, 6135 passed, 1 skipped, 0 failed
vitest run apps/console/ exit 0, 89 files / 1052 tests
pnpm --filter @object-ui/app-shell type-check exit 0; non-vacuous by --listFiles — all nine edited app-shell files in a 4,429-file program
pnpm --filter @object-ui/console type-check exit 0; non-vacuous by --listFiles — the edited console file in a 3,539-file program
pnpm type-check:scripts exit 0
pnpm lint:root exit 0 (0 errors, 32 warnings)
pnpm --filter @object-ui/app-shell lint exit 0 (0 errors, 2907 warnings)
pnpm --filter @object-ui/console lint exit 0 (0 errors, 208 warnings)
targeted eslint --no-inline-config --format json over the 11 non-changeset paths exit 0 — 11 files, 0 errors, 3 warnings
pnpm check:phantom-deps exit 0 (40 packages, 3976 files, 20148 specifiers)
pnpm check:control-bytes + grep -naP self-scan of every changed path exit 0; grep exit 1, no match
node scripts/check-changeset-presence.mjs exit 0 — one EMPTY-frontmatter changeset (apps/console publishes as @object-ui/console, so one was owed)
node scripts/check-changeset-no-major.mjs exit 0
node scripts/check-governed-queue-guard.mjs --test (12 paths) NOT GOVERNED (exit 0, 12 paths against 5 governed surfaces)
pnpm check:entry-guard exit 0
pnpm check:vi-mock-specifiers exit 0

The dependency closure was built first (pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' --filter '@object-ui/console^...' build, exit 0) — the flag goes BEFORE the filter. Live E2E (informational) is base-red on every branch today for an upstream reason (#7990 / objectstack#16186) and is not this PR's.

Files changed (12)

  • The ten AppContent.*.test.tsx siblings carrying a frozen @object-ui/plugin-designer factory — nine under packages/app-shell/src/console/__tests__/, one under apps/console/src/__tests__/. Two of them additionally gain the module-scope import described above.
  • scripts/check-vi-mock-inherit.mjsCOVERED_SPECIFIERS gains exactly '@object-ui/plugin-designer'; slice-11 header record; fifteen -> sixteen; remaining population 50 -> 40.
  • .changeset/vi-mock-inherit-slice11-plugin-designer.md — EMPTY frontmatter.

No product source, no package.json, nothing under packages/plugin-designer/src/**, and no assertion was touched.


🤖 Generated with Claude Code

https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr


Generated by Claude Code

… 10 factories

All ten `vi.mock('@object-ui/plugin-designer', ...)` factories in the tree
hand-listed three of the barrel's 29 exports, so any export a file's import
graph reads at module scope resolves to `undefined` and the file dies during
COLLECTION with zero failed assertions (objectui#6892).

Each factory now obtains the real module through the typed generic and spreads
it FIRST, keeping every hand-written stub after it. Both consumers declare the
edge (`packages/app-shell` dev + peer, `apps/console` dev), so the typed
spelling is licensed.

Two of the ten also gain a module-scope `import '@object-ui/plugin-designer'`.
`AppContent` reaches `CreateAppPage` only through
`React.lazy(() => import('@object-ui/plugin-designer'))`, so the now-awaiting
factory first runs inside those files' `findByTestId` budget; under a saturated
transform pipeline the barrel's 619-module graph does not fit in it and the
file goes red on LOAD rather than on behaviour. Moving the cost into the import
phase is the repo's documented repair for that class. No assertion changed.

Part of #6892 (slice 11: @object-ui/plugin-designer)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
The sweep in the previous commit takes this specifier to zero frozen, which is
the gate's documented precondition for joining COVERED_SPECIFIERS. Fifteen
members become sixteen; the header gains the slice-11 per-specifier record in
the shape slices 5-10 used, and the remaining-population paragraph is refreshed
from this run's census (50 -> 40 frozen, @object-ui/app-shell still PARKED under
objectui#8173).

Gate on this tree: exit 0, 602 call sites judged over sixteen specifiers, 602
inherit, 0 frozen for @object-ui/plugin-designer.

Part of #6892 (slice 11: @object-ui/plugin-designer)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3189.7 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-B3vw1vMF.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 498.00KB 113.91KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 189.11KB 52.55KB
fields (index.js) 243.04KB 61.36KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.16KB 3.68KB
plugin-calendar (index.js) 47.67KB 13.25KB
plugin-charts (index.js) 70.62KB 19.71KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 247.68KB 63.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.58KB 56.63KB
plugin-kanban (index.js) 52.83KB 14.63KB
plugin-list (index.js) 113.35KB 27.73KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.46KB 20.80KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copy link
Copy Markdown
Contributor

Standing down on Live E2E (informational) for this PR — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-07T02:32Z.

That check is informational (not in the main ruleset's required contexts) and is red on the base branch for an upstream reason anchored on objectui#7990 / objectstack#16186; this PR touches ten test files, a gate script and an empty changeset, none of which the Live E2E suite exercises. No re-run is requested. Every required check is judged on its own conclusion; this PR flips to ready only when all of them read completed / success on 89fb451e2.


Generated by Claude Code

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Flip deferred, not withheld — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-07T02:42Z.

CI on 89fb451e2 converged all green at 02:40:55Z (31 checks; Live E2E (informational) excluded per the standing-down note above), so this PR is due to flip → post-flip guard → auto-merge SQUASH → added_to_merge_queue. The seat's write channel for the flip and the auto-merge arm (the MCP GitHub tools on the baozhoutao identity) returned API rate limit already exceeded at 02:41Z; REST cannot un-draft a pull request and this container's GraphQL is pinned to a fixed operation set, so no other channel exists for those two writes. The flip is retried at the seat's next wake (patrol at 02:57Z or an earlier landing wake), and the Armed note follows it with the usual timestamps. Nothing about the PR's readiness changed.


Generated by Claude Code

Copy link
Copy Markdown
Contributor

Armed — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

  • CI on 89fb451e2 converged all green at 02:40:55Z (31 checks; Live E2E (informational) excluded per the standing-down note above). The flip waited on the seat's write channel (rate-limited on the user identity from 02:41Z; see the deferral note) and went through on the first retry after the limit reset.
  • Ready for review at 03:12:58Z; post-flip Governed Surface Queue Guard completed/success at 03:13:19Z.
  • Auto-merge SQUASH enabled; added_to_merge_queue on the REST timeline at 03:13:27Z (read 03:13:31Z).

Landing stroke follows the merge: content probe on re-fetched origin/main ('@object-ui/plugin-designer' inside COVERED_SPECIFIERS, expected 16 entries, and the module-scope import '@object-ui/plugin-designer' in the two lazy-reach files, with a control), LANDED here and on objectui#6892 (which stays open, Part of), then the slice-12 claim (@object-ui/plugin-list).


Generated by Claude Code

Merged via the queue into main with commit 190cd07 Sep 7, 2026
33 of 34 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-6892-vi-mock-inherit-slice11-plugin-designer branch September 7, 2026 03:28

Copy link
Copy Markdown
Contributor

LANDED — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

Merged at 2026-09-07T03:28:55Z as 190cd07b3 (squash). Content probe on re-fetched origin/main at 03:29Z: COVERED_SPECIFIERS in scripts/check-vi-mock-inherit.mjs reads 16 entries with '@object-ui/plugin-designer' at position 16; control plugin-chatbot present; the module-scope import '@object-ui/plugin-designer'; is on main in exactly the two lazy-reach files under packages/app-shell/src/console/__tests__.

Slice 12 (@object-ui/plugin-list) is claimed on objectui#6892 next; the card stays open (Part of).


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants