Skip to content

fix(plugin-form): one collapsed / collapsible resolution for the default and drawer arms (objectui#9849 step 1) - #10236

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-9849-collapse-resolution-converge
Sep 24, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-9849-collapse-resolution-converge

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #9849
Clause-②: no

Step (1) of the two the director ruling orders on this card (comment 5749155880, letter E, maintainer 「同意」): 「the three collapsed / collapsible resolutions converge to the declaration-based one objectui#9780 established, before the gate rule lands on it.」 Step (2) (E in projectSectionDivider, deleting SectionDividerGate, re-pinning drawerFormSectionDescription-9834 row 5, the diagnostic pin) is ⛔ not in this PR and stays on the card. That is why the first line says Part of.

What changed

  • fieldGroups.ts gains resolveSectionCollapse, beside projectSectionDivider. It is module-internal: the package barrel src/index.tsx names fieldGroups zero times, and package.json exports declares only ".". It is the ONE resolution of the authored pair, and it follows objectui#9780 letter A:
    • collapsed implies collapsible, read off the declaration and never off the live state.
    • collapsible: false with collapsed: true resolves to collapsed, with the control present.
    • collapsible alone is open, with the control.
    • A section declaring neither member is untouched.
    • A section is only collapsed while it is collapsible, and it is only collapsible when the row the arm draws can carry the control (hostsControl). This states the default arm's 「an untitled bucket is never collapsible」 once, for every arm.
  • ObjectForm.tsx (grouped layout, explicit and derived sections share one loop): the inline objectui#9780 expression moves into the helper. Behaviour is unchanged (see the table).
  • DrawerForm.tsx, both pushes, now call the same helper:
    • The explicit push was still the objectui#9780 trap: it read collapsible alone for the control and collapsed unconditionally for the state.
    • The derived push gated the state on collapsible, which is a third spelling.
    • The unseeded useState replaces a seed that read collapsed a second time. An untoggled section falls back to its declaration inside the helper, as in ObjectForm.
  • .changeset/9849-collapse-resolution-converge.md: patch for @object-ui/plugin-form.

⛔ No new accepted key or value, no new package export, no new prop. DrawerFormSectionConfig and ModalFormSectionConfig are unchanged, and no section map in ObjectForm.tsx copies a new key.

Premise, re-measured on origin/main 62597c5 by printing every collaps line in the four files

  • ObjectForm grouped layout, one site (the objectui#9780 resolution): isCollapsible = Boolean(section.collapsible) || Boolean(section.collapsed), the state collapsedSections[key] ?? section.collapsed, and fields hidden only on label && isCollapsed.
  • DrawerForm explicit push: collapsible: section.collapsible, onToggle only for section.collapsible, and the state collapsedSections[key] ?? section.collapsed read unconditionally, which hides the fields. A useState seed also read s.collapsed.
  • DrawerForm derived push: the state read only when section.collapsible, the control only for section.collapsible.
  • ModalForm: zero collaps lines. It has no resolution of its own. Neither route reads either member, ModalFormSectionConfig declares neither, and ObjectForm's modal map copies neither. So the modal draws every field and no control, whatever the section declares.
  • fieldGroups.ts at base only maps the @objectstack/spec collapse enum onto the pair (deriveFieldGroupSections) and copies a resolved pair onto the row (projectSectionDivider). Neither step is a resolution.

⇒ The code has three resolutions, as the ruling says. objectui#10172, #10161 and #10141 did not move them. But there are only two in behaviour:

  • The derived drawer push agrees with objectui#9780 on every input an author can write. deriveFieldGroupLayout never emits collapsed without collapsible (the deprecated collapsed: true alone maps to 'collapsed', which maps to both), and every keyed group gets a heading (label defaults to the key).
  • Ablation leg 2 below measures this: putting the derived push back on its old resolution reddens nothing.
  • The live trap was the explicit drawer push only.

Before / after, per route

Read by __tests__/collapseResolution-9849.test.tsx through a real renderer. "Before" means the same pin file run against the base source: Tests 9 failed | 21 passed (30). Every failure was on a drawer explicit route or a drawer trap row, and each failed for the right reason (0 controls while the fields were hidden).

route collapsed alone collapsible: false + collapsed collapsible alone neither no heading, no blurb, collapsed no heading, blurb, collapsed alone
ObjectForm default, explicit sections closed + control → same closed + control → same open + control → same open, no control → same open → same open, no control (blurb-only row, objectui#9835 B) → same, not re-pinned here (objectFormSectionMembers-8071 row 8 owns it)
ObjectForm default, derived fieldGroups closed + control → same (both collapse: 'collapsed' and deprecated collapsed: true) n/a open + control → same open, no control → same not author-reachable not author-reachable
ObjectForm formType: 'drawer' (drawer map) ⛔ closed, 0 controls → closed + control ⛔ closed, 0 controls → closed + control same same ⛔ fields hidden, nothing on the page → open see next row
DrawerForm explicit, direct ⛔ closed, 0 controls → closed + control ⛔ closed, 0 controls → closed + control same same ⛔ fields hidden, nothing on the page → open ⛔ blurb drawn, fields hidden, 0 controls → closed, control on the blurb row
DrawerForm derived fieldGroups closed + control → same n/a same same not author-reachable not author-reachable
ModalForm explicit, ObjectForm formType: 'modal', ModalForm derived every field drawn, no control → same (a reading, see below) same same same same same

⚠️ The last column differs between the default arm (open, no control) and the drawer (a control on the blurb row). That is the gate residual (SectionDividerGate, step 2), ⛔ not the resolution. The default arm's blurb-only row carries no collapse pair under objectui#9835 letter B. The drawer's explicit push draws a row for every member, and SectionDivider renders that row when it has a heading or a blurb. Both answers keep the fields reachable, and that is all the new file asserts there.

⚠️ The modal rows are a READING, ⛔ not a ruling. The modal honours neither member, so objectui#9780's one promise (a declared section is never unreachable) holds there trivially. The pin asserts that, and it records "no control" so that step (2)'s 「on every arm」 (ruling E item 1) flips those rows on purpose. Bringing the pair to the modal needs a new member on ModalFormSectionConfig, which this step does not add.

Evidence, all at head 8cb4574b

Pins. New packages/plugin-form/src/__tests__/collapseResolution-9849.test.tsx, 30 rows:

  • one block per route that emits a collapse pair (3 explicit, 2 derived), each asking the objectui#9780 questions;
  • the drawer trap rows;
  • the modal reading.

Every zero is lit: each absent-fields row also reads the heading drawn and the same reader non-empty after a click, and each no-control row is paired on its route with a row where the same reader finds one.

  • Before, on the base source: Tests 9 failed | 21 passed (30).
  • After: 30 passed.

Ablation. Run through ablation-replace.mjs: each anchor hit exactly once, each write was verified on disk by blob hash and marker count, and each restore was proven by state (blob equals HEAD, git diff HEAD empty) with a wrapper trap on EXIT/INT/TERM. The run covered the new file plus collapsedImpliesCollapsible-9780, objectFormSectionMembers-8071 and fieldGroupSections.test.tsx (53 tests). Directions were written down before the run, and all three matched:

leg mutation (blob before → during) result
1 drawer EXPLICIT push back on its old resolution (d0dc3ee90d5b → c0de0a1cc600, marker 0 → 3 → 0) Tests 9 failed | 44 passed (53): exactly the 9 drawer explicit and drawer trap rows. Every ObjectForm row stays green, and so do the #9780 and 8071 files
2 drawer DERIVED push back on its old resolution (d0dc3ee90d5b → 4bda9e2214c5) Tests 53 passed (53): predicted, because the old derived resolution is behaviourally identical on every author-reachable input
3 the ONE helper loses the implication (c24e82e8e24c → 8a713103f65a) Tests 10 failed | 43 passed (53): the collapsed-alone and contradiction rows on all three explicit routes at once, the drawer blurb row, collapsedImpliesCollapsible-9780 rows 1 and 3, and objectFormSectionMembers-8071 row 4. One mutation reddens the default arm and the drawer together, which shows that one path serves both

No dist/ is involved: the suite imports plugin-form from source through the root vitest config, so no dist preflight applies.

Suites and gates (heavy runs under the shared verify lock, VERDICT command-exit 0):

  • pnpm exec vitest run packages/plugin-form/ from the repo root: Test Files 109 passed (109), Tests 1074 passed | 1 skipped (1075).
  • pnpm --filter @object-ui/plugin-form run type-check echoed tsc --noEmit && tsc -p tsconfig.test.json and exited 0, after building the dependency closure (--filter '@object-ui/plugin-form^...' build, exit 0). tsc -p tsconfig.test.json --listFilesOnly lists the new pin file, so its types are checked.
  • Lint, as a DECLARED NARROWING to the 4 touched .ts/.tsx files:
    • population: eslint.config.js applies to **/*.{ts,tsx};
    • count: --format json reports 4 files, 0 errors;
    • invariance: the config enables no type-aware linting (no projectService, no parserOptions.project), so this diff cannot move the verdict of a file it does not touch;
    • warnings on the edited sources are unchanged against BASE (ObjectForm 61 → 61, DrawerForm 22 → 22, fieldGroups 0 → 0). The new pin's 13 warnings are all no-explicit-any schema casts, the sibling pins' pattern;
    • the repo-wide pnpm lint is CI's.
  • pnpm check:control-bytes, check:new-line-citations (0 new), node scripts/check-changeset-presence.mjs (names the changeset), check:changeset-claims, check:pending-changeset-literals, check:test-path-roots, check:vi-mock-specifiers and check:vi-mock-override-shape all exited 0. check-governed-queue-guard --test over the 5 paths reported NOT GOVERNED. A manual control-byte grep over the 5 files found no match.
  • ⚠️ NOT MEASURED locally: the CI farm, including Spec Main Shape Gate, which is red on every PR today on untouched test files (objectui#10229). ⛔ Not addressed here.

Acceptance notes

  • Two edge behaviours moved, both in the safe direction:
    • Sections that share a key: on the default arm, toggling a collapsible section could hide the fields of a non-collapsible twin whose row had no control. A non-collapsible section is now never collapsed.
    • The drawer no longer seeds its live state at mount, so a section whose declared collapsed changes after mount follows its declaration until the user toggles it, as ObjectForm always has.
  • FormSectionContainer (FormSection.tsx, a published React component) has the same pair shape at the prop level. The objectui#9780 report already recorded it as not class (c): it is a component prop, and its only caller (the wizard) passes neither. It is outside this file surface and not touched.
  • The pending .changeset/9849-single-divider-projection.md says of that change that 「every arm's gate, its collapse resolution and its predicate handling are unchanged」. That was a description of that change's diff, and it is still true of it. This changeset follows it in the same CHANGELOG and states the convergence.
  • check:changeset-claims asks for a read of .changeset/8738-object-form-fields-description.md, which names ObjectForm.tsx. It was read: it concerns the top-level fields vocabulary, which this diff does not touch, and it is still true.

Dispatched by the domain:ui seat, session https://claude.ai/code/session_01BA3nKVUwKQJf8DBxrSVtNC, claim comment 5812052116.


Generated by Claude Code

…default and drawer arms

Step one of objectui#9849 (director ruling letter E, item 4): the three
collapse resolutions converge onto the declaration-based one objectui#9780
established. `resolveSectionCollapse` in fieldGroups.ts (module-internal,
not re-exported from the package barrel) now answers the pair for
ObjectForm's grouped layout and both DrawerForm pushes.

The drawer's explicit push read `collapsible` alone for the control while
reading `collapsed` unconditionally for the state, so `collapsed: true`
written alone still drew a section with its fields out of the DOM and no
control on the page. It now installs the control, and a section is only
ever collapsed while its row is on the page to carry that control.

Claude-Session: https://claude.ai/code/session_01BA3nKVUwKQJf8DBxrSVtNC
@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 1 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/8738-object-form-fields-description.md

  • names ObjectForm.tsx → packages/plugin-form/src/ObjectForm.tsx — edited by this change

    The registration declared { name: 'fields', type: 'array' } with no description, so an author had nowhere to read that this key's members are bare field names — a different vocabulary from sections[].fields, which also accepts the spec FormFieldSchema object (identity key field, e.g. { field: 'note', colSpan: 2 }). Moving one of those objects to the top-level fields resolves to no name and is skipped by SimpleObjectForm (ObjectForm.tsx) and by buildFlatFields (flatFields.ts, shared by the drawer/modal presentations). Behaviour is unchanged by this entry; it only adds the description text an author would need to avoid the drop before writing it.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with f4f1f4552 (merge-base with origin/main): 4 file(s) changed outside .changeset/, read against 1263 pending declaration(s) that publish a body (1831 pending in total). · run

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3035.6 KB 3104.5 KB
Main entry chunk (gzip) 147.5 KB 350 KB
Entry file index-QCe-jnjp.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) 16.68KB 6.20KB
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) 11.08KB 4.58KB
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) 546.84KB 130.95KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 252.81KB 63.78KB
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) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.02KB 11.00KB
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) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
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) 8.39KB 3.10KB
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) 14.81KB 3.63KB
plugin-calendar (index.js) 51.44KB 14.62KB
plugin-charts (index.js) 71.73KB 20.08KB
plugin-chatbot (index.js) 198.20KB 47.14KB
plugin-dashboard (index.js) 132.96KB 35.17KB
plugin-designer (index.js) 215.94KB 44.33KB
plugin-detail (index.js) 257.23KB 66.93KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 143.87KB 36.83KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 214.64KB 58.59KB
plugin-kanban (index.js) 48.71KB 15.17KB
plugin-list (index.js) 113.53KB 27.99KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.49KB 11.97KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.58KB 3.72KB
plugin-view (index.js) 85.18KB 21.05KB
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) 106.60KB 35.16KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.38KB 1.98KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.74KB 2.54KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 15.71KB 5.30KB
types (ai.js) 4.11KB 2.06KB
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.93KB 1.49KB
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) 5.00KB 2.39KB
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 (strict-authoring-face.js) 17.15KB 6.32KB
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

…e moves

The objectui#9849 step-one changeset said the only sections rendering
differently were ones whose fields could not be reached. Two edge cases also
move: a section sharing its key with a collapsible sibling is no longer hidden
by that sibling's toggle, and a drawer section declared collapsed at mount
now follows a later change to that declaration until the user toggles it.

Claude-Session: https://claude.ai/code/session_01BA3nKVUwKQJf8DBxrSVtNC
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3035.6 KB 3104.5 KB
Main entry chunk (gzip) 147.5 KB 350 KB
Entry file index-QCe-jnjp.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) 16.68KB 6.20KB
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) 11.08KB 4.58KB
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) 546.84KB 130.95KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 252.81KB 63.78KB
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) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.02KB 11.00KB
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) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
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) 8.39KB 3.10KB
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) 14.81KB 3.63KB
plugin-calendar (index.js) 51.44KB 14.62KB
plugin-charts (index.js) 71.73KB 20.08KB
plugin-chatbot (index.js) 198.20KB 47.14KB
plugin-dashboard (index.js) 132.96KB 35.17KB
plugin-designer (index.js) 215.94KB 44.33KB
plugin-detail (index.js) 257.23KB 66.93KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 143.87KB 36.83KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 214.64KB 58.59KB
plugin-kanban (index.js) 48.71KB 15.17KB
plugin-list (index.js) 113.53KB 27.99KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.49KB 11.97KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.58KB 3.72KB
plugin-view (index.js) 85.18KB 21.05KB
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) 106.60KB 35.16KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.38KB 1.98KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.74KB 2.54KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 15.71KB 5.30KB
types (ai.js) 4.11KB 2.06KB
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.93KB 1.49KB
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) 5.00KB 2.39KB
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 (strict-authoring-face.js) 17.15KB 6.32KB
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

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 8cb4574b

Rendered by an isolated review subagent spawned by this seat. It was fed only the card, the objectui#9780 ruling, the PR and the two trees. Its served tier was checked by this seat against the stamp in its transcript. Adopted by this seat.

① Derived judgments

  • Public surface: unchanged.

    • exports is . only, and src/index.tsx neither imports nor re-exports ./fieldGroups. resolveSectionCollapse is consumed only by ObjectForm.tsx and DrawerForm.tsx and cannot be reached from the entry.
    • ModalForm.tsx is not in the diff.
    • ModalFormSectionConfig / DrawerFormSectionConfig are byte-identical, and SectionDividerSource.collapse keeps its shape. RIGHT.
  • The one resolution is objectui#9780 letter A on every arm that emits a pair:

    • collapsed implies collapsible;
    • collapsible: false + collapsed: true ⇒ the control is present;
    • the control is read off the declaration, never the live state;
    • neither member ⇒ untouched.

    RIGHT.

  • hostsControl per arm is correct, and moves behaviour only where the PR says:

    • ObjectForm grouped (Boolean(label)) restates the pre-existing rule.
    • The drawer explicit push (label || description) is exactly "the row is on the page", so the trap is fixed. A section with neither heading nor blurb, declared collapsed, now renders open.
    • The drawer derived push is behaviour-identical on every derived input (ablation leg 2: 0 red).
  • The DrawerForm useState seed removal is neutral except for one disclosed edge (a mount-time collapsed later removed).

  • Step-(2) items are untouched: SectionDividerGate, the gate rule, the blurb-only row, the 9834 row 5 pin, the diagnostic.

  • ModalForm is correctly recorded as a reading, not changed.

② Semver level

'@object-ui/plugin-form': patch is RIGHT; precedent is 9780-collapsed-implies-collapsible.md and 9849-single-divider-projection.md, both patch. Every sentence is true except one over-general clause: 「the only sections that render differently are ones whose fields could not be reached」. The PR's own Acceptance notes name two moved edges whose fields were reachable. It is non-blocking, and it is sent back for correction (see the prose-only re-review that follows).

③ Boundary flags

  • The Acceptance notes' two moved edges are verified real and in the safe direction.
  • Part of #9849 is correct, since step (2) stays on the card.
  • Clause-②: no is TRUE: no new accepted key or value, export or prop.
  • The modal question: ruling E item 1 (「on every arm」) covers it from the text, and the ruling's own record names the modal routes. ⇒ Step (2) brings the pair to the modal with no director summon. The step-(2) claim names that widening (ModalFormSectionConfig gains the two members the spec already declares) under its Clause-②: yes.
  • Check-runs on 8cb4574b: 43, all terminal: 39 green and 3 skipped. 1 red, Spec Main Shape Gate: 21 TS2345 annotations on untouched ObjectSchema.safeParse helper files ⇒ the objectui#10229 drift, ⛔ not this PR's.

Implemented-by: claude/issue-9849-collapse-resolution-converge
Reviewed-by: session_01BA3nKVUwKQJf8DBxrSVtNC

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review — prose-only re-review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 46473931
Prior record: PASS at 8cb4574b (5813295308). Code unchanged since: 8cb4574b..46473931 is one commit touching only .changeset/9849-collapse-resolution-converge.md (+7 / −2), with the frontmatter byte-identical.

② Changeset prose

The rewritten clause is TRUE as a completeness claim. Every before/after divergence was enumerated per arm, and the sections that render differently are the unreachable class plus exactly the two named edges:

  • (i) the shared-key twin. A section declaring neither member that shares sectionKey with a collapsible sibling was hidden by that sibling's toggle: on ObjectForm behind label && isCollapsed, and on the drawer's explicit push unguarded. Now its collapsible is false, so it is never collapsed.
  • (ii) the drawer's removed mount seed. It held a stale true after a mount-time collapsed was removed. Now live ?? declared reads an unseeded {}.

The reverse direction (false → true after mount) did not move on any arm. It was verified on the drawer's explicit push, the drawer's derived push and ObjectForm. No sentence implies step (2) is done or that the modal collapses. Nothing to quote.

③ Boundary flags

  • Diff scope: clean.
  • Check-runs on 46473931: 43, all terminal: 39 green and 3 skipped. 1 red, Spec Main Shape Gate (107613656352): the same TS2345 set, file by file and line by line, as on 8cb4574b, on untouched ObjectSchema.safeParse helper files ⇒ the objectui#10229 drift, ⛔ not this PR's.

Rendered by an isolated review subagent spawned by this seat; its served tier was checked against its transcript stamp. Adopted by this seat.

Implemented-by: claude/issue-9849-collapse-resolution-converge
Reviewed-by: session_01BA3nKVUwKQJf8DBxrSVtNC

VERDICT: PASS

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3035.6 KB 3104.5 KB
Main entry chunk (gzip) 147.5 KB 350 KB
Entry file index-QCe-jnjp.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) 16.68KB 6.20KB
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) 11.08KB 4.58KB
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) 546.84KB 130.95KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 252.81KB 63.78KB
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) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.02KB 11.00KB
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) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
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) 8.39KB 3.10KB
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) 14.81KB 3.63KB
plugin-calendar (index.js) 51.44KB 14.62KB
plugin-charts (index.js) 71.73KB 20.08KB
plugin-chatbot (index.js) 198.20KB 47.14KB
plugin-dashboard (index.js) 132.96KB 35.17KB
plugin-designer (index.js) 215.94KB 44.33KB
plugin-detail (index.js) 257.23KB 66.93KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 143.87KB 36.83KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 214.64KB 58.59KB
plugin-kanban (index.js) 48.71KB 15.17KB
plugin-list (index.js) 113.53KB 27.99KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.49KB 11.97KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.58KB 3.72KB
plugin-view (index.js) 85.18KB 21.05KB
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) 106.60KB 35.16KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.38KB 1.98KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.74KB 2.54KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 15.71KB 5.30KB
types (ai.js) 4.11KB 2.06KB
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.93KB 1.49KB
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) 5.00KB 2.39KB
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 (strict-authoring-face.js) 17.15KB 6.32KB
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

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.

1 participant