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
47 changes: 47 additions & 0 deletions .changeset/console-53ded82bf7a4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
"@objectstack/console": minor
---

Console (objectui) refreshed to `53ded82bf7a4`. Frontend changes in this range:

Derived from the changesets objectui declared over the range — 23 releasing of 28 changesets added across 34 non-merge commits; omitted: 5 release-nothing changesets, 7 commits carrying no changeset (they ship no package code).

- **minor** — Array filters on analytics aggregates were posted un-lowered and refused by the runtime with 400; they are now lowered to the canonical `FilterCondition` before the wire. (objectui `53ded82bf`)
- **minor** — Retire `ChatbotSchema.displayMode` — and its copy on `ChatbotFloatingSchema` — as an ADR-0049 retirement tombstone, and remove the `chatbot-floating` registration's "Display Mode"… (objectui `3e377c931`)
- **minor** — `ChartDataSeriesSchema` (and its TS twin `ChartDataSeries`) now REFUSES `chartType` on a chart series BY NAME and points at `type` — the renderer-internal spelling the non-strict… (objectui `caf477fa8`)
- **minor** — `DataScopeManager` now **denies** a row when a row-level scope rule carries an operator its evaluator does not implement. It used to **admit** the row. (objectui `83c77dc30`)
- **minor** — One home for the `datetime` display convention (objectui#7443). (objectui `81a2eb1fb`)
- **minor** — **`BaseSchema.visible` / `.hidden` / `.disabled` now declare the CEL envelope object the renderer already evaluates, as one named wire type** (objectui#7530, maintainer ruling 202… (objectui `c354ce5db`)
- **minor** — **Breaking for authored metadata:** `MarkdownSchema.sanitize` and `MarkdownSchema.components` are RETIRED (objectui#6972, ADR-0049 enforce-or-remove). A `markdown` node that autho… (objectui `446d93d4e`)
- **minor** — One named, importable authoring-face type per `plugin-chatbot` registration: `ChatbotEnhancedSchema` and `ChatbotFloatingSchema` join `ChatbotSchema` (objectui#7655, under the obj… (objectui `4ce14f125`)
- **minor** — Six user-visible fixes across the maker surface, the assistant rail and the dataset captions. (objectui `64dae8e71`)
- **minor** — `DrillDownConfigSchema` is the zod mirror of `DrillDownConfig`, and both declarations that carry `drillDown` reference it — `ChartSchema` (`zod/data-display.zod.ts`) and `ObjectDa… (objectui `52c8cf741`)
- **minor** — `ObjectGallerySchema` and `ObjectDataTableSchema` are members of `ObjectQLComponentSchema` on both faces — the TS union in `objectql.ts` and the zod union in `zod/objectql.zod.ts`… (objectui `52c8cf741`)
- **minor** — `ChartDataSeriesSchema` (and its TS twin `ChartDataSeries`) declares the six series keys the renderer reads — `label`, `variant`, `opacity`, `dashArray`, `stack`, `yAxis` — which… (objectui `8fe8e5c16`)
- **minor** — `AlertDialogSchema` now declares the four keys the `alert-dialog` renderer actually reads (objectui#7104): `content` (the dialog body, `SchemaNode | SchemaNode[]` like every sibli… (objectui `8ad218d58`)
- **minor** — **BREAKING** — `SchemaRegistry['kanban']` stops describing a component it cannot name (objectui `bc640ec56`)
- **minor** — One authority per exported type name, batch 3 of objectui#6349: `ComboboxOption`, `NamedActionDef`, `OrgTranslate`. (objectui `6e8863093`)
- **minor** — **Removes two published exports.** Retire the `MobileResponsiveConfig` and `GestureConfig` types (objectui#7519, ADR-0049 enforce-or-remove). Both names are deleted from `@object-… (objectui `51eb51558`)
- **minor** — Retire `FloatingChatbotConfig.triggerIcon` (objectui#7654, ADR-0049 enforce-or-remove). (objectui `a3eb5d07a`)
- **minor** — One shared record-source ladder, five plugins delegate (objectui#7632). (objectui `ce2aaefe1`)
- **patch** — The published `@default` documentation on two `layout.ts` members now matches the value the renderer actually applies. `ContainerSchema.maxWidth` documented `'lg'` while `containe… (objectui `e546222b3`)
- **patch** — Declare `avatar` and `avatarFallback` on `ChatMessage`, on both faces (objectui#7295 — the residue of objectui#4424, whose `RuntimeOnlyMessageKeys` named only the three keys API m… (objectui `858cd72e3`)
- **patch** — `ClassNameStylePropsSchema` describes itself by its two keys (objectui#7578). (objectui `9587fc959`)
- **patch** — Declare `wrapperClass` on `CheckboxSchema`, on both faces (objectui#6938 — the residue of that card; its `context-menu` half landed with objectui#6939 group 1). (objectui `b74a8598d`)
- **patch** — The standalone runner renders `AppAction.items` from its declared type only, which makes `AppActionSchema.onClick`'s retirement message true again (objectui#6854, maintainer rulin… (objectui `adb2a86db`)

⚠️ 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 7 commits in this range with no `.changeset/*.md`. The code is inside the pin above and ships here, but nothing upstream declared them, so they appear 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)_ fix(hooks): read the edited path from the key the routed tool carries (#7686) (objectui `565f2b6aa`)
- _(no changeset)_ fix(schema-catalog): drop the undeclared `variant` key from the dropdown-menu Delete item (#7717) (objectui `f96a781c8`)
- _(no changeset)_ fix(hooks): an escaped quote inside a double-quoted word does not close it (#7695) (objectui `6eebc54b6`)
- _(no changeset)_ docs(skills): correct six wrong shipped-API facts in the published objectui guides (#7677) (objectui `ab771d2dd`)
- _(no changeset)_ docs(skills): record ComponentInput's five ADR-0049 tombstones in the plugin guide (objectui#7636) (#7647) (objectui `09163884f`)
- _(no changeset)_ docs(agents): state the changeset gate's full population, not `src/` alone (#7640) (objectui `0b1e39d4a`)
- _(no changeset)_ docs(charts): rewrite the inline-series chart examples into the model the renderer implements (#7679) (objectui `d3f5256ce`)

<!-- adr-0087: not-required (no-migration-prescription) All TWO declared-breaking entries in the range `a472b07167a3...53ded82bf7a4` are judged ONE AT A TIME against `packages/spec`'s authorable surface at this HEAD, re-measured here rather than quoted from upstream prose. (1) objectui `446d93d4e` (objectui#6972) retires `MarkdownSchema.sanitize` and `MarkdownSchema.components` as ADR-0049 tombstones on objectui's OWN SDUI `markdown` node. That node is not an ObjectStack-authorable component: `MarkdownSchema` has ZERO occurrences under `packages/spec`, its single hit anywhere in `packages/` being one line of published history in `packages/console/CHANGELOG.md`; and `sanitize` occurs ZERO times as an authored key in `packages/spec/src` — its five textual hits are a namespace-charset helper, two SQL-injection docblocks and one `view.zod.ts` refusal message, none of them a schema member. The `markdown` spelling this repo DOES declare is a data FIELD type (`packages/spec/src/data/field.zod.ts:2263`, `data/field-value.zod.ts:58`) — a long-text field kind that carries neither retired key. No accepted ObjectStack key moves and no stored `sys_metadata` row can carry either spelling. (2) objectui `bc640ec56` (objectui#7645) narrows the VALUE side of one entry in `@object-ui/types`' `SchemaRegistry` type map to `BaseSchema & { type: 'kanban' }`; upstream states `keyof SchemaRegistry` and the published `ComponentType` union are unchanged. This repo's own `SchemaRegistry` shares the NAME and nothing else — all 16 files matching it under `packages/spec/src` are ObjectStack's metadata-registry contract surface (`contracts/metadata-service.ts`, `contracts/objectql-engine.ts`'s `EngineSchemaRegistryView`, the error-code ledger), never objectui's component-type map, and `packages/spec/src` imports from `@object-ui/*` ZERO times. `KanbanSchema` has 2 occurrences under `packages/spec/src` and BOTH are prose — a comment at `ui/component.test.ts:2783` and a docblock at `ui/component.zod.ts:2679` — neither a declaration nor an import. Neither entry is reachable through `@objectstack/console` in any case, re-measured against `packages/console/package.json` at this HEAD: it publishes a frozen prebuilt SPA whose `files` list is ["dist", "README.md", "CHANGELOG.md"], whose sole `exports` entry is `./package.json` and whose `dependencies` are empty, so it forwards no `@object-ui/*` module entry point and re-exports none of these types; and no `package.json` in this workspace declares an `@object-ui/*` dependency at all (0 files, re-measured). This diff is `.objectui-sha`, this changeset, the four `packages/spec/src` sources whose objectui pin CITATIONS the bump refreshes — comment-only, and measured so: the base and head versions of all four compile to AST-identical output under TypeScript with `removeComments`, which string literals survive, so no describe text, alias or tombstone literal moved — and the two generated pin records the bump gates require (`scripts/sdui-manifest.record.json`, `packages/sdui-parser/objectui-lockstep.json`). No `packages/spec` schema, no authorable metadata key and no protocol surface changes in it — so there is no stored-metadata rewrite for `objectstack migrate meta` to prescribe and therefore no ADR-0087 ledger entry to write or to name from THIS bump. This bump adds no ledger entry and claims none. -->

objectui range: `a472b07167a3...53ded82bf7a4`
2 changes: 1 addition & 1 deletion .objectui-sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a472b07167a39e55491109e864bb5a54027dcfbd
53ded82bf7a494f54e344e19099dbf00854b8694
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": "a472b07167a39e55491109e864bb5a54027dcfbd",
"revDate": "2026-09-04T17:28:55+00:00",
"rev": "53ded82bf7a494f54e344e19099dbf00854b8694",
"revDate": "2026-09-05T15:42:42+00:00",
"source": "packages/sdui-parser/src",
"files": [
"packages/sdui-parser/src/codegen.ts",
Expand All @@ -20,7 +20,7 @@
"packages/sdui-parser/src/validate.ts"
]
},
"recordedAgainstPin": "a472b07167a39e55491109e864bb5a54027dcfbd",
"recordedAgainstPin": "53ded82bf7a494f54e344e19099dbf00854b8694",
"grammarRegion": {
"file": "packages/sdui-parser/src/parse.ts",
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",
Expand Down
33 changes: 17 additions & 16 deletions packages/spec/src/data/api-methods-batch-conformance.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,24 +61,25 @@ const SINGLE_RECORD_WRITE_ONLY: Record<string, string> = {
// `revoked` on ONE key. The multi-select surface this rule protects does not
// exist for API keys, and the shape a future one would take does not need
// `bulk` either — both read off the console build this release pins
// (`.objectui-sha` = `a472b0716`, `packages/plugin-grid`; re-measured at
// that pin, 2026-09-04 — previously measured at `00d3f09c5`, `67dadd602`,
// before that at `d8ec8d6d4`, `9602dc820`, `190fbd01d`, `9a3daf8d3`,
// originally at `6314e87f2`. `ObjectGrid.tsx` DID change across the move off
// `00d3f09c5` (7 insertions, 4 deletions, all at `:1204-1213`, where
// `objectName` moved onto the shared `resolveRecordSourceObjectName`), and
// the re-READ caught the previous record's OWN grid anchor as wrong rather
// than merely shifted: `3790-3805` at `00d3f09c5` is `runBulkActionAggregate`
// and says nothing about selection. The block this record means was
// `3541-3556` there — byte-identical to the one cited at
// `67dadd602:3436-3451` — and is `ObjectGrid.tsx:3544-3559` here, shifted
// only by the three insertions above it. That is the #10274 class again, and
// the reason a citation refresh re-READS instead of moving numbers:
// arithmetic on the wrong anchor would have produced `3793-3808`, a
// fresh-looking span still describing the wrong function. The second claim,
// (`.objectui-sha` = `53ded82bf`, `packages/plugin-grid`; re-measured at
// that pin, 2026-09-08 — previously measured at `a472b0716`, `00d3f09c5`,
// `67dadd602`, before that at `d8ec8d6d4`, `9602dc820`, `190fbd01d`,
// `9a3daf8d3`, originally at `6314e87f2`. `ObjectGrid.tsx` DID change again
// across the move off `a472b0716` (24 insertions, 30 deletions), so the
// selection block this record means was re-READ rather than carried: it is
// `ObjectGrid.tsx:3538-3553` here, was `3544-3559` at `a472b0716`, and the
// sixteen lines are BYTE-IDENTICAL across the hop — `git hash-object` on both
// spans returns `6133933199230670e29d8c7f51c558d86a0af1d2`, so the block only
// shifted six lines UP and none of its substance moved. The earlier hop off
// `00d3f09c5` is the one that caught the previous record's OWN grid anchor as
// wrong rather than merely shifted: `3790-3805` there is
// `runBulkActionAggregate` and says nothing about selection. That is the
// #10274 class, and the reason a citation refresh re-READS instead of moving
// numbers — arithmetic on a wrong anchor produces a fresh-looking span still
// describing the wrong function. The second claim,
// `hooks/useBulkExecutor.ts:284-289`, is in a file byte-identical at both
// pins and re-READ there rather than carried on that identity — it still
// ends on `label = 'bulk delete'`, the line the `284-288` span cited four
// ends on `label = 'bulk delete'`, the line the `284-288` span cited five
// pins ago stopped short of, truncating the second of the two branches it
// names (byte-identity is never taken as proof an anchor is right):
//
Expand Down
39 changes: 22 additions & 17 deletions packages/spec/src/ui/component.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,13 +279,14 @@ describe('PageAccordionProps variant (#6776)', () => {
// same file's `ComponentRegistry.register('accordion', …)` publishes the key to
// the Studio block designer at `:966` (the `items` input, documented as
// `[{ label, icon?, collapsed?, children }]`). Measured at the pin this repo
// builds against — `.objectui-sha` = `a472b0716`. Re-derived at that pin
// 2026-09-04: `containers.tsx` is byte-identical to the one at `00d3f09c5`,
// the hop on which both anchors moved by exactly one line (`918-924` to
// `919-925`, `965` to `966`), so NO anchor moved here — the icon block still
// spans `919-925` and the registration input still lands on `:966`. Both were
// re-READ at the new pin rather than inferred from that identity, because
// identity preserves a wrong anchor as faithfully as a right one (#10274).
// builds against — `.objectui-sha` = `53ded82bf`. Re-derived at that pin
// 2026-09-08: `containers.tsx` is byte-identical to the one at `a472b0716`
// (and, through it, to `00d3f09c5` — the last hop on which either anchor
// moved, both by exactly one line, `918-924` to `919-925` and `965` to `966`),
// so NO anchor moved here — the icon block still spans `919-925` and the
// registration input still lands on `:966`. Both were re-READ at the new pin
// rather than inferred from that identity, because identity preserves a wrong
// anchor as faithfully as a right one (#10274).
//
// #9397 spent a full dispatch cycle re-deriving that read point from scratch
// after the sweep proposed retiring the key. This block plus the `.describe()`
Expand Down Expand Up @@ -368,12 +369,13 @@ describe('PageTabsProps items[].value / items[].count (#5775)', () => {
// same file's `ComponentRegistry.register('tabs', …)` publishes the key to the
// Studio block designer at `:789` (the `items` input, documented as
// `[{ label, value?, icon?, count?, visibleWhen?, children }]`). Measured at
// the pin this repo builds against — `.objectui-sha` = `a472b0716`. Re-derived
// at that pin 2026-09-04: `containers.tsx` is byte-identical to the one at
// `00d3f09c5`, the hop on which both anchors moved by exactly one line
// (`729-735` to `730-736`, `788` to `789`), so NO anchor moved here — the icon
// block still spans `730-736` and the registration input still lands on
// `:789`. Both were re-READ at the new pin, never inferred (#10274).
// the pin this repo builds against — `.objectui-sha` = `53ded82bf`. Re-derived
// at that pin 2026-09-08: `containers.tsx` is byte-identical to the one at
// `a472b0716` (and, through it, to `00d3f09c5` — the last hop on which either
// anchor moved, both by exactly one line, `729-735` to `730-736` and `788` to
// `789`), so NO anchor moved here — the icon block still spans `730-736` and
// the registration input still lands on `:789`. Both were re-READ at the new
// pin, never inferred (#10274).
//
// #9397 spent a full dispatch cycle re-deriving the accordion's read point
// after the sweep proposed retiring it. This block plus the `.describe()` it
Expand Down Expand Up @@ -2776,7 +2778,9 @@ describe('#7751 — object-* block props schemas', () => {
// #16503 — the spec half of objectui#8172 (decision batch #68, 2026-09-07,
// option A: the contract declares the capability that already ships, is
// documented and is in use). Measured at the objectui pin this repo builds
// against (`.objectui-sha` = `a472b0716`): `plugin-kanban/src/ObjectKanban.tsx:264`
// against (`.objectui-sha` = `53ded82bf`; all four anchors re-READ at that pin
// 2026-09-08 — every `plugin-kanban` file below is byte-identical to the one at
// `a472b0716`, and none moved): `plugin-kanban/src/ObjectKanban.tsx:264`
// queries `$top: schema.limit ?? DEFAULT_KANBAN_LIMIT` (100, `:71`),
// `plugin-kanban/src/index.tsx:395-398` maps `limit: 'limit'` in
// `OBJECT_KANBAN_DATA_SOURCE`, `plugin-kanban/src/types.ts:134` declares
Expand Down Expand Up @@ -2843,10 +2847,11 @@ describe('ObjectKanbanPropsSchema limit — the row cap four objectui faces alre
// #9881 and #9972 recorded the accordion and tab items; these two close the set.
//
// The button record re-measured at the pin this repo builds against —
// `.objectui-sha` = `a472b0716`, re-derived there 2026-09-04. Both files in
// `.objectui-sha` = `53ded82bf`, re-derived there 2026-09-08. Both files in
// this chain, `resolve-icon.ts` and `button.tsx`, are byte-identical to the
// ones at `00d3f09c5`, so no anchor moved; every one below was still re-READ
// at the new pin rather than inferred from that identity (#10274). The hop
// ones at `a472b0716` and, through it, to `00d3f09c5`, so no anchor moved;
// every one below was still re-READ at the new pin rather than inferred from
// that identity (#10274). The hop
// onto `00d3f09c5` was the one that changed this record's SUBSTANCE and not
// merely its line numbers: `resolve-icon.ts` was restructured (110
// insertions), so `resolveIcon` no longer PascalCases and maps inline — it
Expand Down
Loading
Loading