Skip to content

Commit 236f2df

Browse files
claude[bot]claude
andauthored
chore(console): bump the objectui pin 00d3f09c500c to a472b07167a3 — the shipped console now carries objectui#7477's ListView data.provider: 'object' fold (#15554)
* chore(console): bump the objectui pin 00d3f09c500c → a472b07167a3 Moves `.objectui-sha` past objectui#7477's `normalizeListViewSchema` fold, so the shipped Console SPA folds `data={{ provider: 'object', object }}` onto `objectName` and reads the author's view kind from `specType` / `type`. That fold is the consumer half #14791 step 3 depends on: with the old pin, a page written in the canonical spelling validates green and renders an empty list. The range walks completely (the objectui checkout was deepened first, so the FROM-pin object is present and the #14178 degraded tip-only `patch` shape cannot apply): 29 non-merge commits, 18 changesets added, 15 releasing, 4 declared-breaking, level `minor` derived from objectui's own declarations. The ADR-0087 disposition on the generated changeset judges each of the four declared-breaking entries against `packages/spec`'s authorable surface one at a time; none of them names a key this repo declares. `packages/sdui-parser/objectui-lockstep.json` is re-recorded at the new pin (byte-identical grammar region, 24 diagnostic codes, no port owed). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk * chore(console): re-record the SDUI manifest provenance at the new pin `scripts/gen-sdui-manifest-node.mjs --objectui-version 17.6.0` re-enumerated the published registry the new pin ships and re-recorded the provenance: `check-sdui-manifest` refuses a record whose `objectuiSha` lags `.objectui-sha`. The manifest itself does not move — 57 components, sha256 49211fee7792…, byte-identical, because both pins ship @object-ui 17.6.0. Only the pin the record was taken against changes. The browser route was run too (`pnpm sdui:manifest`): 57 public blocks dumped from objectui@a472b07167a3 through a real chromium, and ADR-0082 D4's declaration-parity ratchet reports no new divergence against the accepted baseline. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk * fix(spec): re-measure the eight objectui pin citations at a472b0716 (#15422) The pin bump moved `.objectui-sha` to `a472b07167a39e55491109e864bb5a54027dcfbd` while eight read-point records in `packages/spec/src` still asserted `00d3f09c5`. Per `check:objectui-pin-citations`' own instruction, each record was RE-MEASURED at the new pin rather than sha-replaced: every objectui `file:line` anchor was re-READ at `a472b0716` and the anchors and the sha were updated together. No read point died. Three anchors were found WRONG SINCE THEY WERE WRITTEN -- the exact #10274 class the gate exists to surface, and invisible to a line-number refresh because all three sit in files that are byte-identical across the hop: - `ObjectGrid.tsx:3790-3805` named `runBulkActionAggregate`, not the selection gating the record cites. The real block was `3541-3556` at `00d3f09c5` and is `3544-3559` here. - `button.tsx:70-87` / `:88-92` for the registration's input list and `defaultProps`: really `:85-102` / `:103-107`. - `plugin-dashboard/src/index.tsx:161` for the `object-metric` icon input: a docblock sentence in the registry shell, not the input. Really `:204`, which the sibling record in `component.zod.ts` already had right. Comments only -- no schema, no behaviour, no assertion changed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent de69b54 commit 236f2df

7 files changed

Lines changed: 135 additions & 75 deletions

File tree

.changeset/console-a472b07167a3.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
"@objectstack/console": minor
3+
---
4+
5+
Console (objectui) refreshed to `a472b07167a3`. Frontend changes in this range:
6+
7+
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).
8+
9+
- **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`)
10+
- **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`)
11+
- **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`)
12+
- **minor**`@object-ui/core` publishes `resolveRecordSourceObjectName`, the ONE reader for "which object is this block bound to" (objectui#7627). (objectui `b041b9c0c`)
13+
- **minor****Published TS surface narrowed:** `DashboardComponentSchema` no longer declares the dashboard-root `title` member (objectui#7623). (objectui `5d0876c5c`)
14+
- **minor****BREAKING** — BREAKING (`@object-ui/components`): the chart primitives — `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent`, `ChartStyle` and the `Char… (objectui `7bf244bea`)
15+
- **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`)
16+
- **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`)
17+
- **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`)
18+
- **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`)
19+
- **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`)
20+
- **patch** — Remove `src/ui/toast.tsx`, an unreferenced primitive, and the dependency only it imported (objectui `2f61238b9`)
21+
- **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`)
22+
- **patch** — A record-page URL now names the object the clicked rows actually came from, in `ObjectTree` and `ObjectCalendar` (objectui#7638). (objectui `2ce2612df`)
23+
- **patch** — fix(app-shell): the object-field options editor no longer drops `default` and `visibleWhen` on save (objectui `97c3e1972`)
24+
25+
⚠️ 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.
26+
27+
**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.
28+
29+
- _(no changeset)_ fix(scripts): check-doc-links resolves the #fragment, not just the file (objectui#7644) (#7657) (objectui `f7cf7e8a9`)
30+
- _(no changeset)_ docs(plugin-chatbot): document chatbot-floating's seven declared inputs keys (objectui#7594) (#7656) (objectui `8e501cb97`)
31+
- _(no changeset)_ docs(agents): record the never-approve seat rule beside the governed never-list (#7630) (objectui `2e99852ca`)
32+
- _(no changeset)_ refactor(examples): drop the inert root `title` from six catalog dashboards (#7634) (objectui `46cde8264`)
33+
- _(no changeset)_ docs(check-skill-examples): drop the stale zero-jsonc-fences claim (#7631) (objectui `0b24d7f85`)
34+
- _(no changeset)_ docs(governed-guard): replace the retired sha pin with the ruled approval-record predicate (#7616) (objectui `11edab88f`)
35+
- _(no changeset)_ docs(skills): split multi-document JSON fences, drop the `...` elisions, mark every parsing fence (#7608) (objectui `89d6adf37`)
36+
- _(no changeset)_ fix(scripts): judge spec citations at member granularity, and stop the header teaching a retired filter (objectui#7513) (#7617) (objectui `d28d87bf4`)
37+
- _(no changeset)_ fix(governed-guard): an authorised approval record satisfies the queue leg on any commit (#7606) (objectui `0d8fd7ce3`)
38+
- _(no changeset)_ chore(deps): Bump fumadocs-core from 16.14.4 to 16.15.4 (#7059) (objectui `1bae75bb8`)
39+
- _(no changeset)_ docs(claude-md): collapse the two AGENTS.md excerpts to rule + hook + pointer (#7600) (objectui `c70ebaaeb`)
40+
41+
<!-- 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. -->
42+
43+
objectui range: `00d3f09c500c...a472b07167a3`

.objectui-sha

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
00d3f09c500c4a45b5f27aca8af80349412faaf1
1+
a472b07167a39e55491109e864bb5a54027dcfbd

packages/sdui-parser/objectui-lockstep.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
],
77
"objectui": {
88
"repo": "https://github.com/objectstack-ai/objectui.git",
9-
"rev": "00d3f09c500c4a45b5f27aca8af80349412faaf1",
10-
"revDate": "2026-09-04T04:22:27Z",
9+
"rev": "a472b07167a39e55491109e864bb5a54027dcfbd",
10+
"revDate": "2026-09-04T17:28:55+00:00",
1111
"source": "packages/sdui-parser/src",
1212
"files": [
1313
"packages/sdui-parser/src/codegen.ts",
@@ -20,7 +20,7 @@
2020
"packages/sdui-parser/src/validate.ts"
2121
]
2222
},
23-
"recordedAgainstPin": "00d3f09c500c4a45b5f27aca8af80349412faaf1",
23+
"recordedAgainstPin": "a472b07167a39e55491109e864bb5a54027dcfbd",
2424
"grammarRegion": {
2525
"file": "packages/sdui-parser/src/parse.ts",
2626
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",

packages/spec/src/data/api-methods-batch-conformance.test.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,26 @@ const SINGLE_RECORD_WRITE_ONLY: Record<string, string> = {
6161
// `revoked` on ONE key. The multi-select surface this rule protects does not
6262
// exist for API keys, and the shape a future one would take does not need
6363
// `bulk` either — both read off the console build this release pins
64-
// (`.objectui-sha` = `00d3f09c5`, `packages/plugin-grid`; re-measured at
65-
// that pin, 2026-09-04 — previously measured at `67dadd602`, before that at
66-
// `d8ec8d6d4`, `9602dc820`, `190fbd01d`, `9a3daf8d3`, originally at
67-
// `6314e87f2`. `ObjectGrid.tsx` DID change across the move off `67dadd602`
68-
// (171 insertions, 81 deletions), so both claims below were re-derived
69-
// rather than carried over: `ObjectGrid.tsx:3790-3805`, whose block is
70-
// byte-identical to the one cited at `67dadd602:3436-3451` and shifted only
71-
// by insertions above it, and
72-
// `hooks/useBulkExecutor.ts:284-289`, in a file byte-identical at both pins
73-
// and re-READ there rather than carried on that identity — it still ends on
74-
// `label = 'bulk delete'`, the line the `284-288` span cited three pins ago
75-
// stopped short of, truncating the second of the two branches it names (the
76-
// #10274 class of anchor error, found by re-reading rather than by the file
77-
// changing, which is why byte-identity is never taken as proof an anchor is
78-
// right):
64+
// (`.objectui-sha` = `a472b0716`, `packages/plugin-grid`; re-measured at
65+
// that pin, 2026-09-04 — previously measured at `00d3f09c5`, `67dadd602`,
66+
// before that at `d8ec8d6d4`, `9602dc820`, `190fbd01d`, `9a3daf8d3`,
67+
// originally at `6314e87f2`. `ObjectGrid.tsx` DID change across the move off
68+
// `00d3f09c5` (7 insertions, 4 deletions, all at `:1204-1213`, where
69+
// `objectName` moved onto the shared `resolveRecordSourceObjectName`), and
70+
// the re-READ caught the previous record's OWN grid anchor as wrong rather
71+
// than merely shifted: `3790-3805` at `00d3f09c5` is `runBulkActionAggregate`
72+
// and says nothing about selection. The block this record means was
73+
// `3541-3556` there — byte-identical to the one cited at
74+
// `67dadd602:3436-3451` — and is `ObjectGrid.tsx:3544-3559` here, shifted
75+
// only by the three insertions above it. That is the #10274 class again, and
76+
// the reason a citation refresh re-READS instead of moving numbers:
77+
// arithmetic on the wrong anchor would have produced `3793-3808`, a
78+
// fresh-looking span still describing the wrong function. The second claim,
79+
// `hooks/useBulkExecutor.ts:284-289`, is in a file byte-identical at both
80+
// pins and re-READ there rather than carried on that identity — it still
81+
// ends on `label = 'bulk delete'`, the line the `284-288` span cited four
82+
// pins ago stopped short of, truncating the second of the two branches it
83+
// names (byte-identity is never taken as proof an anchor is right):
7984
//
8085
// · No checkbox column is rendered. None of the object's four list views
8186
// declares `bulkActions` / `bulkActionDefs` / `selection`, and `ObjectGrid`

packages/spec/src/ui/component.test.ts

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -278,13 +278,13 @@ describe('PageAccordionProps variant (#6776)', () => {
278278
// same file's `ComponentRegistry.register('accordion', …)` publishes the key to
279279
// the Studio block designer at `:966` (the `items` input, documented as
280280
// `[{ label, icon?, collapsed?, children }]`). Measured at the pin this repo
281-
// builds against — `.objectui-sha` = `00d3f09c5`. Re-derived at that pin
282-
// 2026-09-04: `containers.tsx` DID change across the move off `67dadd602`
283-
// (117 insertions, 63 deletions), and this time both anchors moved by exactly
284-
// one line — the icon block `918-924` to `919-925` and the registration input
285-
// `965` to `966` — each re-READ there with the cited text unchanged. Every
286-
// anchor was re-READ at the new pin, never inferred, because identity
287-
// preserves a wrong anchor as faithfully as a right one (#10274).
281+
// builds against — `.objectui-sha` = `a472b0716`. Re-derived at that pin
282+
// 2026-09-04: `containers.tsx` is byte-identical to the one at `00d3f09c5`,
283+
// the hop on which both anchors moved by exactly one line (`918-924` to
284+
// `919-925`, `965` to `966`), so NO anchor moved here — the icon block still
285+
// spans `919-925` and the registration input still lands on `:966`. Both were
286+
// re-READ at the new pin rather than inferred from that identity, because
287+
// identity preserves a wrong anchor as faithfully as a right one (#10274).
288288
//
289289
// #9397 spent a full dispatch cycle re-deriving that read point from scratch
290290
// after the sweep proposed retiring the key. This block plus the `.describe()`
@@ -367,12 +367,12 @@ describe('PageTabsProps items[].value / items[].count (#5775)', () => {
367367
// same file's `ComponentRegistry.register('tabs', …)` publishes the key to the
368368
// Studio block designer at `:789` (the `items` input, documented as
369369
// `[{ label, value?, icon?, count?, visibleWhen?, children }]`). Measured at
370-
// the pin this repo builds against — `.objectui-sha` = `00d3f09c5`. Re-derived
371-
// at that pin 2026-09-04: `containers.tsx` DID change across the move off
372-
// `67dadd602` (117 insertions, 63 deletions), and both anchors moved by
373-
// exactly one line — the icon block `729-735` to `730-736` and the
374-
// registration input `788` to `789` — each re-READ there with the cited text
375-
// unchanged. Both were re-READ at the new pin, never inferred (#10274).
370+
// the pin this repo builds against — `.objectui-sha` = `a472b0716`. Re-derived
371+
// at that pin 2026-09-04: `containers.tsx` is byte-identical to the one at
372+
// `00d3f09c5`, the hop on which both anchors moved by exactly one line
373+
// (`729-735` to `730-736`, `788` to `789`), so NO anchor moved here — the icon
374+
// block still spans `730-736` and the registration input still lands on
375+
// `:789`. Both were re-READ at the new pin, never inferred (#10274).
376376
//
377377
// #9397 spent a full dispatch cycle re-deriving the accordion's read point
378378
// after the sweep proposed retiring it. This block plus the `.describe()` it
@@ -2780,16 +2780,18 @@ describe('#7751 — object-* block props schemas', () => {
27802780
// #9881 and #9972 recorded the accordion and tab items; these two close the set.
27812781
//
27822782
// The button record re-measured at the pin this repo builds against —
2783-
// `.objectui-sha` = `00d3f09c5`, re-derived there 2026-09-04. This hop is the
2784-
// first that changed the record's SUBSTANCE and not merely its line numbers:
2785-
// `resolve-icon.ts` was restructured (110 insertions), so `resolveIcon` no
2786-
// longer PascalCases and maps inline — it delegates to the new
2787-
// `describeIconLookup` seam (`:117-120`), and the tokeniser now splits on
2788-
// hyphen, underscore AND whitespace (`/[-_\s]+/`), where this record used to
2789-
// say "splits on `-` only". That sentence was true when written and is false
2790-
// now, which is exactly why a citation refresh re-READS instead of moving
2791-
// numbers (#10274). `button.tsx` also changed (18 insertions): its anchors
2792-
// moved rather than died.
2783+
// `.objectui-sha` = `a472b0716`, re-derived there 2026-09-04. Both files in
2784+
// this chain, `resolve-icon.ts` and `button.tsx`, are byte-identical to the
2785+
// ones at `00d3f09c5`, so no anchor moved; every one below was still re-READ
2786+
// at the new pin rather than inferred from that identity (#10274). The hop
2787+
// onto `00d3f09c5` was the one that changed this record's SUBSTANCE and not
2788+
// merely its line numbers: `resolve-icon.ts` was restructured (110
2789+
// insertions), so `resolveIcon` no longer PascalCases and maps inline — it
2790+
// delegates to the `describeIconLookup` seam (`:117-120`), and the tokeniser
2791+
// splits on hyphen, underscore AND whitespace (`/[-_\s]+/`), where this record
2792+
// used to say "splits on `-` only". That sentence was true when written and
2793+
// was false by then, which is exactly why a citation refresh re-READS instead
2794+
// of moving numbers (#10274).
27932795
// The one move that changed the button READ POINT and not merely its line
27942796
// numbers was the one onto `9602dc820`: objectui#5993 deleted `button.tsx`'s
27952797
// file-local `toPascalCase` + `iconNameMap` + `icons` index and routed the
@@ -2853,7 +2855,11 @@ describe('ObjectMetricPropsSchema icon liveness (#10053)', () => {
28532855
const metric = ComponentPropsMap['object-metric'];
28542856

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

0 commit comments

Comments
 (0)