Skip to content

test(vi-mock): inherit the real @object-ui/fields surface in 8 vi.mock factories (objectui#6892 slice 13) - #8265

Merged
baozhoutao merged 5 commits into
mainfrom
claude/issue-6892-vi-mock-inherit-slice13-fields
Sep 7, 2026
Merged

test(vi-mock): inherit the real @object-ui/fields surface in 8 vi.mock factories (objectui#6892 slice 13)#8265
baozhoutao merged 5 commits into
mainfrom
claude/issue-6892-vi-mock-inherit-slice13-fields

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Part of #6892 (slice 13: @object-ui/fields)

Base 340489334 (slice 12, PR #8250). origin/main moved to cdbc852e9 mid-slice; it was merged
in with a merge commit (never rebased) after checking the incoming diff for new vi.mock sites on
this specifier, and every reading below is pinned to the final head c389601b2.

⚠️ Angle-bracket punctuation is spelled out in WORDS in this body ("as its TYPE ARGUMENT", "a JSX
probe element"). GitHub's body sanitizer eats short angle-bracket-shaped fragments, code spans
included — AGENTS.md's "GitHub mutates body BYTES" rule. The code itself uses ordinary punctuation.

The repair

Eight vi.mock factories froze this barrel's export surface: each obtained nothing and hand-listed
one or two of its 140 exports. Each now takes an importOriginal callback, awaits it with
typeof import('@object-ui/fields') as its TYPE ARGUMENT, and spreads the result first; the
hand-written doubles stay as the overrides after the spread, because they are the behaviour those
tests assert. Not one assertion line moved — the only removed lines are the eight factory headers.

The two sites that already inherited keep their own spelling untouched.

STEP 0 — PROCEED

Method. A TypeScript-parser walk of the static import graph from packages/fields/src/index.tsx,
with the alias table read out of vitest.config.mts itself and TS ESM './x.js' resolved to
'./x.ts' / '.tsx'; every module-scope statement classified; then a second AST pass that stops at
every function-like boundary
, so a call inside an arrow body is not counted as an import-time
effect. Corroborated empirically by importing the real barrel in both projects the sites run in.

Graph. 504 modules, 5,455 module-scope statements over nine workspace packages — components 205,
core 95, fields 77, react 64, i18n 27, types 17, sdui-parser 8, data-objectstack 6,
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. 51 external leaves, react 240 and
lucide-react 76 by count.

Not inert, and the class of the effect is what settled it. 112 module-scope
ComponentRegistry.register(...) calls, zero of them bareui 90, element 10, page 7,
action 5, with the page.tsx renderer's five rows carrying ui through the spread pageMeta
constant (the namespace lives in register()'s THIRD argument, which is what was read). So the
deprecation console.warn in register() cannot fire.

The barrel's own module-scope effects are the benign packages/fields class slices 7 and 12
recorded — confirmed here rather than inherited: five registerFieldRenderer(...) map writes, one
setCellRendererResolver(...) assignment, and registerAllFields() at the last line, which loops the
widget map into ComponentRegistry.register under the field namespace wrapping a React.lazy
loader — so registering a widget does not load it. Beyond registration the graph holds only
allocation: 171 React.forwardRef, 81 new Set, 30 createContext, 14 Object.freeze, 13 new Map,
13 cva, 11 createSafeTranslation, four Symbol.for, and one subscribeDataChanges (a Set.add
into a module-level listener set). The second pass reports ZERO timers, globals, storage, fetch
and connections at import time.

Empirically, importing the real barrel exports 140 names and emits zero console.warn and
zero console.error in both projects.

Import cost

The ten sites span two projects and the two answer the cost question in opposite directions, so
taking one alone would have been useless. Eight run in the light dom project;
AccessExplainPanel.test.tsx and AssignedUsersSection.test.tsx are in heavyDomTests and run in
dom-heavy — whose setup, vitest.setup.dom.tsx, already imports this very barrel at module
scope
.

isolated cold import median exports registry warn / error
light dom (6225 / 5712 / 5799 ms) 5.80 s 140 0 to 370 keys 0 / 0
dom-heavy (0 / 0 / 0 ms) 0 ms 140 391, unmoved 0 / 0

The dom-heavy zero is the mechanism, not a rounding artefact: the module is resident before any test
file in that project is transformed. For two of the ten, inheriting cannot cost anything at all.

Statically, the eight converted files already hold 352 to 422 of the barrel's 504 modules with
their frozen specifiers cut as leaves, so inheriting adds 82 to 152. Measured in the files that pay it:

file (project, modules already held) frozen median inheriting median marginal
AssignedUsersSection.test.tsx (dom-heavy, 352/504) 10.54 s 10.25 s -0.29 s
PermissionMatrixEditor.basics.test.tsx (dom, 422/504) 9.82 s 9.87 s +0.05 s
FlowReferenceField.lookup.test.tsx (dom, 358/504) 9.14 s 10.08 s +0.94 s

The aggregate decides, taken as an interleaved A/B against the committed tree (the frozen leg
restored from the base blob, the inheriting leg from HEAD, each proven on disk before it was timed):

pair frozen inheriting marginal
1 25.38 s 25.88 s +0.50 s
2 25.31 s 25.96 s +0.65 s

About 2% on a ~25.4 s aggregate — inside the noise band and nowhere near objectui#6580's STOP
band, with 58 of 58 tests green in every state and the same 10 files collected in every run.

The React.lazy clause — slice 11's class is ABSENT here

The only import('@object-ui/fields') anywhere in the tree is a type position
(typeof import(...)) inside a factory that already inherits, so no consuming module reaches this
barrel through React.lazy. The two module-scope React.lazy calls the graph does contain load
package-local widget modules (./MarkdownContent.js, ./ImageCropperDialog.js), and the widget
loader map is lazy by construction — all of it inside the package, which the real barrel resolves
itself. The test comment the dispatch flagged (ActionParamDialog.dialogRecord.test.tsx, naming a
lazy of ./widgets/RadioField) is accurate about the mechanism — fieldWidgetMap.radio is a dynamic
import('./widgets/RadioField.js') wrapped by React.lazy(loader) in registerField — and that file
carries no vi.mock at all, so it is not one of the ten and touches no converted file's
assertion window. No file went red on LOAD in the aggregate run. No module-scope import repair was
owed, and none was made.

STEP 1 — the census, through the gate's own exported scan()

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

owning package judged inheriting before frozen before inheriting after frozen after
packages/app-shell 9 1 8 9 0
packages/plugin-detail 1 1 0 1 0
total 10 2 8 10 0

Matches the slice-12 forecast (10 / 2 / 8) exactly. Population over all 22 specifiers: 660 judged,
frozen 31 to 23, inherits 629 to 637; a diff of the two per-specifier tables with the
@object-ui/fields row removed is EMPTY — no site moved the other way.

Shape count. All eight frozen factories are ONE syntactic shape — the zero-parameter
object-literal arrow — carrying THREE double families: a null-rendering RecordPickerDialog in
three files; a CapabilityMultiSelectField JSX probe paired with a parseCapabilityNames function
double in three; a LookupField JSX probe in two. Each hand-listed one or two of 140 exports.

Free confirmation — present, and the strongest form this worklist has had. Two of the ten already
inherited the real barrel on main and pass, one of them from genuinely cold (it holds 0 of the 504
modules by any other route). On top of that, the dom-heavy setup imports this barrel at module scope
for every test in that project, so the real module was known to load there before anything was
converted.

Neighbour reading — ZERO repairs, predicted in advance from the walk

Every other factory in all ten files was classified through the gate's own findCallSites before
any edit, then judged against the walked graph under slice 12's sharpened rule: a frozen neighbour is
dangerous when the newly-real graph reads a missing binding from it at module scope.

neighbour count state what the newly-real fields graph reads from it at module scope provided?
@object-ui/react 4 already inheriting (spreads the real module) subscribeDataChanges, read by components/src/hooks/related-count-store.ts at module scope yes — by the spread; two of the four also list it explicitly, with a comment saying why
@object-ui/auth 1 already inheriting (spreads the real module) nothing — the fields graph does not reach @object-ui/auth n/a
./useMetadata (4), ./AssignedUsersSection (3), ../previews/useObjectFields (2) 9 local whole-module replacements, out of scope by construction nothing — this barrel's graph reaches no module under packages/app-shell n/a, safe by REACH
third-party factories 0

⭐ The reading worth carrying: there is not one third-party factory in the ten files, so slice 6's
collection-death class cannot fire here even though this graph reads lucide-react 76 times and
reaches sonner. And the one binding this graph does read at module scope from a mocked workspace
specifier — subscribeDataChanges — was already provided by every factory that could starve it. The
prediction was made from the walk and then confirmed by the runs: zero neighbouring repairs.

No file among the ten mocks @object-ui/app-shell — re-derived on this base, so the parked
specifier (objectui#8173) stays parked and untouched.

Dependency edges

Confirmed on the base exactly as dispatched: packages/app-shell/package.json:76 (workspace:*),
packages/plugin-detail/package.json:41 (peer workspace:^) and :52 (dev workspace:*),
apps/console/package.json:67 (workspace:*). All eight converted files live in packages/app-shell,
so app-shell's edge is what licenses the typed generic. check:phantom-deps exits 0.

Reverse verification that the generic is real, not erased: swapping one factory's type argument for
a module that does not exist turns tsc -p tsconfig.test.json red at exactly that line
(error TS2307: Cannot find module ...), and restoring returns the file's blob to the HEAD one. The
type argument is resolved against the declared edge.

Covered set: 17 to 18

'@object-ui/fields' joins COVERED_SPECIFIERS in this same PR, exact string match, one line — the
list stays grow-only. The header's count word moves seventeen to eighteen, the slice-13 record is added
in the shape slices 5 to 12 used, and the remaining-population paragraph is refreshed 31 to 23.

Remaining population after this slice: one specifier. @object-ui/app-shell, 23 of 23 frozen,
PARKED under objectui#8173 and re-annotated as such. Every other workspace specifier any vi.mock
call site in this tree names is covered and reads zero frozen.

The record was written without the shape objectui#8117's pin rejects (a backticked test filename
followed by a comma or a closing bracket); a mechanical grep -nP for that pattern over the whole gate
source returns 0 matches. The pin itself needed no edit — it still derives its names from
COVERED_SPECIFIERS — which was confirmed by running it: 67 of 67, file unedited.

Positive control — two legs, from the committed tree

Target packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.basics.test.tsx, HEAD blob
a163daa36db3652a6a83319a8c0f0a973d462922. Both legs ran under a trap with absolute paths. Each
mutation was proven on disk by a count anchored on the fields spread line specifically — this file
carries other spreads, so a file-wide count could never fall to zero — and by a changed blob, before
the gate result was read. Each restore is proven by STATE, never by a checkout exit code.

leg on-disk proof mutated blob gate
control, unmutated spread-line count 1 a163daa3… (= HEAD) exit 0, OK
1 — obtains, never spreads spread-line count 1 to 0, injected marker 1 f6d45251… exit 1, names …basics.test.tsx:39"the factory obtains the real module but never spreads it"
2 — full freeze spread-line count 1 to 0, frozen head 1, byte-identical to this file at the base 340489334 78873e39… exit 1, names the same site — "the factory never obtains the real module"

Leg 1 is objectui#8183's canonical control shape, not the mention-only one. After each leg
git hash-object equalled the HEAD blob and git diff HEAD named zero paths; git status is
clean. No dist preflight is owed: the gate is a source-text scanner that reads tracked paths off disk,
and both configs alias this specifier to source.

Gates — all pinned to c389601b2, exit codes captured by redirect-then-capture

gate result
node scripts/check-vi-mock-inherit.mjs 0 — 623 of 623 inherit over eighteen specifiers, 0 frozen for @object-ui/fields, 0 auto-mocked
vitest run scripts/__tests__/check-vi-mock-inherit.test.ts 0 — 67 / 67, file unedited
vitest run scripts/__tests__/ (whole directory) 0 — 115 files, 3415 tests
the ten converted call sites, in their projects 0 — 10 files, 58 tests; identical count to the same ten frozen
vitest run packages/app-shell/ in 4 shards 0 all four — 644 files, 6200 passed, 1 skipped, 0 failed
vitest run packages/plugin-detail/ 0 — 134 files, 1209 tests
app-shell type-check 0; non-vacuous by --listFiles — all 8 edited files in a 4,449-file program
plugin-detail type-check 0
pnpm type-check:scripts 0
pnpm lint:root 0 — 0 errors, 32 warnings
app-shell lint 0 — 0 errors, 2914 warnings
plugin-detail lint 0 — 0 errors, 897 warnings
targeted eslint --no-inline-config --format json over the 9 non-changeset paths 0 — 9 files, 0 errors, 19 warnings (corroboration, not a narrowing: the whole-package lints already cover every changed path, and type-aware linting is not enabled in eslint.config.js)
pnpm check:phantom-deps 0
pnpm check:control-bytes 0, plus a grep -naP control-byte self-scan of all 10 changed paths (no match)
node scripts/check-changeset-presence.mjs 0 — it demanded one, and one empty-frontmatter changeset answers it
node scripts/check-changeset-no-major.mjs 0
node scripts/check-governed-queue-guard.mjs --test NOT GOVERNED — 10 paths against 5 governed surfaces, none matched
pnpm check:entry-guard 0
pnpm check:vi-mock-specifiers 0

Dependency closure built first (pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' --filter '@object-ui/plugin-detail^...' build, exit 0 — the flag before the filters).

The last commit (c389601b2) is a comment-only correction inside the gate's own header:
git diff 25a4b7607..c389601b2 --name-only names scripts/check-vi-mock-inherit.mjs and nothing else,
so packages/** is byte-identical between the two and the package suites, type-checks and lints above
measure the shipping tree. The ratchet family — the gate itself, its pin, the whole scripts/__tests__
directory, type-check:scripts and lint:root — was re-run on c389601b2 after that push.

Changeset

node scripts/check-changeset-presence.mjs demanded one (eight test files under a published package),
so .changeset/vi-mock-inherit-slice13-fields.md declares an empty frontmatter: test-only, releases
nothing. No skip-changeset label — that mechanism is not this repository's.

In-flight overlap

No open PR touches scripts/check-vi-mock-inherit.mjs or any of the eight converted files, and none
adds a vi.mock call site on this specifier — checked across the 12 open pull requests. #8164 edits a
different file in the same directory, with no textual or semantic overlap.


Generated by Claude Code

…k factories

Every one of the eight frozen factories hand-listed one or two of the
barrel's 140 exports, so the next export any module in the file's import
graph reads at module scope would resolve to `undefined` against the
stand-in and the file would die during collection. Each now spreads the
real module first; the hand-written doubles stay as the overrides, which
is the behaviour those tests assert.

No assertion moved. All ten call sites on this specifier (the eight
converted plus the two that already inherited) run 58 tests green in both
states.

Part of objectui#6892 (slice 13).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
The sweep in the previous commit took this specifier to zero frozen, so it
joins COVERED_SPECIFIERS -- the grow-only list whose documented widening
precondition is a sweep, not a judgement. Seventeen members become eighteen
and the gate reads 623 of 623 inheriting.

The header gains the slice-13 record in the shape slices 5 to 12 used: the
graph walk and its import-time effect classification, the two projects the
sites run in and why they answer the cost question in opposite ways, the
neighbour reading, and the refreshed remaining population -- which is now
one specifier, the parked @object-ui/app-shell.

Part of objectui#6892 (slice 13).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Eight test files under a published package changed, so check-changeset-presence
demands a declaration. It is test-only, hence the empty frontmatter.

Part of objectui#6892 (slice 13).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
No new vi.mock site on @object-ui/fields in the incoming commit (checked before
merging: a new frozen site would land the widened gate red). The incoming diff
touches packages/plugin-tree/README.md and scripts/check-doc-snippet-types.mjs,
neither of which this branch reads.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
The clause counted the AccessExplainPanel spec twice, so the eight frozen
sites read as nine. All eight sit under one directory; the breakdown now
says so and adds to eight.

Part of objectui#6892 (slice 13).

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) 3191.4 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-Be-masWs.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) 71.38KB 19.92KB
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.38KB 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

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Armed: PR #8265 flipped ready at 2026-09-07T06:50:43Z on head c389601b2 after CI converged all green (31 checks incl. the informational Live E2E, read 06:50:24Z); post-flip Governed Surface Queue Guard completed/success at 06:51:02Z; auto-merge SQUASH enabled; added_to_merge_queue at 06:51:11Z (read 06:51:16Z). Landing stroke follows the merge: content probe for '@object-ui/fields' in COVERED_SPECIFIERS on re-fetched origin/main (expect 18 entries), then LANDED here and on #6892. — domain:devx @ objectui seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr.


Generated by Claude Code

Merged via the queue into main with commit b6f821a Sep 7, 2026
34 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-6892-vi-mock-inherit-slice13-fields branch September 7, 2026 07:07
@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

LANDED: merged at 2026-09-07T07:07:15Z as b6f821a8b (squash, via the merge queue). Content probe on re-fetched origin/main at b6f821a8b (read 07:07Z): COVERED_SPECIFIERS in scripts/check-vi-mock-inherit.mjs now holds 18 entries and includes '@object-ui/fields'; controls — '@object-ui/plugin-list' present (positive), '@object-ui/app-shell' absent (negative). Merge commit is an ancestor of origin/main. Slice 13 of #6892 closed out on that card. — domain:devx @ objectui seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr.


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