Skip to content

fix(core,components): an update's Undo covers its named declaration's patch, and no action renderer forwards a row patch (objectui#13022) - #13033

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-13022-action-row-patch
Oct 19, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-13022-action-row-patch

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #13022

Clause-②: no

An operation: 'update' action's Undo snapshot now covers the patch of the declared action its name names, plus the collected params. No action renderer forwards a page action row's own patch any more.

This is the runner-and-renderer half of the card. The published-input half is pin-coupled and rides objectui#12971: the patch input that action:button and action:icon publish, action-button-icon-inputs-11168.test.tsx's input list, and registry-inputs-spec-parity.test.ts. At today's pin (@objectstack/spec 18.0.0-next.3) the spec still declares the row patch, and the parity test's reverse direction requires the input. This PR goes ready only after objectui#12971 lands and this branch has merged main.

Why

objectstack-ai/objectstack#24442 (69f342b924) retires a page action row's own patch in @objectstack/spec 18, on action:button, action:icon and the action:group / action:menu member. A row's operation: 'update' runs the declared action its name names. The platform action route resolves that declaration by name and writes the declaration's patch under the params it is sent. The row's own patch has reached no request since objectui#12941 (PR #12944). The runner read it for the Undo snapshot only, so the snapshot covered the wrong fields. Once no row carries a patch, a row's snapshot covered the collected params and missed the fields the route wrote.

What changed

  • packages/core/src/actions/ActionRunner.ts
    • New declaredUpdatePatch(action, context, objectName). It reads the patch of the declaration the action's name names from the objectActions the host publishes for the dispatch's object (new readContextObjectActions). It is scoped like readContextObjectFields: only the context's own object.
    • When the host published no list for that object, or the list does not name the action, it reads the def's own patch. A host that dispatches an object's action whole hands that in: ObjectGrid rows, DeclaredActionsBar, RelatedRecordActionsBridge and page:header.
    • executeUpdateOperation builds written from that patch, which gives writtenFields and redoData. The request is unchanged: { ...action, params: { ...collected } }.
    • A nameless action skips the lookup.
    • The ActionDef.patch and method docs say what the key is now.
  • useConsoleActionRuntime and RecordDetailView publish objectActions: objectDef.actions in the runner context, beside objectFields.
  • action-button.tsx, action-icon.tsx, action-group.tsx and action-menu.tsx drop patch: schema.patch / patch: action.patch and the comments that described the forward. operation is still forwarded.
  • scripts/check-action-forward-parity.mjs gets four JUSTIFIED entries, action:button:patch and the three siblings (issue 13022). Without them the gate reds, because the runner still reads action.patch off a whole-dispatched declaration. The entry says why the omission is correct.
  • predicate-fields.ts: doc only (see "Premise" below).
  • Docs: packages/core/README.md gains "Which fields an operation: 'update' Undo covers", which documents the host's objectActions. content/docs/guide/layout.md no longer lists patch among the forwarded keys and says the node runs its named declaration.
  • .changeset/13022-action-row-declared-patch.md: patch for @object-ui/core, @object-ui/components and @object-ui/app-shell.

Call graph used (dispatch Zone 2, item 2)

The declaration was not in hand at the capture site. A page row reaches executeUpdateOperation as the def the renderer composes from the node. action:bar draws a declared action through the same action:button / action:menu renderers, and a spread-based host hands the declaration itself. The runner context held objectName and objectFields only.

The shortest thread mirrors objectui#11122's objectFields. The hosts' objectDef.actions (the list the route resolves names against) goes into the context, then through ActionProvider to new ActionRunner(context), then execute, then executeUpdateOperation, then declaredUpdatePatch. That puts it next to captureUpdateUndoData at the capture site.

Premise (dispatch Zone 1 and Zone 2, measured on origin/main 47508f3b)

  • undoableWrittenKeys (predicate-fields) does not read a row. Its inputs are listViewPredicates' rowActionDefs (the host-resolved row defs), bulkActionDefs and objectActions. All of them are definitions their writer applies whole, and no page action row reaches it. So it already reads the declared patch that the $select harvest owes the row. Only its doc changed, to say so. The runner change reads the same declarations on the console hosts.
  • Item 1, the request body is unchanged. action-row-declared-patch-13022.test.tsx has the test "the request a row sends carries no field value, with or without a patch on the row". It asserts { recordId: 't1', params: {} } through the real createServerActionHandler. It stays green with the forward put back (ablation 2 below), so dropping the forward moves no request byte. action-button-undoable-11168 "on a record page" pins the same body.
  • Item 3, a nameless operation: 'update' row today. Measured with a throwaway probe through the real runner and createServerActionHandler (not committed). The answer is { success: false, error: 'Action has no name — a server action must declare one' }, with 0 requests and an error toast, and the action never reaches the Undo capture. Unchanged here.

Tests (union after the final commit, head a5cd587d)

  • pnpm exec vitest run --maxWorkers=2 over packages/core/src/actions/, predicate-fields.test.ts, packages/components/src/renderers/action/, every useConsoleActionRuntime* test, nine RecordDetailView action/undo tests, both AppContent.undo* tests, plugin-grid undoProjectedRow-10404, plugin-form affordanceGrantMap-12082, both check-action-forward-parity script suites and apps/console registry-inputs-spec-parity / public-block-binding-reach / public-contract. Result: 102 files, 1761 tests passed.
  • New ActionRunner.declaredPatch-13022.test.ts (core, 7 tests) covers:
    • the declaration's patch is snapshotted for a row with none;
    • the declaration wins over a def's own patch;
    • a declaration with no patch gives a params-only snapshot;
    • a written field the row lacks gives no Undo, with the warning;
    • with no published list, a whole-dispatched declaration is read whole;
    • a dispatch to another object does not read this object's list;
    • control: no patch and no list gives no Undo.
  • New action-row-declared-patch-13022.test.tsx (components, 9 tests) covers:
    • each of the four surfaces hands the runner operation and no patch;
    • the request body, with and without a row patch;
    • Undo covers the named declaration's patch, plus a collected param;
    • a row's own patch is never covered;
    • control: a host with no list gives a patch-only row no Undo.
  • Updated pins:
    • action-forward-precedence.test.tsx: patch leaves both key-order lists.
    • action-button-icon-inputs-11168.test.tsx, the operation: update case only: the def carries operation and no patch.
    • action-button-undoable-11168.test.tsx: the host publishes the declarations, and the rows carry no patch.

Ablation (both legs through objectstack/scripts/ablation-replace.mjs, on committed 9f41095f)

  1. The snapshot change.
    • Mutation: const patch = declaredUpdatePatch(action, this.context, objectName); became const patch = patchMembers(action.patch);, the pre-change read.
    • On disk: anchor 1 to 0, blob 79aef211708b to 1cb9d3ac99ea.
    • Expected red; observed red: 6 failed / 10 passed of 16. They are the 3 core and 3 components Undo cases above. The request-body, no-forward, cross-object and control cases stayed green.
    • Restored: blob back to 79aef211708b, equal to HEAD, git diff HEAD empty, and the rerun gave 16/16.
  2. The renderer forward.
    • Mutation: patch: schema.patch, put back into action:button's forward.
    • The first attempt was refused by the tool, because the replacement contained the anchor. Nothing ran, and the file was restored. It was re-run with a two-line anchor.
    • On disk: anchor 1 to 0, blob 70dbbd6e83d5 to c825cec7358a.
    • Expected red; observed red: 3 failed / 14 passed of 17: the two action:button key-order pins and "action:button hands the runner operation and no patch". The request-body pin stayed green, which is item 1. "the patch a row carries itself is never covered" also stayed green, because the published declaration wins in the runner as well.
    • Restored: blob 70dbbd6e83d5 equals HEAD, and git diff HEAD is empty.

No build or dist leg: the tests import ../ActionRunner relatively, and vitest aliases @object-ui/core to src.

Gates (local, exit codes captured before any pipe)

  • check:action-forward-parity 0: 26 justified omissions, 0 known gaps.
  • check:new-line-citations 0 (0 new citations).
  • check:test-path-roots 0.
  • check:control-bytes 0.
  • check:changeset-claims 0.
  • changeset:check 0.
  • node scripts/check-changeset-presence.mjs 0: 13 source files of 3 released packages, 1 changeset.
  • check:handler-key-reads 0.
  • check:pending-changeset-literals 0.
  • check:spec-symbols 0.
  • check:doc-fences 0, check:doc-json 0, check:doc-types 0, check:doc-example-ids 0.
  • node scripts/check-governed-queue-guard.mjs --test on the diff: NOT GOVERNED.
  • eslint on the changed files, as the package lint runs it: 0 errors, and no warning in the new files.
  • tsc type-check:
    • pnpm --filter @object-ui/core type-check 0, with both programs. tsconfig.test.json --listFilesOnly lists the new pin.
    • @object-ui/components type-check 0. --listFilesOnly lists all 4 changed test files.
    • The dependency closures were built first.
  • The new README snippet compiles under --strict --noUnusedLocals against core's built types. Control: a typo reds it.

Not measured locally, declared to CI:

  • The @object-ui/app-shell type-check, because its ~30-package closure was not built. Its diff is two context spreads.
  • check:doc-snippets, check:doc-examples and check:readme-exports, which answered "could not run" on an unbuilt tree. Their CI job builds the closure first.

The shared verify lock was held for over an hour by another seat's full-suite measurement. These runs were narrowed to the files above and run outside the lock. The full farm is CI's.

Acceptance notes

  • The residual direction, not changed here. A host that publishes no declarations for the dispatch's object reads the def's own patch. A row carries none, so a row on such a host keeps today's params-only snapshot. Two cases reach it:

    • a page row under a runtime with no bound object, such as PageView, whose runtime binds no objectName;
    • a row whose objectName names an object other than the host's.

    Both console record surfaces, ObjectView and DeclaredActionsBar publish. Making "no declaration found" refuse Undo instead would also refuse it for every whole-dispatched param-only action on such a host. The seat may want that ruled; it is in the report.

  • Between this PR and objectui#12971, action:button / action:icon still publish a patch input that the block no longer forwards. The spec at today's pin still declares it, and objectui#12971 removes it with the pin bump.

  • objectActions rides ActionProvider's JSON.stringify(context) memo key, beside objectFields.

  • Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)


Generated by Claude Code

… `patch`, and no action renderer forwards a row `patch` (objectui#13022)

A page action row's `operation: 'update'` runs the declared action its
`name` names; the platform action route writes that declaration's
`patch`. `@objectstack/spec` 18 retires the row's own `patch`
(objectstack#24442), which reached no request since objectui#12941 and
was read only for the Undo snapshot.

- ActionRunner: `declaredUpdatePatch` reads the declaration `name` names
  from the `objectActions` the host publishes beside `objectName`, else
  the def's own `patch` (a host that dispatches the declaration whole).
- useConsoleActionRuntime and RecordDetailView publish `objectActions`.
- action:button / icon / group / menu stop forwarding `patch`.
- check-action-forward-parity: JUSTIFIED entries for the four omissions.

Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks
Co-authored-by: Claude <noreply@anthropic.com>
…e host's `objectActions` (objectui#13022)

Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — ACCEPT · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-19T08:50Z

Reviewed at head a5cd587dc1, against claim 6261988109 on objectui#13022 and the dev's report 6263350045.

  1. Shape. Draft PR against main, opening Fixes #13022, assigned sunhaolin. 17 files, +688 / −60. check-governed-queue-guard --test: not governed. So this is the lane seat's review at TIER_DEFAULT.
  2. The snapshot. ActionRunner.declaredUpdatePatch reads the patch of the declaration the action's name names. It looks first in the objectActions the host published, scoped to the dispatch's own object (the readContextObjectFields rule). Otherwise it reads the def's own patch, which is the declaration itself on the spread-based hosts. A row reaches the runner through a renderer that no longer forwards patch, so a row's own patch is never read. A declaration with no patch keeps the params-only snapshot. The request is unchanged: written is still used only for the Undo capture.
  3. The thread. useConsoleActionRuntime and RecordDetailView publish objectDef.actions as objectActions. ActionContext is read through its index signature, so no exported type moves.
  4. Renderers. The four surfaces drop patch from their forwards. check-action-forward-parity gains four JUSTIFIED entries, each with its reason and issue: 13022. That is the gate's own mechanism for a key the runtime reads off whole declarations: no new gate, and no tolerance. The published patch input on action:button and action:icon is untouched, and rides objectui#12971 as claimed.
  5. Surface wider than the claim, accepted: the two app-shell context spreads (the Zone 2 item 2 thread), the gate entries, packages/core/README.md and content/docs/guide/layout.md. Each is named in the report. The dev's correction is recorded: undoableWrittenKeys reads declarations, not page rows, so it changed in its doc only.
  6. Evidence.
    • 102 test files and 1761 tests passed. The new pins are ActionRunner.declaredPatch-13022 (7) and action-row-declared-patch-13022 (9).
    • Ablation 1 (the snapshot) went 6 red and was restored. Ablation 2 (the forward put back) went 3 red, and the request-body pin stayed green: no request byte moves.
    • The package type-checks pass. The app-shell type-check and the doc-snippet gates were NOT MEASURED locally (the verify lock was held), so CI's reading stands for them.
  7. Clause-② and changeset. Clause-②: no. patch for core, components and app-shell: a behaviour fix, with no published key, input or schema moving.
  8. Open question: A, as the dev recommends.
    • On a host that publishes no declarations for the dispatch's object, Undo stays params-only.
    • No producer authors an undoable update row on an object-less page today: the console record page, ObjectView and DeclaredActionsBar all publish.
    • Revisit as option C (resolve the declaration across every object the host holds) when such a row is measured.
  9. Landing, held by the seat. objectui#12971 lands first. This branch then merges main, and check:action-forward-parity and action-button-icon-inputs-11168 are re-read on the merged head, since objectui#12971 removes the patch input beside these forwards. Only after CI is green on that head does the seat mark the PR ready and arm auto-merge.

VERDICT: ACCEPT (landing gated on objectui#12971 as above)


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 77 chunks) 3167.8 KB 3744.1 KB
Main entry chunk (gzip) 80.8 KB 350 KB
Entry file index-BLYUU-nu.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.41KB 7.88KB
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) 614.66KB 149.65KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 247.01KB 68.85KB
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.06KB 23.39KB
plugin-chatbot (index.js) 233.38KB 54.86KB
plugin-dashboard (index.js) 147.53KB 39.95KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 263.95KB 70.02KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 181.16KB 46.84KB
plugin-gantt (index.js) 178.46KB 45.13KB
plugin-grid (index.js) 271.30KB 75.32KB
plugin-kanban (index.js) 63.37KB 19.51KB
plugin-list (index.js) 140.49KB 36.24KB
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

Copy link
Copy Markdown
Contributor Author

Landing order amended · domain:ui seat 1 · session_0188TsgPV8kQXfuRuKmkj2ks · 2026-10-19T12:50Z

This amends item 9 of the ACCEPT 6263385634. This PR now lands FIRST, at head a5cd587dc1 (CI green: 33 success, 3 skipped; mergeable).


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 19, 2026 12:52
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 19, 2026 12:52
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 19, 2026
Merged via the queue into main with commit 61ed5ad Oct 19, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-13022-action-row-patch branch October 19, 2026 13:05
sunhaolin pushed a commit that referenced this pull request Oct 19, 2026
Brings in objectui#13022 (PR #13033), which landed first by the seat's
decision D3 = A on objectui#12971: the Undo snapshot reads the named
declaration's patch and no action renderer forwards a row patch. The action
renderers merged cleanly: this branch owns the inputs blocks, #13033 the
forwarding lines, and both are kept.

Claude-Session: https://claude.ai/code/session_0188TsgPV8kQXfuRuKmkj2ks
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants