Skip to content

Commit ba828a5

Browse files
committed
chore(objectui): bump the console pin to 0df67f2 (carries objectui#12089)
WIP: pin, console changeset digest, regenerated SDUI manifest and record, and the re-measured objectui pin citations in packages/spec/src. Claude-Session: https://claude.ai/code/session_01Rerax7QTjKMPCUZxQUtPFR Co-authored-by: Claude <noreply@anthropic.com>
1 parent 680a86b commit ba828a5

18 files changed

Lines changed: 467 additions & 152 deletions

‎.changeset/console-0df67f237c5a.md‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
"@objectstack/console": minor
3+
---
4+
5+
Console (objectui) refreshed to `0df67f237c5a`. Frontend changes in this range:
6+
7+
Derived from the changesets objectui declared over the range — 28 releasing of 29 changesets added across 21 non-merge commits; omitted: 1 release-nothing changeset, 1 commit carrying no changeset (they ship no package code).
8+
9+
- **minor** — The Setup catalog for positions and permission sets reads the registry. It is built from the metadata-admin list and editors in their environment scope, not from new pages (object… (objectui `0df67f237`)
10+
- **minor** — A bulk action's field-backed param now renders its real control on the selection bar, and the confirm step names the picked record (objectui#12105). (objectui `29b994902`)
11+
- **minor** — A create form says when the server will fill a field: "Set automatically when saved." under a field whose `defaultValue` the server resolves at insert, while the field is empty (o… (objectui `b7cd5c891`)
12+
- **minor** — A calendar view in a list draws every record of the days it shows, not the first 100 records of the object (objectui#12081 item 2). (objectui `16c8810ac`)
13+
- **minor** — In-place edit on the record page and a list's in-cell edit honour the caller's field write grant, and the owner field honours the transfer grant (objectui#12103). (objectui `5f75cfad1`)
14+
- **minor** — List views read an absent `userActions.editInline` as on, the v18 protocol default (objectui#12086, the consumer half of objectstack#22605). A list view is editable in place by de… (objectui `5330afd1f`)
15+
- **minor** — Five write affordances that read no grant at all now read the affordance-to-grant map, so a caller without the grant is no longer offered a write the server then refuses (objectui… (objectui `5af42dbbd`)
16+
- **minor** — After a marketplace install into the environment the console is rendering, the package page waits until that environment serves the installed package's app, and only then refreshe… (objectui `3c0f8069e`)
17+
- **minor** — `element:repeater` and `element:number` publish the node-level `dataSource` binding as their only query input (objectui#12085). `@objectstack/spec` retires the element layer's fla… (objectui `ce991bd70`)
18+
- **minor** — A create form asks its fields the create question, so a role that may create records but not edit them can fill and submit the form (objectui#12082). Every console affordance that… (objectui `023f00d46`)
19+
- **minor** — **BREAKING** — The row type of the `VersionHistory` timeline is declared as `VersionHistoryEntry` instead of `VersionEntry` (objectui#6349, batch 10). `@object-ui/collaboration` publishes an unr… (objectui `12ff25631`)
20+
- **minor** — The props of this package's `ThemeProvider` are declared and exported as `ThemePreferenceProviderProps` instead of `ThemeProviderProps` (objectui#6349, batch 10). `@object-ui/reac… (objectui `12ff25631`)
21+
- **minor** — `ConnectionState` is a new export: the lifecycle state of one client connection, `'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error'` (objectui#6349, batch 10)… (objectui `12ff25631`)
22+
- **minor** — The props of this package's minimal `AppShell` container are declared and exported as `MinimalAppShellProps` instead of `AppShellProps` (objectui#6349, batch 9). `@object-ui/layou… (objectui `1b2d0160f`)
23+
- **minor** — The props of this package's view switcher are declared and exported as `ListViewSwitcherProps` instead of `ViewSwitcherProps` (objectui#6349, batch 8). `@object-ui/plugin-view` pu… (objectui `d758f2f20`)
24+
- **patch** — **The console no longer offers an object to a caller who cannot read it** (objectui#12109). A navigation entry bound to an object (`type: 'object'`, by its `objectName`) is not dr… (objectui `5a65f7d57`)
25+
- **patch** — An object timeline with a `groupByField` draws one group per value, headed by the value's display name (objectui#12104). (objectui `206505c34`)
26+
- **patch** — An org install from the Marketplace catalog's "Your organization" strip, on a cloud-managed environment, now waits until the environment serves the installed package's app before… (objectui `a21ff9a95`)
27+
- **patch** — The console asks for recent activity only when the signed-in user may read it, and a failed read no longer shows as "No recent activity" (objectui#12081, item 8). (objectui `029bdaf45`)
28+
- **patch** — An app that serves the signed-in user no navigation now opens on an app-level empty state, not on the Studio home (objectui#12079). (objectui `417e24567`)
29+
- **patch** — The record chatter stores each reaction as the member's own `sys_comment_reaction` record, and stops writing the whole `sys_comment.reactions` column (objectui#12078; ruling A, am… (objectui `de302c731`)
30+
- **patch** — fix(console): a long flow screen or action parameter list keeps its Submit / Confirm on screen (objectui#12080) (objectui `4d0ff2331`)
31+
- **patch** — `ConnectionState` is re-exported from `@object-ui/types` instead of being declared a second time here (objectui#6349, batch 10). `@object-ui/data-objectstack` declared the same fi… (objectui `12ff25631`)
32+
- **patch** — `ConnectionState` is re-exported from `@object-ui/types` instead of being declared a second time here (objectui#6349, batch 10). `@object-ui/collaboration` declared the same five… (objectui `12ff25631`)
33+
- **patch** — Doc comments only. `UserDataAdapter` now carries the contract notes `@object-ui/app-shell` kept on its own copy of the interface: implementations must be safe to call concurrently… (objectui `1b2d0160f`)
34+
- **patch** — The props of the console's page header are declared as `ConsolePageHeaderProps` instead of `PageHeaderComponentProps` (objectui#6349, batch 8). `@object-ui/layout` publishes `Page… (objectui `d758f2f20`)
35+
- **patch** — Doc comment only. The `PageHeaderComponentProps` comment no longer says `@object-ui/app-shell` shares the name: the console's header props are now `ConsolePageHeaderProps`, so thi… (objectui `d758f2f20`)
36+
- **patch** — The props of the dashboard's read-only record drill drawer are declared as `DashboardRecordDetailDrawerProps` instead of `RecordDetailDrawerProps` (objectui#6349, batch 8). `@obje… (objectui `d758f2f20`)
37+
38+
⚠️ 1 of these carries a breaking change: 1 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.
39+
40+
**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.
41+
42+
- _(no changeset)_ fix(scripts): an injected tree hashes apart from an installed one, so a local Spec Main Shape Gate reproduction cannot leave verdicts a sibling worktree replays (objectui#12114) (… (objectui `a194b4e37`)
43+
44+
<!-- adr-0087: TODO — the pin bump cannot answer this; a human must (objectstack#6494) -->
45+
46+
objectui range: `20c6d351ad74...0df67f237c5a`

‎.objectui-sha‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20c6d351ad74d2b14a93becdc134d51b91b2d2e6
1+
0df67f237c5ab46cbc65252c5f6bd05f2be44c48

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,24 @@ 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` = `20c6d351a`, re-read there 2026-10-10:
64+
// (`.objectui-sha` = `0df67f237`, re-read there 2026-10-11:
65+
// in `packages/plugin-grid`, on the hop off `20c6d351a`, `ObjectGrid.tsx`
66+
// changed again (82 insertions, 32 deletions: objectui#12082's
67+
// affordance-to-grant map, objectui#12103's per-column write grant and
68+
// objectui#12105's promoted bulk-action params), none of it inside the
69+
// selection block, which only MOVED by +29: `ObjectGrid.tsx:4897-4924` here
70+
// (`4868-4895` at `20c6d351a`), still hashing to
71+
// `c88443302d40c2db739ddb235470bafa29056e2e` (hash-object of the block),
72+
// re-READ with the same reading below. Two hunks touch that reading and were
73+
// re-READ as well: the `delete` verdict the implicit bulk-delete is gated on
74+
// now comes from `resolveAffordance('rowDelete', …)` (`:1786`), which still
75+
// asks the managed-object policy and the object's effective API operations,
76+
// with the caller's delete grant beside them; and a promoted def's params
77+
// now resolve when its dialog opens (`:5097-5116`, called at `:5132`), its
78+
// rows still fanned out through `useBulkExecutor`. `hooks/useBulkExecutor.ts`
79+
// is byte-identical to `20c6d351a` and its `:298-303` still hashes to
80+
// `01083348330f10a201cdf1078b4c21c236402b6a`. At `20c6d351a`, re-read there
81+
// 2026-10-10:
6582
// every objectui file this record cites is byte-identical across the hop
6683
// from `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved:
6784
// `ObjectGrid.tsx:4868-4895` still hashes to

‎packages/spec/src/kernel/functional-completeness.ts‎

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,21 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
298298
* English sentence. So the loss is total rather than partial — every
299299
* record, on every object — and the author is told at render time as well
300300
* as here. Both reads hold at the pin this repo builds against
301-
* (`.objectui-sha` = `20c6d351a`, re-read there 2026-10-10:
301+
* (`.objectui-sha` = `0df67f237`, re-read there 2026-10-11:
302+
* on the hop off `20c6d351a` `ObjectCalendar.tsx` changed (+75/-19:
303+
* objectui#12081 item 2's windowed fetch and objectui#12082's write
304+
* affordances), no hunk inside a cited read, so `getCalendarConfig` moved
305+
* `:294` -> `:311` and the `if (!calendarConfig)` arm `:1296` -> `:1354` with
306+
* its `tt(…)` lines `:1303-1304` -> `:1361-1362`, each byte-identical;
307+
* `ListView.tsx` changed (+229/-57: objectui#12081 item 2, objectui#12086 and
308+
* objectui#12082), its `case 'calendar'` with it, moved `3665` -> `3813`:
309+
* objectui#12081 (objectui `16c8810ac`) added a comment and hands the calendar
310+
* an `onVisibleRangeChange` callback when the view windows its fetch, while
311+
* the `startDateField` / `endDateField` / `titleField` reads this row rests on
312+
* are byte-identical and still conditional, with no floor (the fetch window's
313+
* own copies at `:2495-2498` read the declared bindings only); and the `en` /
314+
* `zh` / `de` packs changed (three commits) but not their
315+
* `calendar.configRequired` strings. At `20c6d351a`, re-read there 2026-10-10:
302316
* on the hop off `47b1f0bb7` `ObjectCalendar.tsx` is byte-identical (`git diff
303317
* --quiet`), so `getCalendarConfig` `:294`, the `if (!calendarConfig)` arm
304318
* `:1296` and its `tt(…)` lines `:1303-1304` did not move; `ListView.tsx`
@@ -404,7 +418,12 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
404418
* This repo already records the same deletion one door over: the #13817
405419
* check in `../ui/view.zod.ts` names objectui#7029 as its runtime half.
406420
* - `gantt` → NO fallback, and no silence [#19630]. Measured at the pin
407-
* this repo builds against (`.objectui-sha` = `20c6d351a`, re-read there 2026-10-10:
421+
* this repo builds against (`.objectui-sha` = `0df67f237`, re-read there 2026-10-11:
422+
* on the hop off `20c6d351a` `ObjectGantt.tsx` is byte-identical (`git diff
423+
* --quiet`), so `getGanttConfig` `:610` and the `if (!ganttConfig)` arm `:2307`
424+
* did not move, and `ListView.tsx` changed (+229/-57, as above) with its
425+
* `case 'gantt'` byte-identical, moved `3804` -> `3959`. At `20c6d351a`,
426+
* re-read there 2026-10-10:
408427
* on the hop off `47b1f0bb7` `ObjectGantt.tsx` is byte-identical (`git diff
409428
* --quiet`), so `getGanttConfig` `:610` and the `if (!ganttConfig)` arm `:2307`
410429
* did not move, and `ListView.tsx` changed (+281/-235, as above), its
@@ -491,7 +510,15 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
491510
* requires. So the view does not draw a blank chart: it refuses, by name.
492511
* - `timeline` → date axis: NO fallback [#19630]; title: `titleField || 'name'`,
493512
* which still stands. Measured at the same pin (`.objectui-sha` =
494-
* `20c6d351a`, re-read there 2026-10-10:
513+
* `0df67f237`, re-read there 2026-10-11:
514+
* on the hop off `20c6d351a` `ObjectTimeline.tsx` changed (+42/-20,
515+
* objectui#12104, objectui `206505c34`: an explicit `groupByField` groups by
516+
* its display value), every hunk below `:730`, so its start-date chain
517+
* `:589-591` is byte-identical and unmoved and its `if (!hasAuthoredItems &&
518+
* !startDateField)` refusal arm is byte-identical, moved `:952` -> `:974`; and
519+
* `ListView.tsx` changed (+229/-57) with its `case 'timeline'` byte-identical,
520+
* moved `3747` -> `3902`, and `resolveTimelineDateBinding` byte-identical,
521+
* moved `686` -> `695`. At `20c6d351a`, re-read there 2026-10-10:
495522
* on the hop off `47b1f0bb7` `ObjectTimeline.tsx` changed (+15/-15,
496523
* objectui#6152 round 14, objectui `3fd862510`): its start-date chain
497524
* `:589-591` lost the nested `timeline.dateField` alias rung and still ends
@@ -576,7 +603,13 @@ export function checkFieldCompleteness(def: unknown): CompletenessFinding[] {
576603
* block does render; the warning still fires there, because the block the
577604
* view TYPE names is the one that is missing. Unchanged by this row.
578605
* - `map` → NO fallback, and no silence [#19630]. Measured at the same
579-
* pin (`.objectui-sha` = `20c6d351a`, re-read there 2026-10-10:
606+
* pin (`.objectui-sha` = `0df67f237`, re-read there 2026-10-11:
607+
* on the hop off `20c6d351a` `ObjectMap.tsx` is byte-identical (`git diff
608+
* --quiet`), so `getMapConfig` `:421`, `hasCoordinateBinding` `:527` and the
609+
* refusal arm `:1337` did not move; and `ListView.tsx` changed (+229/-57) with
610+
* its `case 'map'` byte-identical, moved `3924` -> `4079`, and
611+
* `resolveListMapConfig` byte-identical, moved `:200` -> `:209` under nine new
612+
* import lines. At `20c6d351a`, re-read there 2026-10-10:
580613
* on the hop off `47b1f0bb7` `ObjectMap.tsx` is byte-identical (`git diff
581614
* --quiet`), so `getMapConfig` `:421`, `hasCoordinateBinding` `:527` and the
582615
* refusal arm `:1337` did not move; and `ListView.tsx` changed (+281/-235)

‎packages/spec/src/migrations/entries/semantic/18.kernel-health-check-and-hot-reload-durations-unit-in-key.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ export const entry: SemanticMigration = {
5252
+ 'the audience that does not parse. Measured on 884e8347d: the only in-repo readers are '
5353
+ 'packages/core/src/health-monitor.ts and packages/core/src/hot-reload.ts, both moved in '
5454
+ 'this same change; and the pinned objectui checkout — the pin this repo builds '
55-
+ 'against, `.objectui-sha` = `20c6d351ad74d2b14a93becdc134d51b91b2d2e6` — names '
55+
+ 'against, `.objectui-sha` = `0df67f237c5ab46cbc65252c5f6bd05f2be44c48` — names '
5656
+ 'neither def and neither key: all thirteen exports of plugin-lifecycle-advanced.zod.ts and '
57-
+ 'the string debounceDelay each occur 0 times across its 8351 tracked files (0 across the 8281 at 47b1f0bb7, the 8234 at f0268ad78, the 7754 at a58626c88, the 7650 at 0abd4f9f8, the 7632 at 9dfaca654, the 7579 at 2e818d0b5, the 10267 at ab1879721, the 10071 at 89cad75d5, the 9912 at 31971ff1e, the 9800 at e420df310, the 9546 at db11afd49, the 9283 at dd3f7e1be, the '
57+
+ 'the string debounceDelay each occur 0 times across its 8424 tracked files (0 across the 8351 at 20c6d351a, the 8281 at 47b1f0bb7, the 8234 at f0268ad78, the 7754 at a58626c88, the 7650 at 0abd4f9f8, the 7632 at 9dfaca654, the 7579 at 2e818d0b5, the 10267 at ab1879721, the 10071 at 89cad75d5, the 9912 at 31971ff1e, the 9800 at e420df310, the 9546 at db11afd49, the 9283 at dd3f7e1be, the '
5858
+ '8512 at f8a9d0fb0 and the 8303 at 62597c588 too), against lit '
5959
+ 'controls objectstack 12966 and @objectstack/spec 4997 on the same corpus at 87af769e9, '
6060
+ 'which re-count to 13125 and 5043 respectively at 62597c588, to 13347 and 5123 at '
61-
+ 'f8a9d0fb0, to 13745 and 5466 at dd3f7e1be, to 14704 and 5545 at db11afd49, to 15352 and 6024 at e420df310, to 15691 and 6206 at 31971ff1e, to 16044 and 6461 at 89cad75d5, to 16377 and 6665 at ab1879721, to 17227 and 7134 at 2e818d0b5, to 17313 and 7186 at 9dfaca654, to 17390 and 7209 at 0abd4f9f8, to 17468 and 7246 at a58626c88, to 17956 and 7522 at f0268ad78, to 17980 and 7523 at 47b1f0bb7 and to 18047 and 7545 at this pin (git grep -o -F, the method that reproduces '
61+
+ 'f8a9d0fb0, to 13745 and 5466 at dd3f7e1be, to 14704 and 5545 at db11afd49, to 15352 and 6024 at e420df310, to 15691 and 6206 at 31971ff1e, to 16044 and 6461 at 89cad75d5, to 16377 and 6665 at ab1879721, to 17227 and 7134 at 2e818d0b5, to 17313 and 7186 at 9dfaca654, to 17390 and 7209 at 0abd4f9f8, to 17468 and 7246 at a58626c88, to 17956 and 7522 at f0268ad78, to 17980 and 7523 at 47b1f0bb7, to 18047 and 7545 at 20c6d351a and to 18248 and 7582 at this pin (git grep -o -F, the method that reproduces '
6262
+ 'every earlier count).',
6363
acceptanceCriteria:
6464
'Every producer and reader of a PluginHealthCheck spells intervalMs and timeoutMs, and every '

‎packages/spec/src/migrations/entries/semantic/18.kernel-runtime-config-timeout-unit-in-key.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ export const entry: SemanticMigration = {
4646
+ 'spells timeout 0 times; outside the zod file and its test the only live occurrences are the '
4747
+ 'generated rows in content/docs/references/kernel/plugin-security-advanced.mdx, which this '
4848
+ 'rename regenerates. The pinned objectui checkout — this is the pin we build against, '
49-
+ '`.objectui-sha` = `20c6d351ad74d2b14a93becdc134d51b91b2d2e6`, re-read from this tree — '
49+
+ '`.objectui-sha` = `0df67f237c5ab46cbc65252c5f6bd05f2be44c48`, re-read from this tree — '
5050
+ 'spells resourceLimits.timeout 0 times across '
51-
+ '8351 tracked files, against lit controls timeout 1694, RuntimeConfig 337 and resourceLimits '
52-
+ '2 on the same corpus (0 across 8281, and 1674 / 337 / 2, at 47b1f0bb7; 0 across 8234, and 1658 / 337 / 2, at f0268ad78; 0 across 7754, and 1431 / 299 / 2, at a58626c88; 0 across 7650, and 1360 / 293 / 2, at 0abd4f9f8; 0 across 7632, and 1360 / 293 / 2, at 9dfaca654; 0 across 7579, and 1351 / 276 / 2, at 2e818d0b5; 0 across 10267, and 1348 / 273 / 2, at ab1879721; 0 across 10071, and 1331 / 273 / 2, at 89cad75d5; 0 across 9912, and 1303 / 273 / 2, at 31971ff1e; 0 across 9800, and 1293 / 273 / 2, at e420df310; 0 across 9546, and 1197 / 273 / 2, at db11afd49; 0 across 9283, and 1172 / 263 / 2, at dd3f7e1be; 0 across 8512, and 1096 / 245 / 2, at f8a9d0fb0; 0 across 8303, and '
51+
+ '8424 tracked files, against lit controls timeout 1705, RuntimeConfig 347 and resourceLimits '
52+
+ '2 on the same corpus (0 across 8351, and 1694 / 337 / 2, at 20c6d351a; 0 across 8281, and 1674 / 337 / 2, at 47b1f0bb7; 0 across 8234, and 1658 / 337 / 2, at f0268ad78; 0 across 7754, and 1431 / 299 / 2, at a58626c88; 0 across 7650, and 1360 / 293 / 2, at 0abd4f9f8; 0 across 7632, and 1360 / 293 / 2, at 9dfaca654; 0 across 7579, and 1351 / 276 / 2, at 2e818d0b5; 0 across 10267, and 1348 / 273 / 2, at ab1879721; 0 across 10071, and 1331 / 273 / 2, at 89cad75d5; 0 across 9912, and 1303 / 273 / 2, at 31971ff1e; 0 across 9800, and 1293 / 273 / 2, at e420df310; 0 across 9546, and 1197 / 273 / 2, at db11afd49; 0 across 9283, and 1172 / 263 / 2, at dd3f7e1be; 0 across 8512, and 1096 / 245 / 2, at f8a9d0fb0; 0 across 8303, and '
5353
+ '1086 / 240 / 2, at 62597c588); both resourceLimits hits are prose in packages/app-shell recording '
5454
+ 'that objectui\'s own AppShellRuntimeConfig shares not one key with the spec\'s '
5555
+ 'RuntimeConfig, so nothing there authors this key and no pin bump is owed. ADR-0087.',

0 commit comments

Comments
 (0)