From d2a03fd88a3e8db0d98b516b0f517079d6096be9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 17:35:15 +0000 Subject: [PATCH] docs(changeset): the consumed page-action-row operation changeset no longer says an `api` row beside the update parses (deliberate correction) The consumed prerelease changeset said a row with `actionType: 'api'`, `operation: 'update'` and a `patch` parses once `onSuccess` is dropped. The rows now carry ActionSchema's declarative-update rules, which refuse an executor other than `'script'` beside the update at that key. The FROM -> TO first row and the "What an author now sees" closing sentence now name the executor condition. The 18.0.0 GA entry is compiled from `.changeset/pre/` on pre-mode exit, so this is the text that ships. Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz Co-authored-by: Claude --- .changeset/pre/23332-page-action-row-operation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/pre/23332-page-action-row-operation.md b/.changeset/pre/23332-page-action-row-operation.md index 316b636f735..b196d143ac1 100644 --- a/.changeset/pre/23332-page-action-row-operation.md +++ b/.changeset/pre/23332-page-action-row-operation.md @@ -21,12 +21,12 @@ The page action rows are `action:button` and `action:icon` (`properties`), and e | before | what to write instead | | --- | --- | -| `{ actionType: 'api', operation: 'update', patch: { status: 'done' }, onSuccess: { navigate: '/done' } }` (or `type` on a member, or no executor) | the same row without `onSuccess`: the runner performs the write before any executor, so the hop followed a write whose success declares no result | +| `{ actionType: 'api', operation: 'update', patch: { status: 'done' }, onSuccess: { navigate: '/done' } }` (or `type` on a member, or no executor) | the same row without `onSuccess`, with no executor key or `'script'` (beside `operation: 'update'` any other executor is refused at that key, D3 `ui-page-action-row-declarative-update-rules`): the runner performs the write before any executor, so the hop followed a write whose success declares no result | | `{ operation: 'delete', … }` / `{ operation: 'custom', … }` on a row | no `operation`: a row delete is the object's own delete affordance, and a row is already the action a bulk def's `'custom'` would name | | any other `operation` value | `operation: 'update'` with a `patch`, or no `operation` (the runner ran nothing for it) | **The one-line fix: on a page action row, write `operation` only as `'update'`, and never beside `onSuccess`.** `os migrate meta --from 17` lists the D3 entry `ui-page-action-row-operation-declared`; the rewrite is by hand. -**What an author now sees.** `os validate`'s props gate reports the refusal at the row's `operation` or `onSuccess` (`properties.…`, or `properties.actions.N.…` for a member). For example, `{ actionType: 'api', operation: 'update', patch: { status: 'done' }, onSuccess: { navigate: '/done' } }` on an `action:button` gets: ``An `action:button`'s `onSuccess` (`operation: 'update'`) would follow a result the contract does not declare: the console's action runner reads `operation` before any executor, …``. The same row without `onSuccess` parses unchanged. +**What an author now sees.** `os validate`'s props gate reports the refusal at the row's `operation` or `onSuccess` (`properties.…`, or `properties.actions.N.…` for a member). For example, `{ actionType: 'api', operation: 'update', patch: { status: 'done' }, onSuccess: { navigate: '/done' } }` on an `action:button` gets: ``An `action:button`'s `onSuccess` (`operation: 'update'`) would follow a result the contract does not declare: the console's action runner reads `operation` before any executor, …``. That row is also refused at `actionType`, since beside `operation: 'update'` an executor other than `'script'` is refused (D3 `ui-page-action-row-declarative-update-rules`); without `onSuccess`, and with no `actionType` or `actionType: 'script'`, it parses. **Measured producers.** None in this repository. In objectui (at its pin `1fb1ced36243` and its main `b9814b3`), the action renderers' own tests carry `operation: 'update'` rows without `onSuccess`, which stay accepted; no row carries another `operation` value or the pairing. objectui's metadata-admin form already clears `onSuccess` when an author switches an action into an update.