Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions .changeset/console-616df6598b42.md
Original file line number Diff line number Diff line change
@@ -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

<!-- adr-0087: not-required (no-migration-prescription)
This diff moves `.objectui-sha` and the artefacts that travel with it: this console
changeset, the re-recorded `scripts/sdui-manifest.record.json` and the regenerated
`sdui.manifest.json`, and the re-recorded `packages/sdui-parser/objectui-lockstep.json`.
It adds, removes or renames no ObjectStack-authorable key: no Zod shape, no spec
declaration and no stored `sys_metadata` shape moves in it, so `objectstack migrate meta`
has nothing here to rewrite, and this body carries no prescription of its own.
The range carries two objectui changes their authors annotated breaking, and the digest
marked both. Each is answered against this tree:
- objectui `cbac9d7dd` (objectui#13118) removes objectui's last reader of the list
view's `filterableFields`, and `@object-ui/types` declares `NamedListView.filterableFields`
a `?: never` tombstone. The spec half is this tree's own, already landed: the key left
`ListViewSchema` in 18.0 with its conversion `view-list-filterable-fields-removed`
registered in `packages/spec/src/conversions/registry.ts`. This pin move is what lets
the console build at `main` again; it adds no second retirement.
- objectui `df7156808` (objectui#13075) types `NavigationItemSchema.visible` in
`@object-ui/types` by reference to this tree's `EvaluatedExpressionInputSchema` and
refuses a blank string there, and widens `@object-ui/layout`'s `VisibilityEvaluator`.
This tree's spec already types a navigation entry's `visible` as
`EvaluatedExpressionInputSchema` (`packages/spec/src/ui/app.zod.ts`), so the objectui
side now agrees with it; nothing in this tree's contract moves.
No package in this tree imports or depends on any `@object-ui/*` package, and
`@objectstack/console` publishes objectui's built SPA and exports no objectui type. -->

objectui range: `12dc7b47c340...616df6598b42`
2 changes: 1 addition & 1 deletion .objectui-sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
12dc7b47c340d9bd80b35406d890c2d27c8017dc
616df6598b429d2b3687301a2041198928e68971
6 changes: 3 additions & 3 deletions packages/sdui-parser/objectui-lockstep.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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) ---------------------- */",
Expand Down
8 changes: 4 additions & 4 deletions scripts/sdui-manifest.record.json
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
11 changes: 11 additions & 0 deletions sdui.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down
Loading