From 1ad970cafe1e55e1e4a44d4c62e2055883d31ee1 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 07:49:06 +0000 Subject: [PATCH 1/2] chore(console): bump objectui to 616df6598b42 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit objectui main at 616df6598b429d2b3687301a2041198928e68971, which carries cbac9d7dde (objectui#13169, the filterableFields reader's removal), so the Console Pin Gate builds the console against main again. Written by scripts/bump-objectui.sh --no-commit; the changeset's ADR-0087 disposition and its Clause-② line are the operator's answer the generator asks for. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude --- .changeset/console-616df6598b42.md | 72 ++++++++++++++++++++++++++++++ .objectui-sha | 2 +- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 .changeset/console-616df6598b42.md diff --git a/.changeset/console-616df6598b42.md b/.changeset/console-616df6598b42.md new file mode 100644 index 00000000000..9924d8787ad --- /dev/null +++ b/.changeset/console-616df6598b42.md @@ -0,0 +1,72 @@ +--- +"@objectstack/console": minor +--- + +Console (objectui) refreshed to `616df6598b42`. Frontend changes in this range: + +Derived from the changesets objectui declared over the range — 30 releasing of 31 changesets added across 32 non-merge commits; omitted: 1 release-nothing changeset, 1 commit carrying no changeset (they ship no package code). + +- **minor** — An action's param dialog keeps what the user typed when the server refuses the run (objectui#13161). (objectui `616df6598`) +- **minor** — **BREAKING** — The list view's Filter panel no longer narrows its field list to a per-view `filterableFields` whitelist (objectui#13118). `@objectstack/spec` 18 retires the list view's `filterab… (objectui `cbac9d7dd`) +- **minor** — Studio marks the settings the AI copilot drafted: a Draft chip and a Source line ("Added as a draft by the AI copilot 2 min ago") on a field or a list-view setting the copilot cha… (objectui `3bcf314e7`) +- **minor** — A list's `addRecord` Add button opens the create form on a console page and on the console's object list (objectui#13089). (objectui `d11174ad1`) +- **minor** — A navigation entry's API `dataSource` is read, and its `visible` sees the selected value as `data` (objectui#13029). (objectui `1b94d50aa`) +- **minor** — Studio's Changes drawer can now fill a new field's default into the records an object already holds, when you publish (objectui#12929). (objectui `6058bf8b7`) +- **minor** — A page `list-view` node now honours `requiredPermissions`, a key of the spec's list view row, and the registration publishes it (objectui#13074): the capabilities a viewer must al… (objectui `b0176214a`) +- **minor** — **BREAKING** — A navigation item's `visible` now takes `@objectstack/spec`'s `EvaluatedExpressionInputSchema` by reference, beside the boolean it already took (objectui#13075). (objectui `df7156808`) +- **minor** — A page predicate can ask the capability question: `current_user.hasCapability('NAME')` now answers in the console, from the same `/auth/me/permissions` answer the action gate read… (objectui `2493e85a3`) +- **patch** — Studio's create dialogs now bind each field label to its input (objectui#13128). The display-name and identifier labels in the shared create dialog had no `htmlFor`, and the input… (objectui `157694c7b`) +- **patch** — A refused package publish on the package sheet shows the reasons the server returned, under the count sentence (objectui#13160). (objectui `4c36eab58`) +- **patch** — A chart saved view keeps the view tabs on the console list page (objectui#13114). (objectui `91b658a75`) +- **patch** — The console's "This app can't be opened" screen, and its "Couldn't reach the server" and "App not available" siblings, now offer "Back to home" beside Retry — the same way out the… (objectui `5dbc6a579`) +- **patch** — The Import Wizard sends a saved mapping the format the mapping declares (objectui#13156). A mapping that declares `sourceFormat: 'csv'` is now imported with `format: 'csv'`, the r… (objectui `d05f33b2e`) +- **patch** — Studio's row-level security editor holds a policy until it has a name (objectui#13113). (objectui `427e59c9e`) +- **patch** — An ungrouped list view now asks for the object's declared `nameField` in its `$select`, so the bulk confirm step lists each record's name rather than `Record #ID` when no column s… (objectui `a57d80afe`) +- **patch** — The create form uses the object's `create` form view when it declares one (objectui#13099, ruling B′ on objectstack-ai/objectstack#24692). (objectui `ed2805768`) +- **patch** — The bulk-action confirm step names each affected record by the object's declared `nameField`, even when no column of the view shows it, and never by another text field (objectui#1… (objectui `4b6774649`) +- **patch** — The record page heading labels a select `nameField` (objectui#13103). When an object's declared `nameField` (or `displayNameField`) is a select field, the record page H1 now shows… (objectui `2d8a8b7dc`) +- **patch** — `record:details` no longer draws a record pointer's type half as its own row (objectui#13102). (objectui `4c6885580`) +- **patch** — Studio's copilot draft marks, the remainder (objectui#12725): (objectui `df943a2a1`) +- **patch** — An app's landing waits for the API reads of its navigation entries (objectui#13097). (objectui `d87e4f2ec`) +- **patch** — On a phone, the AI chat's pending-drafts bar shows its whole sentence (objectui#13088). (objectui `a26068b9e`) +- **patch** — Setup's metadata lists keep a row's controls in reach on a narrow screen, and say in words when the activation state cannot be read (objectui#13091). (objectui `633ef99a3`) +- **patch** — An object field whose `visibleWhen` names `current_user.hasCapability(NAME)` is now answered on the record form page and in the console's record-form modal (objectui#13083). (objectui `90518cdb8`) +- **patch** — Studio's RLS policy editor now asks `@objectstack/lint`'s RLS rule about every `USING` or `CHECK` clause that parses, not only about one the runtime cannot lower (objectui#13082).… (objectui `a487cedd6`) +- **patch** — One object-page open reads the published view list (`GET /meta/view`) once (objectui#13057). The adapter now stores the list its client read and answers `listViews` and `listViewO… (objectui `cd4623d06`) +- **patch** — On a phone, the AI chat's "Preview app" pill no longer covers the composer's input (objectui#13068). (objectui `282b138c0`) +- **patch** — The console no longer reads the whole object registry before the first paint on two more routes (objectui#13046). (objectui `b3007fd96`) +- **patch** — Studio names two more things by label where the served metadata carries one. In Explain access, each pipeline layer's "Contributed by" chips now show the position or permission se… (objectui `cc4ae3e14`) + +⚠️ 2 of these carry a breaking change: 2 by the author's own breaking annotation in the changeset body — objectui declares no `major` inside a launch window (`scripts/check-changeset-no-major.mjs`). Each is marked **BREAKING** in the list above — read them before compiling the release record. + +**In this console build, declared nowhere** — objectui merged 1 commit in this range with no `.changeset/*.md`. The code is inside the pin above and ships here, but nothing upstream declared it, so it appears in no objectui CHANGELOG and in no entry above. Listed by subject rather than counted, because a count cannot tell a dependency bump from a form-behaviour change (objectstack#6174); the upstream gate that would prevent this is objectui#3387. + +- _(no changeset)_ test(e2e/live): the eleven stale live specs, each brought back to the shipped showcase or retired (objectui#13104) (#13132) (objectui `0b36ffa8c`) + +Clause-②: no + + + +objectui range: `12dc7b47c340...616df6598b42` diff --git a/.objectui-sha b/.objectui-sha index 01a0c5f69e9..eff6474ea95 100644 --- a/.objectui-sha +++ b/.objectui-sha @@ -1 +1 @@ -12dc7b47c340d9bd80b35406d890c2d27c8017dc +616df6598b429d2b3687301a2041198928e68971 From 2925b85392c5ed8bd4141bcc748b9784e6f0f44d Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 08:00:02 +0000 Subject: [PATCH 2/2] chore(console): regenerate the SDUI manifest and lockstep record at objectui 616df6598b42 The pin move's second half: node scripts/gen-sdui-manifest-node.mjs over the tree pnpm objectui:build left at .cache/objectui-616df6598b42 (107 components; list-view publishes requiredPermissions and addRecord), and OBJECTUI_ROOT=.cache/objectui-616df6598b42 pnpm gen:sdui-lockstep (both blobs unchanged, so no parser port is owed). Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude --- packages/sdui-parser/objectui-lockstep.json | 6 +++--- scripts/sdui-manifest.record.json | 8 ++++---- sdui.manifest.json | 11 +++++++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/sdui-parser/objectui-lockstep.json b/packages/sdui-parser/objectui-lockstep.json index b21dd370b2c..4775d0aad63 100644 --- a/packages/sdui-parser/objectui-lockstep.json +++ b/packages/sdui-parser/objectui-lockstep.json @@ -6,8 +6,8 @@ ], "objectui": { "repo": "https://github.com/objectstack-ai/objectui.git", - "rev": "12dc7b47c340d9bd80b35406d890c2d27c8017dc", - "revDate": "2026-10-19T20:08:18+00:00", + "rev": "616df6598b429d2b3687301a2041198928e68971", + "revDate": "2026-10-20T07:14:48+00:00", "source": "packages/sdui-parser/src", "files": [ "packages/sdui-parser/src/body-dialect.ts", @@ -21,7 +21,7 @@ "packages/sdui-parser/src/validate.ts" ] }, - "recordedAgainstPin": "12dc7b47c340d9bd80b35406d890c2d27c8017dc", + "recordedAgainstPin": "616df6598b429d2b3687301a2041198928e68971", "grammarRegion": { "file": "packages/sdui-parser/src/parse.ts", "delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */", diff --git a/scripts/sdui-manifest.record.json b/scripts/sdui-manifest.record.json index 00ec74acf49..f3c3629e607 100644 --- a/scripts/sdui-manifest.record.json +++ b/scripts/sdui-manifest.record.json @@ -11,12 +11,12 @@ "a pin bump without regeneration goes RED there — that is the anti-rot half of the freshness gate.", "Regenerate + re-record: pnpm objectui:build && node scripts/gen-sdui-manifest-node.mjs" ], - "objectuiSha": "12dc7b47c340d9bd80b35406d890c2d27c8017dc", + "objectuiSha": "616df6598b429d2b3687301a2041198928e68971", "source": "built-tree", - "modulesRoot": ".cache/objectui-12dc7b47c340/apps/console", + "modulesRoot": ".cache/objectui-616df6598b42/apps/console", "objectuiWorkspaceVersion": "17.7.0", "generator": "scripts/gen-sdui-manifest-node.mjs", - "generatedAt": "2026-10-19", - "sha256": "b7a53e34856fc4b34c5e615aaf62e149361b92ba6936290d9e1e6cbcbd068bf5", + "generatedAt": "2026-10-20", + "sha256": "d1fde278ffd643900aba9e8fcf834d35a9c345246709f1667ae71618eaad109c", "components": 107 } diff --git a/sdui.manifest.json b/sdui.manifest.json index 249688000ac..e9427d2f761 100644 --- a/sdui.manifest.json +++ b/sdui.manifest.json @@ -270,6 +270,12 @@ ], "description": "One line about the list, drawn as the toolbar's info control (its tooltip and accessible name). A plain string, or an inline per-locale map resolved against the display locale. `appearance.showDescription: false` hides it." }, + { + "name": "requiredPermissions", + "type": "array", + "of": "string", + "description": "Capabilities the viewer must ALL hold to see this list, the names permission sets grant through `systemPermissions`. A viewer missing one sees an insufficient-permissions notice in place of the list, and no records are queried. Absent or empty: no gate." + }, { "name": "userFilters", "type": "object", @@ -280,6 +286,11 @@ "type": "object", "description": "Which toolbar controls the user gets, the spec's `UserActionsConfig` of per-control toggles: a control set to `false` (for example `sort: false`) is taken off the toolbar, and the controls it does not name stay." }, + { + "name": "addRecord", + "type": "object", + "description": "The Add button, the spec's `AddRecordConfig`. The spec row declares `enabled` default `true` and `position` default `\"bottom\"`; the renderer does not apply those defaults: it draws the button only for an explicit `enabled: true`, and places an absent `position` at the top (objectui#13099 owns that gap). `position` places it: `\"top\"` (the toolbar), `\"bottom\"` (under the list) or `\"both\"`. A click opens the create form for the listed object, the one the object list's New opens: the record-form overlay, or the full-page create for an object whose `editMode` is `page`. The button is withheld for a viewer who may not create, or whose create the object greys, and on a host that serves no create. `mode` and `formView` are not read. `userActions.addRecordForm: false` also takes the button off." + }, { "name": "compactToolbar", "type": "boolean",