Skip to content

chore(deps): move @objectstack/* to 18.0.0-next.1 and follow its contract (objectui#12370) - #12381

Merged
objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-12370-spec-next-1
Oct 14, 2026
Merged

objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-12370-spec-next-1

Conversation

@objectstack-fleet

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

Copy link
Copy Markdown
Contributor

Fixes #12370
Clause-②: yes — next.1 narrows @object-ui/types accept sets that parse through the spec's own page action rows and view data schema; the table under "Clause-② accept-set moves" lists each, with a parse that flips (next.0 ACCEPT, next.1 REJECT) on both public faces.
Fixes #12338

Scope: move objectui's @objectstack/* from 18.0.0-next.0 to 18.0.0-next.1 and follow its contract, by the method objectui#12030 used (measure, then follow). The six held follow-ups that wait on this release (objectui#12326, objectui#12294, objectui#12335, objectui#12349, objectui#12329, objectui#12195) are not done here; only #12338's row rides, as its card directs.

What this does

  • npm view @objectstack/spec@next version answers 18.0.0-next.1 (dist-tags next: 18.0.0-next.1, latest: 17.7.0); the release tag @objectstack/cli@18.0.0-next.1 peels to objectstack 0c52e43075.
  • Every @objectstack/* range moves from ^18.0.0-next.0 to ^18.0.0-next.1, uniformly as objectui#12030 did: 40 ranges in 32 manifests, edited textually; pnpm-lock.yaml regenerated by pnpm install only (99 18.0.0-next.1 keys, 0 next.0 left). pnpm install --frozen-lockfile exits 0 afterwards.
  • main merged twice (8992522, after objectui#12371 landed as 0a19a68; 94b542a, after d78e70b). Neither merge touched a manifest or the lockfile.

The break list (measured on next.1, control on next.0)

Full suite in four lock-held quarters (pnpm exec vitest run --shard=K/4), on the heads named: shard 1 at bd55fee 2 files red / 1261 passed; shard 2 at 8992522 4 / 1256; shard 3 at 272a269 1 / 1263; shard 4 at 08331ae 3 / 1260. Negative control: the nine red files as they stand on main 2d8450e, installed 18.0.0-next.0, run under the same lock: Test Files 9 passed (9), Tests 505 passed (505). After the fixes, the same files plus the ones touched since, on 76afe66 (next.1): Test Files 12 passed (12), Tests 571 passed (571).

red site upstream commit / PR how it is closed
packages/types/src/__tests__/held-public-block-arms-10872.test.ts — the flat-onSuccess remedy row (#12338) 1623fafc (objectstack#23331): a page action row's onSuccess is refused beside a built-in other than api / script, and beside no executor fixed here: the row names actionType: 'api' with a target, as the card prescribes
same file — "the bag IS the spec row", four action arms 4d1e4a80 (objectstack#23164): the row's onSuccess is ActionSchema's own block, whose openIn carries .default('self') fixed here: the import boundary (objectui#8317) now strips that default, so the arm holds the bounded row; the pin compares against stripImportedDefaults(row) (memoised) and asserts the rebuild happens only on the four action rows
packages/plugin-grid/src/__tests__/gridDataInputContract.test.ts — four providers parse 1912af47 (objectstack#23160): the view-level api data source is retired fixed here: three providers parse, api is refused (its readers already left with objectui#12325)
packages/plugin-tree/src/__tests__/objectTreeInputs-11168.test.tsx — api provider accepted 1912af47 fixed here: the spec row refuses it; a stored one still draws nothing and queries nothing
packages/types/src/__tests__/spec-subschema-parity.test.ts — ViewDataSchema carried an imported default 1912af47: the api provider's request block was where the default lived fixed here: ViewDataSchema moves to the "carries no imported default, raw spec object" list
apps/console/src/__tests__/registry-inputs-spec-parity.test.ts — record:related_list publishes every declared key 4cc3ff9d (objectstack#23205): declares parentDataSource, described "[PLANNED — not yet rendered]" named as held card objectui#12294's: booked in UNPUBLISHED_EXEMPTIONS with that card as owner; no renderer here reads the key (git grep parentDataSource -- packages is empty)
scripts/__tests__/check-lockfile-integrity.test.ts the bump itself (snapshot keys) fixed here: samples re-keyed onto the next.1 keys
scripts/__tests__/quick-reference-current-release-4143.test.ts, sync-quick-reference-release.test.ts the bump itself fixed here: QUICK_REFERENCE.md re-synced by node scripts/sync-quick-reference-release.mjs
scripts/__tests__/ci-cd-pipeline-doc.test.ts — live-e2e pin the bump itself fixed here: e2e/live/ci/backend.env OBJECTSTACK_VERSION=18.0.0-next.1 (tag resolves, peeled 0c52e430)
scripts/__tests__/check-object-metadata-write-doors.test.ts — 15 s timeout in shard 4 none: load not a contract red; green in the targeted re-run (above)
check:installed-pin-claims — 22 findings, 30 sites the bump itself each sentence's fact re-measured on next.1 with next.0 as control, identical verdicts on both (parse probes over SelectOptionSchema, FieldSchema, CalendarConfigSchema, ComponentPropsMap rows for object-calendar / object-kanban / object-grid / record:details / record:alert, RecordHighlightsProps, and the lint and automation dist text), then restamped; the check-eager-closure-budget.mjs sentence names the tree it measured (5488ae7) and is ledgered historical

pnpm build (turbo, all but the site) 43/43 and pnpm type-check 81/81 on 76afe66; after the second merge, type-check of app-shell and plugin-grid 31/31 and the ten test files that merge brought 177/177 on 94b542a.

Clause-② accept-set moves (@object-ui/types)

Measured through safeValidateSchema (tolerant) and StrictAnyComponentSchema (strict), same documents, main tree on next.0 vs this branch on next.1 (tsx probe over packages/types/src/zod/index.zod.ts). Every row reads the same on both faces.

document (properties shown) next.0 next.1 upstream
action:button / action:icon with onSuccess and no executor ACCEPT REJECT custom at properties.onSuccess 1623fafc
action:button with actionType url, modal or flow and onSuccess ACCEPT REJECT custom at properties.onSuccess 1623fafc
action:group member type: 'url' with onSuccess ACCEPT REJECT custom at properties.actions.0.onSuccess 1623fafc
action:button with actionType: 'navigation' ACCEPT REJECT custom at properties.actionType 4d1e4a80
action:group member type: 'navigation' ACCEPT REJECT custom at properties.actions.0.type 4d1e4a80
action:button onSuccess with a key besides navigate / openIn ACCEPT REJECT unrecognized_keys at properties.onSuccess 4d1e4a80
action:button operation: 'update' with onSuccess ACCEPT REJECT custom at properties.onSuccess 775ed65e
action:button name: 'url', target: 'tasks list' ACCEPT REJECT custom at properties.target b529a5c2
object-grid data: { provider: 'api', read } ACCEPT REJECT invalid_union at properties.data.provider 1912af47
page (or a page-kind node) with kind: 'slotted' and slots.details: [{ type: 'object-grid', properties: { objectName: 'task', data: { provider: 'api', read: { url: '/api/rows' } } } }] ACCEPT REJECT custom at slots.details.0.properties.data.provider (the spec's own message) 05ab9ef8 (objectstack#23419, checkPageComponentViewData)

Added in the patch round (d9eb32a). The checkPageComponentViewData row was measured through PageNodeSchema and safeValidateSchema. The same document with data: { provider: 'object', object: 'task' } stays ACCEPT on both versions, and the spec's PageSchema gives the same verdicts. A region child with the api provider already flips through the object-grid row above. PageNodeSchema / PageKindNodeSchema attach the check by the spec's own export, as they attach the other page checks.

Controls that stay ACCEPT on both: actionType: 'api' + target + onSuccess; a host handler (actionType: 'run') or a bare name with onSuccess; actionType: 'url' without onSuccess; operation: 'update' without onSuccess; an action:menu member type: 'api' with onSuccess; object-grid data: { provider: 'object' }.

Exports: none added or removed. ViewDataSchema (exported) becomes reference-equal to the spec's object, since next.1 leaves it nothing to strip; its accept set is the row above.

Changeset

.changeset/pre.json is absent on main (objectui#12334 has not landed), so no prerelease mode is in play. .changeset/12370-spec-next-1.md declares the 22 packages objectui#12030 declared, plus the console and runner bundles, all minor (never major), stating the range move and the accept-set narrowing above; it rides the next release with objectui#12030's entries. Two clauses in objectui#12030's pending changesets that name next.0 as the floor now say next.1. check-changeset-presence ✅, check-changeset-no-major ✅, check:changeset-claims ✅, check:pending-changeset-literals ✅.

Gates (exit codes, 76afe66 unless noted)

pnpm install --frozen-lockfile 0 · build 0 (43/43) · type-check 0 (81/81) · full suite: four quarters as above, red sites all closed and re-run green · check:phantom-deps 0 · check:self-import 0 · check:unreferenced-sources 0 · check:doc-example-readers 0 · check:handler-key-reads 0 · check:side-effects-array 0 · check:element-data-source-declaration 0 · check:spec-symbols 0 · check:action-forward-parity 0 · check:designer-field-key-parity 0 · check:icon-record-names 0 · check:i18n-keys 0 · check:i18n-drift 0 · check:i18n-designer-parity 0 · check:installed-pin-claims 0 (at 94b542a too) · check:lockfile-integrity 0 · check:control-bytes 0 · node scripts/check-changeset-fixed.mjs 0.

  • check:spec-floors exits 1 with "The scan collapsed: 0 package(s) declare @objectstack/spec in a consumer-facing field" on this branch and, identically, on main 2d8450e: the bump does not change it (objectui#12334 owns it).
  • Lint: not run repo-wide (CI owns pnpm lint). Narrowed and measured: eslint --no-inline-config --format json over the 34 changed .ts / .tsx / .mjs files reports 34 files, 0 errors; eslint.config.js sets no parserOptions.project / projectService, so linting is not type-aware and this diff cannot move a verdict on an untouched file.

Acceptance notes

  • objectui#12371 landed before this push; flowValueSlots-12101.test.tsx runs green on next.1 (in the 12-file re-run): no verdict change.
  • packages/core/src/utils/normalize-list-view.ts:430 (and its test at :401) and the object-tree data description in packages/types/src/zod/objectql.zod.ts:2795 still say the view data slot has four providers / names the api provider. Prose only; nothing reads it. Left as is.
  • The full suite ran across four heads, because the fixes landed while it ran; each later commit touched only the files re-run in the targeted run.

Generated by Claude Code

claude added 10 commits October 14, 2026 13:14
40 ranges in 32 manifests; pnpm-lock.yaml regenerated by pnpm install.

Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Co-authored-by: Claude <noreply@anthropic.com>
…#12338)

Since @objectstack/spec 18.0.0-next.1 a page action row with no executor
refuses onSuccess; the row the remedy lands on gives the hop an executor.

Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Co-authored-by: Claude <noreply@anthropic.com>
Each restamped sentence's fact was re-parsed against next.1 with next.0 as
control (same verdict on both); the eager-closure baseline sentence names
the tree it was measured on and is ledgered historical.

Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Co-authored-by: Claude <noreply@anthropic.com>
- held-public-block-arms: the four action rows now carry ActionSchema's
  onSuccess block, whose openIn default the import boundary strips, so the
  arm holds the bounded row (objectui#8317), not the row itself.
- gridDataInputContract: ViewData's api provider is retired upstream; three
  providers parse and api is refused.

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

- spec-subschema-parity: ViewDataSchema has no imported default left once
  the api provider is retired, so it is the raw spec object.
- check-lockfile-integrity: samples re-keyed onto the next.1 snapshot keys.
- QUICK_REFERENCE.md re-synced by scripts/sync-quick-reference-release.mjs.

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

- registry-inputs-spec-parity: record:related_list.parentDataSource, which
  next.1 declares as planned and not yet rendered, is booked unpublished to
  the card that wires it (objectui#12294).
- objectTreeInputs: the spec row refuses the retired api provider; a stored
  one still draws nothing.

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

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 69 chunks) 3073.8 KB 3119.4 KB
Main entry chunk (gzip) 73.8 KB 350 KB
Entry file index-CETq906M.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) 20.90KB 7.67KB
app-shell (runtime-config.js) 22.59KB 7.89KB
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) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 41.19KB 11.12KB
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) 591.65KB 142.68KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.41KB 69.48KB
fields (index.js) 283.00KB 72.12KB
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) 40.26KB 11.71KB
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) 54.94KB 16.05KB
plugin-charts (index.js) 84.72KB 23.27KB
plugin-chatbot (index.js) 201.72KB 48.07KB
plugin-dashboard (index.js) 143.63KB 38.79KB
plugin-designer (index.js) 233.77KB 50.02KB
plugin-detail (index.js) 259.78KB 68.65KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 178.88KB 46.47KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 259.06KB 72.25KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 123.35KB 31.60KB
plugin-map (index.js) 27.14KB 8.99KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 91.99KB 23.23KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
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 (record-approval-decision.js) 0.20KB 0.20KB
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) 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

…onentViewData (objectui#12370)

next.1 adds checkPageComponentViewData to PageSchema: a view-data component
under regions or slots whose properties.data names the retired api provider
is refused at that properties.data.provider. PageNodeSchema and
PageKindNodeSchema re-attach it as they do the other three page checks
(objectui#7715 ruling B1). Without it a slotted page's object-grid naming
api passed objectui's faces while the spec refused it; region children were
already refused by the component union.

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

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 69 chunks) 3074.0 KB 3119.4 KB
Main entry chunk (gzip) 73.8 KB 350 KB
Entry file index-dLoZHE0M.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) 20.90KB 7.67KB
app-shell (runtime-config.js) 22.59KB 7.89KB
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) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 41.19KB 11.12KB
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) 591.65KB 142.68KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.41KB 69.48KB
fields (index.js) 283.00KB 72.12KB
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) 40.26KB 11.71KB
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) 54.94KB 16.05KB
plugin-charts (index.js) 84.72KB 23.27KB
plugin-chatbot (index.js) 201.72KB 48.07KB
plugin-dashboard (index.js) 143.63KB 38.79KB
plugin-designer (index.js) 233.77KB 50.02KB
plugin-detail (index.js) 259.78KB 68.65KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 179.38KB 46.59KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 259.06KB 72.25KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 123.35KB 31.60KB
plugin-map (index.js) 27.14KB 8.99KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 91.99KB 23.23KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
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 (record-approval-decision.js) 0.20KB 0.20KB
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) 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

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 69 chunks) 3074.0 KB 3119.4 KB
Main entry chunk (gzip) 73.8 KB 350 KB
Entry file index-dLoZHE0M.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) 20.90KB 7.67KB
app-shell (runtime-config.js) 22.59KB 7.89KB
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) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 41.19KB 11.12KB
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) 591.65KB 142.68KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.41KB 69.48KB
fields (index.js) 283.00KB 72.12KB
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) 40.26KB 11.71KB
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) 54.94KB 16.05KB
plugin-charts (index.js) 84.72KB 23.27KB
plugin-chatbot (index.js) 201.72KB 48.07KB
plugin-dashboard (index.js) 143.63KB 38.79KB
plugin-designer (index.js) 233.77KB 50.02KB
plugin-detail (index.js) 259.78KB 68.65KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 179.38KB 46.59KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 259.06KB 72.25KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 123.35KB 31.60KB
plugin-map (index.js) 27.14KB 8.99KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 91.99KB 23.23KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
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 (record-approval-decision.js) 0.20KB 0.20KB
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) 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

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 50056a8da4a621cd2055d655018463a0be1586af
Local-runs: none

Inputs read: card #12370 (body, claim 6169128505, os-dev-report 6175076952), card #12338 (body, unlock scan 6168539983, claim 6169155259), PR #12381 (body, 67-file list, net diff against main at the merge-base fc211e81), and the 35 check-runs on the head (31 success, 4 skipped: dependabot and the coverage lanes; none failed). No earlier ## Contract review record names this head on the PR or either card.

① Derived judgments

Each accept-set or public-surface change the diff implies, judged against the cards and the head's gates:

  1. 40 @objectstack/* ranges in 32 manifests, ^18.0.0-next.0 to ^18.0.0-next.1; no other manifest line moves. Right. The manifest hunks contain nothing but range lines (measured on the diff: zero non-range +/- lines). pnpm-lock.yaml on the head holds 0 18.0.0-next.0 keys and 99 18.0.0-next.1 keys; Lockfile Integrity Check and Lockfile Dedupe Check are success. This is the one bump card deps(v18): move objectui's @objectstack/* from 18.0.0-next.0 to 18.0.0-next.1 and follow its contract — the bump the held follow-ups wait on #12370 asked for, by deps(v18): move objectui's @objectstack/* dependencies to the next prereleases (18.0.0-next.N) ahead of 18.0 GA — the maintainer's ruling, since 17.x ships no new release #12030's method.
  2. @object-ui/types page action rows: onSuccess refused beside url / navigation / modal / flow / form and on a row with no executor; actionType: 'navigation' refused; onSuccess keys outside { navigate, openIn } refused; onSuccess beside operation: 'update' refused; a non-openable url target refused (upstream 1623fafc, 4d1e4a80, 775ed65e, b529a5c2). Right, and correctly carried by reference rather than restated: no objectui row is hand-edited for these; held-public-block-arms-10872.test.ts pins that the four action arms ARE the spec rows (definition identity through stripImportedDefaults, memoised), so the spec's refusals flow to both faces (safeValidateSchema, StrictAnyComponentSchema) with no objectui code. The PR body's Clause-② table names each row with a next.0 ACCEPT control; the test shards that run those faces are success on the head.
  3. The types(test): held-public-block-arms-10872.test.ts:224 asserts an executor-less page action row with onSuccess is accepted — refused once the spec release carrying objectstack#23331 is installed; give the row actionType: 'api' #12338 remedy row (held-public-block-arms-10872.test.ts): { actionType: 'api', target, onSuccess } replaces the executor-less row. Right. It is exactly the one-line remedy card types(test): held-public-block-arms-10872.test.ts:224 asserts an executor-less page action row with onSuccess is accepted — refused once the spec release carrying objectstack#23331 is installed; give the row actionType: 'api' #12338 prescribes (actionType: 'api' with a target), the assertion still proves what the test is about (the flat-spelling remedy lands on an accepted shape), and the sibling PageComponentSchema refusal of the flat spelling is kept.
  4. The four action arms now pass through stripImportedDefaults and are no longer reference-equal to the spec row (next.1's onSuccess block carries openIn.default('self')). Right. This is the objectui#8317 boundary doing its job on a new imported default, not a new rule: the arm's key set is still pinned equal to the row's (keysOf(bagOf(arm)) equals keysOf(row)), and the two element rows stay identity. Accept set unchanged by this; only the materialised default is stripped at the boundary, as every other imported default is.
  5. ViewDataSchema (exported): the api provider is refused; object / value / schema remain; the export becomes reference-equal to the spec object (spec-subschema-parity.test.ts moves it to the no-default list). Right. Nothing in the diff narrows it by hand; the spec retired the arm (1912af47), the request block that carried the stripped default left with it, so the boundary degenerates to identity. gridDataInputContract.test.ts and objectTreeInputs-11168.test.tsx pin the refusal and, on the tree, that a stored api document still draws nothing and queries nothing (its readers left with objectui#12325, so no renderer behaviour moves here).
  6. PageNodeSchema and PageKindNodeSchema attach checkPageComponentViewData (objectstack#23419): a view-data component under slots naming provider: 'api' is refused at slots.X.N.properties.data.provider with the spec's own message. Right, and the attachment is needed rather than decorative: slots is carried by reference and its children are not judged by the component union, so without the check a slotted page carrying the retired provider passed objectui while the spec refused it (an objectui-wider-than-spec gap, closed). Under regions the component union already refuses the object-grid arm, and the test pins that attaching the check adds no second rule there. The census in spec-object-refinements-7715.test.ts and the attached-list in imported-defaults-8317.test.ts are both updated, so the check count is re-derived, not asserted.
  7. apps/console UNPUBLISHED_EXEMPTIONS books record:related_list.parentDataSource with objectui#12294 as owner. Right. The spec declares it "[PLANNED, not yet rendered]"; git grep parentDataSource over packages and apps on the head (tests excluded) finds no read site, so publishing it on the registration would advertise configuration the renderer drops. Card deps(v18): move objectui's @objectstack/* from 18.0.0-next.0 to 18.0.0-next.1 and follow its contract — the bump the held follow-ups wait on #12370's held-card table lists record blocks honour the per-element dataSource the spec already declares — record:details / record:highlights / record:quick_actions / record:related_list on an app page bind their record from the component's dataSource, so a product page composes without the record shell (maintainer ruling cloud#2839 Q1 D, 2026-10-13) #12294 as "after the bump", so naming instead of fixing is what the card directs.
  8. Pins and claims re-stamped to next.1 (30 sites, 22 findings in check:installed-pin-claims; QUICK_REFERENCE; e2e/live/ci/backend.env; lockfile-integrity samples re-keyed; one historical ledger entry for check-eager-closure-budget.mjs). Right. Each is comment or sample text that names the installed version; the PR body states each fact was re-measured on next.1 with next.0 as control; Test (dist pins), Repo Gates, Line Citation Gate and Live E2E (informational) are success on the head. The ledger entry is correctly historical: the sentence names the tree it measured (5488ae7), which is a record, not a claim about the installed pin.
  9. Exports: none added, none removed. Right. The only export lines the diff touches are the two page node schemas, whose names and types are unchanged; check:spec-symbols and Type Check are success.

Nothing in the diff widens an accept set. Every narrowing is the installed spec's, reached by reference, and each is pinned at the objectui face by a test in this diff or an existing identity pin.

② Semver level

.changeset/12370-spec-next-1.md: 24 packages, all minor. The set is exactly the 22 .changeset/12030-objectstack-next-18.md declares plus @object-ui/console and @object-ui/runner (which #12030 declared in 12030-console-bundles-spec-18.md); measured by diffing the two front-matters. The five published packages whose manifests move but are left out (collaboration, mobile, plugin-charts, plugin-report, sdui-parser) hold the range only in devDependencies, the same criterion #12030 applied; site and test-support are private. The changeset text declares the range move and every accept-set narrowing in ① (items 2, 5, 6) in consumer terms with the remedy for each.

The level matches what the diff publishes under this repo's policy: a prerelease-floor move plus spec-following narrowings on the 18 prerelease line, the same shape #12030 shipped as minor, and major is refused by the Changeset Bump Policy gate. Changeset Declaration, Changeset Bump Policy, Changeset Fixed Group Check and Changeset Claim Re-read are all success on the head. The two clauses in #12030's pending changesets that named next.0 as the consumer floor now say next.1, which is right: both ride the same unreleased version. .changeset/pre.json is absent on the head (objectui#12334 has not landed), so no prerelease mode is in play; the card's "otherwise the bump carries no release" is met in the sense the gates enforce (no version is cut here; the entries ride the next release with #12030's).

Clause-②: line in the PR body: yes, naming the narrowed faces and pointing at the table. Correct: this diff narrows @object-ui/types accept sets on both public faces, so the contract review is owed, and this record is it.

③ Boundary flags

Implemented-by: claude/issue-12370-spec-next-1
Reviewed-by: session_01XVp19E1MYUTFM3dnkwz8gB

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 14, 2026 19:17
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 14, 2026 19:17
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 14, 2026
Merged via the queue into main with commit ff9df88 Oct 14, 2026
36 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-12370-spec-next-1 branch October 14, 2026 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment