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

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

Derived from the changesets objectui declared over the range — 15 releasing of 18 changesets added across 29 non-merge commits; omitted: 3 release-nothing changesets, 11 commits carrying no changeset (they ship no package code).

- **minor** — **BREAKING** — Converge the lookup/user widget metadata on the spec's camelCase — one concept, one spelling (objectui#7155, maintainer ruling A′ of 2026-09-03, director decision batch #19). (objectui `351eb3181`)
- **minor** — **BREAKING** — One authority for `KanbanSchema` / `KanbanColumn` / `KanbanCard`: the bare names now belong to `@object-ui/plugin-kanban` (objectui#6172, closing the cross-package half of objectu… (objectui `2c71482ea`)
- **minor** — Retire `ComponentInput.inputType` — the fifth and last key objectui#5905 named (ADR-0049 enforce-or-remove, maintainer ruling 2026-08-31, option B). (objectui `1ec291c0d`)
- **minor** — `@object-ui/core` publishes `resolveRecordSourceObjectName`, the ONE reader for "which object is this block bound to" (objectui#7627). (objectui `b041b9c0c`)
- **minor** — **Published TS surface narrowed:** `DashboardComponentSchema` no longer declares the dashboard-root `title` member (objectui#7623). (objectui `5d0876c5c`)
- **minor** — **BREAKING** — BREAKING (`@object-ui/components`): the chart primitives — `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent`, `ChartStyle` and the `Char… (objectui `7bf244bea`)
- **minor** — ListView: fold `data={{ provider: 'object', object }}` onto `objectName`, and read the author's view kind from `specType` / `type` (objectui#7477 — step 6 of #2890, released by th… (objectui `00d2fa682`)
- **minor** — Retire the dashboard-**root** `title` read across all five surfaces (objectui#7509, maintainer ruling 2026-09-04, decision batch #29, option C, under ADR-0049). (objectui `1cca678ba`)
- **minor** — **BREAKING** — Re-home the breakpoint layout vocabulary and delete the two dead responsive implementations (objectui#7580, maintainer ruling 2026-09-04, option A). (objectui `e62c44e7e`)
- **minor** — `@object-ui/types/zod`: the zod const `StylePropsSchema` is renamed to `ClassNameStylePropsSchema` (objectui#5928). **The old name is gone** — there is no deprecated alias and no… (objectui `24e027e93`)
- **patch** — Fix `extractToc` eating the underscores out of a `SCREAMING_SNAKE` heading, so its `#id` links resolve to the heading they name again (objectui#7667). (objectui `a472b0716`)
- **patch** — Remove `src/ui/toast.tsx`, an unreferenced primitive, and the dependency only it imported (objectui `2f61238b9`)
- **patch** — Fix `extractToc` deleting tag-shaped text that lives INSIDE an inline code span, so its `#id` links resolve to the heading they name again (objectui#7658). (objectui `90c6d090d`)
- **patch** — A record-page URL now names the object the clicked rows actually came from, in `ObjectTree` and `ObjectCalendar` (objectui#7638). (objectui `2ce2612df`)
- **patch** — fix(app-shell): the object-field options editor no longer drops `default` and `visibleWhen` on save (objectui `97c3e1972`)

⚠️ 4 of these carry a breaking change: 4 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 11 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(scripts): check-doc-links resolves the #fragment, not just the file (objectui#7644) (#7657) (objectui `f7cf7e8a9`)
- _(no changeset)_ docs(plugin-chatbot): document chatbot-floating's seven declared inputs keys (objectui#7594) (#7656) (objectui `8e501cb97`)
- _(no changeset)_ docs(agents): record the never-approve seat rule beside the governed never-list (#7630) (objectui `2e99852ca`)
- _(no changeset)_ refactor(examples): drop the inert root `title` from six catalog dashboards (#7634) (objectui `46cde8264`)
- _(no changeset)_ docs(check-skill-examples): drop the stale zero-jsonc-fences claim (#7631) (objectui `0b24d7f85`)
- _(no changeset)_ docs(governed-guard): replace the retired sha pin with the ruled approval-record predicate (#7616) (objectui `11edab88f`)
- _(no changeset)_ docs(skills): split multi-document JSON fences, drop the `...` elisions, mark every parsing fence (#7608) (objectui `89d6adf37`)
- _(no changeset)_ fix(scripts): judge spec citations at member granularity, and stop the header teaching a retired filter (objectui#7513) (#7617) (objectui `d28d87bf4`)
- _(no changeset)_ fix(governed-guard): an authorised approval record satisfies the queue leg on any commit (#7606) (objectui `0d8fd7ce3`)
- _(no changeset)_ chore(deps): Bump fumadocs-core from 16.14.4 to 16.15.4 (#7059) (objectui `1bae75bb8`)
- _(no changeset)_ docs(claude-md): collapse the two AGENTS.md excerpts to rule + hook + pointer (#7600) (objectui `c70ebaaeb`)

<!-- adr-0087: not-required (no-migration-prescription) All FOUR declared-breaking entries in the range `00d3f09c500c...a472b07167a3` are judged ONE AT A TIME against `packages/spec`'s authorable surface at this HEAD, not as a batch, and every count below was re-measured here rather than quoted from upstream prose. (1) objectui `351eb3181` (objectui#7155) converges objectui's WIDGET metadata bags `LookupFieldMetadata` / `UserFieldMetadata` onto the spec's camelCase, removing the snake members. It moves TOWARD this repo's contract, not away from it: `packages/spec/src/data/field.zod.ts` already declares `displayField` (`:835`, `:1342`), `descriptionField` (`:1343`) and `lookupFilters` (`:1355`), and the snake spellings have ZERO occurrences under `packages/spec/src` — `display_field` 0, `description_field` 0, `lookup_filters` 0, `id_field` 0 (the single apparent `id_field` hit is the substring inside `invalid_field` in an unrelated `api/protocol.test.ts` fixture). The snake dialect was never an ObjectStack-authorable key, so no accepted key moves, no stored `sys_metadata` row can carry a retired spelling, and there is nothing here for `objectstack migrate meta` to act on. (2) objectui `2c71482ea` (objectui#6172) is a TypeScript export rename inside `@object-ui/types` giving the bare Kanban trio to `@object-ui/plugin-kanban`; `KanbanSchema`, `KanbanColumn` and `KanbanCard` have ZERO occurrences under `packages/spec/src`, and upstream states no member, no optionality and no accept/reject behaviour moves with it. (3) objectui `7bf244bea` (objectui#7397) removes the duplicated React chart primitives from `@object-ui/components`. This repo's own `ChartConfigSchema` / `ChartConfig` (`packages/spec/src/ui/chart.zod.ts:539`) is an independently declared ObjectStack metadata schema that shares a NAME with the removed objectui type and nothing else: `packages/spec/src` imports from `@object-ui/*` zero times (re-measured), so none of the removed React exports sits on any ObjectStack surface. (4) objectui `e62c44e7e` (objectui#7580) re-homes `BreakpointName` and `BreakpointColumnMap` into objectui packages and deletes the two dead responsive implementations. This repo retired that whole vocabulary itself in objectstack#11027 and its ADR-0087 ledger entries ALREADY EXIST on this side — `RETIRED_DEFS_BY_MAJOR[18]` carries `ui/BreakpointName`, `ui/BreakpointColumnMap` and `ui/BreakpointOrderMap` — so this entry is objectui catching up to a retirement already registered here, and it prescribes nothing new. None of the four 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"] and whose sole `exports` entry is `./package.json`, 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 and the regenerated console provenance records the pin gates require, and nothing else — no `packages/spec` schema, no authorable metadata key and no protocol surface change is in it. This bump adds no ledger entry and claims none. -->

objectui range: `00d3f09c500c...a472b07167a3`
2 changes: 1 addition & 1 deletion .objectui-sha
Original file line number Diff line number Diff line change
@@ -1 +1 @@
00d3f09c500c4a45b5f27aca8af80349412faaf1
a472b07167a39e55491109e864bb5a54027dcfbd
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": "00d3f09c500c4a45b5f27aca8af80349412faaf1",
"revDate": "2026-09-04T04:22:27Z",
"rev": "a472b07167a39e55491109e864bb5a54027dcfbd",
"revDate": "2026-09-04T17:28:55+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": "00d3f09c500c4a45b5f27aca8af80349412faaf1",
"recordedAgainstPin": "a472b07167a39e55491109e864bb5a54027dcfbd",
"grammarRegion": {
"file": "packages/sdui-parser/src/parse.ts",
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",
Expand Down
35 changes: 20 additions & 15 deletions packages/spec/src/data/api-methods-batch-conformance.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,26 @@ 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` = `00d3f09c5`, `packages/plugin-grid`; re-measured at
// that pin, 2026-09-04 — previously measured at `67dadd602`, before that at
// `d8ec8d6d4`, `9602dc820`, `190fbd01d`, `9a3daf8d3`, originally at
// `6314e87f2`. `ObjectGrid.tsx` DID change across the move off `67dadd602`
// (171 insertions, 81 deletions), so both claims below were re-derived
// rather than carried over: `ObjectGrid.tsx:3790-3805`, whose block is
// byte-identical to the one cited at `67dadd602:3436-3451` and shifted only
// by insertions above it, and
// `hooks/useBulkExecutor.ts:284-289`, 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 three pins ago
// stopped short of, truncating the second of the two branches it names (the
// #10274 class of anchor error, found by re-reading rather than by the file
// changing, which is why byte-identity is never taken as proof an anchor is
// right):
// (`.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,
// `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
// 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):
//
// · No checkbox column is rendered. None of the object's four list views
// declares `bulkActions` / `bulkActionDefs` / `selection`, and `ObjectGrid`
Expand Down
54 changes: 30 additions & 24 deletions packages/spec/src/ui/component.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -278,13 +278,13 @@ 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` = `00d3f09c5`. Re-derived at that pin
// 2026-09-04: `containers.tsx` DID change across the move off `67dadd602`
// (117 insertions, 63 deletions), and this time both anchors moved by exactly
// one line — the icon block `918-924` to `919-925` and the registration input
// `965` to `966` — each re-READ there with the cited text unchanged. Every
// anchor was re-READ at the new pin, never inferred, because identity
// preserves a wrong anchor as faithfully as a right one (#10274).
// 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).
//
// #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 @@ -367,12 +367,12 @@ 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` = `00d3f09c5`. Re-derived
// at that pin 2026-09-04: `containers.tsx` DID change across the move off
// `67dadd602` (117 insertions, 63 deletions), and both anchors moved by
// exactly one line — the icon block `729-735` to `730-736` and the
// registration input `788` to `789` — each re-READ there with the cited text
// unchanged. Both were re-READ at the new pin, never inferred (#10274).
// 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).
//
// #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 @@ -2780,16 +2780,18 @@ describe('#7751 — object-* block props schemas', () => {
// #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` = `00d3f09c5`, re-derived there 2026-09-04. This hop is the
// first that changed the 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 delegates to the new
// `describeIconLookup` seam (`:117-120`), and the tokeniser now splits on
// hyphen, underscore AND whitespace (`/[-_\s]+/`), where this record used to
// say "splits on `-` only". That sentence was true when written and is false
// now, which is exactly why a citation refresh re-READS instead of moving
// numbers (#10274). `button.tsx` also changed (18 insertions): its anchors
// moved rather than died.
// `.objectui-sha` = `a472b0716`, re-derived there 2026-09-04. 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
// 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
// delegates to the `describeIconLookup` seam (`:117-120`), and the tokeniser
// splits on hyphen, underscore AND whitespace (`/[-_\s]+/`), where this record
// used to say "splits on `-` only". That sentence was true when written and
// was false by then, which is exactly why a citation refresh re-READS instead
// of moving numbers (#10274).
// The one move that changed the button READ POINT and not merely its line
// numbers was the one onto `9602dc820`: objectui#5993 deleted `button.tsx`'s
// file-local `toPascalCase` + `iconNameMap` + `icons` index and routed the
Expand Down Expand Up @@ -2853,7 +2855,11 @@ describe('ObjectMetricPropsSchema icon liveness (#10053)', () => {
const metric = ComponentPropsMap['object-metric'];

it('accepts an icon on the metric tile — the value objectui resolves via getLazyIcon', () => {
// objectui `plugin-dashboard/src/index.tsx:161` publishes the input;
// objectui `plugin-dashboard/src/index.tsx:204` publishes the input
// (this read `:161` until the `a472b0716` re-measure: wrong since written,
// not shifted — that line is a sentence in the registry shell's docblock,
// not the `object-metric` registration's `icon` input, and the file is
// byte-identical at both pins, so only a re-READ could find it);
// `ObjectMetricWidget.tsx:142` destructures it and forwards it at `:474` to
// `MetricWidget`, which resolves it at `MetricWidget.tsx:312-321` and draws
// it at `:373-382` in the `colorVariant`-tinted square.
Expand Down
Loading
Loading