Skip to content

feat(app-shell,plugin-list): a page list-view node's addRecord opens the object list's create; publish list-view.addRecord - #13098

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-13089-page-list-create
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-13089-page-list-create

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #13089
Clause-②: yes

What this changes

A page list-view node's addRecord Add button now opens the create form that the object list opens. list-view.addRecord is published. The console's object list no longer draws a dead Add button.

  1. Page host (pageRecordActions.ts pageRelatedHandlers). Under the seat ruling on the card (Q1 = A), the input's shape decides what is served.

    • An object-scoped list has no relationshipField (absent or empty) and no parentId. This is a page list-view node, which resolves { objectName }. It is served the bridge's create pair, onCreate / createDisabled, and nothing else.
    • A related list whose parent did not resolve names its relationshipField. It is still served nothing, so it draws no "+ New". That button would have opened a child form linked to no parent.
    • Under a parent, the served set is unchanged: the objectui#12870 executors.
  2. Contract (@object-ui/react, ResolveRelatedRecordActionsInput docblock only, no type or member change). The docblock says what an input without relationshipField asks for. The spec's record:related_list requires relationshipField, so a spec-valid related list always names one. The docblock also names the limit of this reading: a future consumer that must not create needs an explicit member.

  3. editMode: 'page' (ruling 6). RelatedRecordActionsBridge openChildForm gets one branch. A create linked to no parent now goes to resolveRecordFormTarget, the resolver AppContent's handleEdit uses. For an editMode: 'page' object it navigates to the full-page create route, as the object list does; otherwise it opens the overlay as before.

  4. Console object list (item 2, ObjectView.tsx renderListView). It forwarded addRecord and no onAddRecord. The Add button now calls the header New's create (actions.create, which is onEdit(null)). It is offered only where the New is offered and not greyed: objectCanCreate && createVisible && !createDisabled.

  5. Publishing (plugin-list). addRecord joins LIST_VIEW_INPUTS (shared by list-view and list). Its description says what is read: enabled and position; mode and formView are not read. It also says what the click opens. The UNPUBLISHED_EXEMPTIONS row is struck and a MEMBER_PINS entry points at the real-PageView pin. The README, the mdx and the stale docblocks are updated.

  6. Changeset (.changeset/13089-page-list-create.md): @object-ui/plugin-list minor (a published registry input, as objectui#13074 did), @object-ui/app-shell minor (a page-host capability and a new create route), @object-ui/react patch (docblock only). These levels were set in the patch round 3b8fab4ff1 after the contract review.

Measured before changing (each leg is a run, not a reading)

  • The seat's fork (Q1). I ran the 12870 harness plus an unbound record:related_list probe. When the create pair was served to every parent-less resolve, the probe drew related-list-new (4/4 green). On origin/main the same probe was red: 1 failed, 3 passed.
  • Item 2. ObjectView.addRecordOpensCreate-13089.test.tsx ran on the base before the fix: Tests 2 failed | 1 passed (3).
    • The Add button drew, and its click called onEdit 0 times.
    • For a viewer with no create grant, the header New was hidden and the Add button was still drawn.
    • After the fix: Tests 3 passed (3).
  • Ruling 6. In the new PageView pin, the editMode: 'page' case stayed at /apps/cloud/page/team (overlay params) before the openChildForm branch: expected '/apps/cloud/page/team' to be '/apps/cloud/sys_contract/new'. It is green after the branch.

Pins

packages/app-shell/src/views/__tests__/PageView.listViewAddRecord-13089.test.tsx runs through the real PageView, the real console action runtime, and the plugin-list and plugin-detail registrations.

  • (a) An Add click pushes form=new and formObject=sys_member, with no formLink. An editMode: 'page' object navigates to /apps/cloud/sys_contract/new.
  • (b) No create grant withholds the button, and so does a createDisabled create (userActions.create.disabledWhen).
  • (c) CONTROLS:
    • A node without addRecord draws no button.
    • An unbound related list on the same page draws no "+ New" while the list-view beside it is served.
    • A probe block on the page reads the served set per input shape. Object-scoped (and empty relationshipField) gets onCreate only: no Edit, Delete, row click, "View all" or executor. An unbound related list gets nothing. Bound gets onRowAction,onToolbarAction.
    • The objectui#12870 CONTROL row stays as it is, because it covers a bound list.
  • (d) The registration publishes addRecord. The parity row is struck and the member pin is green.
  • (e) ObjectView.addRecordOpensCreate-13089.test.tsx: the Add button and the header New make the same onEdit(null) call. Without a create grant there is no Add button. A view without addRecord draws no Add button.

Rewritten to the new fact:

  • The objectui#11293 navigator pin asserted that resolve({ objectName }) equals {} on a page. It now asserts nothing for a related-list input and onCreate alone for an object-scoped one.
  • The objectui#13074 registration row now expects addRecord to be published.

Ablations

Each ablation used ablation-replace.mjs. Each mutation was proven on disk (anchor x1 to x0), and each restore was proven by blob hash: 47fc21a275c6 equals HEAD, and git diff HEAD is empty.

  1. Remove the parent-less onCreate serving (if (!onCreate) becomes always return). Result: 4 failed, 6 passed. Red: (a), the editMode case, the unbound-related-list control (the list-view beside it is no longer served) and the served-set control.
  2. Serve every handler parent-less (return related.resolve(input)). Result: 1 failed, the served-set control. It received onCreate,onDelete,onEdit,onRowAction,onToolbarAction,onView,rowActions,toolbarActions.
  3. The seat's ablation: drop the relationshipField condition. Result: 2 failed. The unbound related list draws "+ New", and the probe's unbound-related row reads onCreate.

Gates

Final head 1fbb3d66ac, base cd4623d063. Exit codes were recorded to files.

  • Type-check. I built the closure (pnpm --filter '@object-ui/app-shell^...' build), then ran type-check for @object-ui/react, @object-ui/plugin-list and @object-ui/app-shell: VERDICT command-exit 0.
    • apps/console (test file only): NOT MEASURED. Its tsc --noEmit cannot resolve @object-ui/app-shell and plugins whose dist this worktree did not build. That is a prerequisite failure, not a type verdict. Declared to CI.
  • Targeted vitest (--maxWorkers=1, under the shared lock), on this head's test content:
    • 24 files, the PageView.* and RelatedRecordActionsBridge.* families plus readers of the touched files: 148 passed and 1 failed. The failure was the 11293 row, rewritten above, then 6/6 passed.
    • 72 ObjectView* files: 633/633.
    • 15 files: the console parity gate, the plugin-list addRecord readers, and the plugin-detail, plugin-form and components readers of the bridge: 445 passed and 1 failed. The failure was the 13074 registration row, rewritten above, then 15/15 passed.
    • Whole package directories (app-shell, plugin-list, react, apps/console) are declared to CI.
  • pnpm lint, narrowed to the 12 changed .ts/.tsx files with eslint --no-inline-config --format json: 0 errors. The 203 warnings are almost all on pre-existing lines of ObjectView.tsx/RelatedRecordActionsBridge.tsx. One new no-explicit-any warning is on the objects.find((o: any) lookup in openChildForm, the pattern the file already uses.
  • Pre-tsc battery: all exit 0 (check:phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes, new-line-citations, plus check-hand-rolled-comment-mask, check-changeset-fixed and check-changeset-presence). check:spec-floors exits 1, as on main; recorded, not fixed.

Acceptance notes

  • The openChildForm branch keys on "create with no link", so it also covers a record page's related list whose parent link value is still null (its onCreate already sends no formLink). For an editMode: 'page' object that create now goes to the full-page route and not the overlay. It is the same object-level create either way.
  • A create predicate parent-less. On a page, the bridge evaluates userActions.create.visibleWhen / disabledWhen against no parent record, as the object list evaluates them against null. A predicate that reads record.* fails closed for visibleWhen, so the Add button is withheld. Observation only.
  • Spec defaults vs. the renderer: filed objectui#13099. The spec's AddRecordConfig declares enabled default true and position default 'bottom'. ListView draws the button only for an explicit enabled: true and places an absent position at the top. The contract review measured that neither the write door nor the client materialises the nested defaults. The published description, README and mdx now name the declared defaults and the divergence, and cite objectui#13099, which carries the enforce-or-remove decision. The renderer is unchanged here.

Writes

Branch pushes, this draft PR (with the card's assignee), and one os-dev-report comment on the card. No labels: no objectui gate reads one, and the dispatch named none.

Implemented by the os-dev run in session https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB.


Generated by Claude Code

… header New's create (objectui#13089)

renderListView forwarded addRecord and no onAddRecord, so ListView drew an
Add button whose click did nothing, also for a viewer who may not create.
The button now calls the header New's create and follows its verdict.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
…the object list's create; publish list-view.addRecord (objectui#13089)

The console's page host answered every parent-less resolve with no handlers,
so a page list-view node's Add button was withheld. It now serves the
bridge's create pair, and nothing else, to an object-scoped list: one that
names no relationshipField and no parent. A related list whose parent did not
resolve is still served nothing. ResolveRelatedRecordActionsInput documents
the shape. An unlinked create opens an editMode 'page' object's full-page
create route, as the object list does. list-view.addRecord is published.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
…by input shape (objectui#13089)

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 77 chunks) 3208.3 KB 3744.1 KB
Main entry chunk (gzip) 81.5 KB 350 KB
Entry file index-OAi8-Gn4.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 (buildIdentity.js) 0.80KB 0.49KB
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 21.17KB 7.81KB
app-shell (runtime-config.js) 24.52KB 8.48KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 45.59KB 12.03KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.67KB 6.12KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.74KB 3.94KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 42.84KB 11.66KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 615.08KB 149.86KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 252.05KB 70.40KB
fields (index.js) 292.36KB 74.70KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.33KB 11.96KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 55.04KB 16.10KB
plugin-charts (index.js) 85.14KB 23.42KB
plugin-chatbot (index.js) 238.47KB 56.30KB
plugin-dashboard (index.js) 147.53KB 39.95KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 265.63KB 70.60KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 184.11KB 47.60KB
plugin-gantt (index.js) 178.46KB 45.13KB
plugin-grid (index.js) 272.91KB 75.73KB
plugin-kanban (index.js) 64.49KB 19.83KB
plugin-list (index.js) 149.43KB 39.12KB
plugin-map (index.js) 27.17KB 9.00KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.31KB 11.88KB
plugin-tree (index.js) 15.27KB 5.40KB
plugin-view (index.js) 94.68KB 24.36KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 126.45KB 41.40KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.71KB 2.11KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (product-blocks.js) 0.20KB 0.19KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

…he renderer's divergence; changeset levels minor (objectui#13089)

The description, README and mdx no longer present "top" as the default:
the spec row declares enabled true and position bottom, the renderer reads
only an explicit enabled: true and puts an absent position at the top, and
objectui#13099 owns the gap. plugin-list and app-shell bump minor.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 77 chunks) 3208.9 KB 3744.1 KB
Main entry chunk (gzip) 81.5 KB 350 KB
Entry file index-ae3UnYfO.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 (buildIdentity.js) 0.80KB 0.49KB
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 21.17KB 7.81KB
app-shell (runtime-config.js) 24.52KB 8.48KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 45.59KB 12.03KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.67KB 6.12KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.74KB 3.94KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 42.84KB 11.66KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 615.08KB 149.86KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 252.05KB 70.40KB
fields (index.js) 292.36KB 74.70KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.40KB 12.01KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 55.04KB 16.10KB
plugin-charts (index.js) 85.14KB 23.42KB
plugin-chatbot (index.js) 238.47KB 56.30KB
plugin-dashboard (index.js) 147.53KB 39.95KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 265.63KB 70.60KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 184.11KB 47.60KB
plugin-gantt (index.js) 178.46KB 45.13KB
plugin-grid (index.js) 272.91KB 75.73KB
plugin-kanban (index.js) 64.49KB 19.83KB
plugin-list (index.js) 149.64KB 39.21KB
plugin-map (index.js) 27.17KB 9.00KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.31KB 11.88KB
plugin-tree (index.js) 15.27KB 5.40KB
plugin-view (index.js) 94.68KB 24.36KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 126.45KB 41.40KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.71KB 2.11KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (product-blocks.js) 0.20KB 0.19KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 00:01
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 00:01
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit d11174a Oct 20, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-13089-page-list-create branch October 20, 2026 00:13
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.

list-view addRecord: the page host serves no onCreate, so a page node's Add button is withheld

2 participants