Skip to content

Commit 53e3638

Browse files
chore(objectui): move the console pin to 1f23d5b070fa, carrying objectstack-ai/objectui#12475 and objectstack-ai/objectui#12493 (#23709)
Fixes #23691 Clause-②: no This PR moves the console pin from `b9814b334d8a` to `1f23d5b070fa`, objectui `main` at `1f23d5b070fa4d0cee0274902944d247bc4588b7`. That commit carries both objectui changes the card owes: - `720f6d4` (objectstack-ai/objectui#12475, objectui PR objectstack-ai/objectui#12495): Setup's catalog item editors show History and Audit only to a caller the narrowed trail doors admit. This is ruling `6190477105` item 3, the maintainer's A1 on #23546. - `b512428` (objectstack-ai/objectui#12493, objectui PR objectstack-ai/objectui#12536): the AI build page no longer reads `?handoffPrompt=` from the URL, so a link can no longer send a message to the build agent on the signed-in user's behalf. The triage comment `6196301086` widened the card to carry it. It is one bump, through `scripts/bump-objectui.sh`, and not a rider on another PR. **Tier:** no governed surface. `node scripts/pm/check-governed-merges.mjs --branch claude/issue-23691-console-pin-hop` reads 0 of 5 paths on the register. Size: 5 files, +141 / −10 (151 changed lines, under the 3000 human-merge line). ## The hop: 83 objectui commits, 300 paths, all on objectui `main` - REST `compare` `b9814b334d8a...1f23d5b070fa`: `ahead_by` 83, `behind_by` 0, 300 files. - In the sibling checkout (deepened with `git fetch --unshallow` first), `git merge-base --is-ancestor` exits 0 for `720f6d4`, for `b512428` and for the old pin, each against `1f23d5b070fa`. It also exits 0 for `1f23d5b070fa` against objectui `origin/main`. `720f6d4` is 12 commits behind the new pin and `b512428` is 2 behind. Control: the objectui tip `b5416943ce45` against the old pin exits 1. - **Why `1f23d5b070fa` and not the tip.** When the work started, objectui `main` had moved two commits past the commit the dispatch read, to `b5416943ce45`, and that tip's push-run CI was still in progress. At `1f23d5b070fa` every check-run of objectui's required set (`Lint`, `Type Check`, `Test (shard N/16)`, `Build & E2E`, `Build Docs`, `Changeset Declaration`) reads `completed: success`, 41 of 41 across its merge-queue and push runs, re-read at 2026-10-15T17:43Z. At that reading the tip had one cancelled required run (`Lint`), and `main` had moved again, to `518a8e308466`. `1f23d5b070fa` is the newest `main` commit read fully green that carries both fixes. ## Acceptance readings, at the new pin ### (a) The built console's AI build page never sends `?handoffPrompt=` on load **Source, at objectui `1f23d5b070fa`.** `packages/app-shell/src/console/ai/AiChatPage.tsx` reads the Builder handoff only from navigation state: `readBuilderHandoffState(location.state)`. The prompt is seeded once per history entry, and the entry's state is replaced without `handoffPrompt`, so a reload does not send it again. `git grep` for a `searchParams` read of `handoffPrompt` (`get('handoffPrompt')`) finds nothing under `packages` or `apps` at the new pin. The same search at the old pin finds the read, at `AiChatPage.tsx:882`. **The pin test**, `packages/app-shell/src/console/ai/__tests__/AiChatPage.handoffNeverFromUrl-12493.test.tsx` (objectui PR objectstack-ai/objectui#12536), asserts four things: - a page loaded with `?handoffPrompt=` sends nothing (`sent` stays `[]`); - the in-app "Open in Builder" handoff lands its text once, by navigation state, and the URL never carries it; - a reload of the handoff history entry does not send it again; - control: a user-typed first message sends. **Built bundle.** `scripts/build-console.sh` built objectui at the pin into `.cache/objectui-1f23d5b070fa/`. The AI build page lands in `apps/console/dist/assets/ObjectView-CPn8lYVn.js` (198569 bytes), the only asset that names `handoffPrompt`. The minifier writes string literals as template literals, so the pattern accepts all three quote characters. The results: - a `.get(…handoffPrompt…)` call: 0 hits in that asset and 0 in all 3434 assets; - positive control, `.get(…package…)`: 1 hit in the same asset. It is the same component's `?package=` read, the line just before the old `handoffPrompt` read. Here it is followed by the navigation-state reader: `` h=d.get(`package`)?.trim()||void 0,g=o(),_=(0,$.useMemo)(()=>Uc(g.state),[g.state]) ``. The copy in `packages/console/dist/assets/` is byte-identical (`cmp` exit 0). On a smoke boot (below), the served `/_console/assets/ObjectView-CPn8lYVn.js` is byte-identical to it and gives the same 0 and 1. ### (b) History and Audit are hidden for a `setup.access`-only caller **Source, at objectui `1f23d5b070fa`.** - `packages/app-shell/src/hooks/useCanAuthorMetadata.ts` declares `AUTHORING_TRAIL_CAPABILITIES = ['studio.access', 'manage_metadata']`. `useCanReadAuthoringTrail()` answers whether the caller holds any of them, and fails open when no capability set was reported. - `ResourceEditPage.tsx` calls it once (`const canReadTrail = useCanReadAuthoringTrail()`, line 1210). It gates the History and Audit entries (`!createMode && canReadTrail`, lines 2322, 2334, 3251 and 3286), and a `?tab=history` / `?tab=audit` deep link (line 1228). - `PermissionMatrixEditor.tsx` calls it at line 476. It gates the History button and the embedded History sheet (lines 1560, 1624 and 1787). That editor offers no Audit entry. **The pin test**, `packages/app-shell/src/views/metadata-admin/trailDoorsGate-12475.test.tsx`, asserts: - a `setup.access`-only caller sees neither `history-button` nor `audit-button` on `ResourceEditPage`, and no History on `PermissionMatrixEditor`, routed or embedded; - a `studio.access` or a `manage_metadata` holder sees them; - an unreported capability set fails open; - control: create mode shows no trail entries at all. **Built bundle.** `useCanAuthorMetadata-B_1yXw8l.js` carries the gate: `` var r=[`studio.access`,t];function i(){let{hasCapabilities:t}=e();return r.some(e=>t([e]))} ``, exported as `n`. `metadata-admin-GnoOznL8.js` imports that `n` as `ht` and calls `Sn=ht()`. Both `` "data-testid":`audit-button` `` and `` "data-testid":`history-button` `` sit behind `!n&&Sn&&`. **No live browser run.** This is a source and bundle reading only. A `setup.access`-only organization admin is not a seeded identity, so a browser pass would first have to provision one. ## Artefacts that travel with the pin - **Console changeset** `.changeset/console-1f23d5b070fa.md`, from `scripts/bump-objectui.sh 1f23d5b070fa… --no-commit`. - `@objectstack/console` **major**, the level the script derived. It is objectui's own declared `major` (objectstack-ai/objectui#12334, the sync major that tracks `@objectstack/*` 18). - The range holds 76 releasing entries, 4 release-nothing changesets and 3 commits with no changeset, listed by subject. - The major is safe in this pre window. `.changeset/pre.json` is pre mode on `next`, and `check-changeset-no-major` stands aside there. The `18.0.0-next.1` cut (`0c52e4307`) also consumed two `major` changesets and still moved `18.0.0-next.0` → `18.0.0-next.1`. - The script's ADR-0087 placeholder is answered `not-required (no-migration-prescription)`. Each of the five declared-breaking entries is answered against this tree: objectstack-ai/objectui#12334, objectstack-ai/objectui#12464 (page kind `jsx`), objectstack-ai/objectui#12461 (`topbar.switchObject`), objectstack-ai/objectui#12055 (upload `scope`) and objectstack-ai/objectui#12325 (view `provider: 'api'`). `Clause-②: no` is in the changeset. - **SDUI manifest.** `node scripts/gen-sdui-manifest-node.mjs` over `.cache/objectui-1f23d5b070fa/apps/console` wrote 107 components (sha256 `370153544e9b…`) and re-recorded `scripts/sdui-manifest.record.json` at the pin. - No component was added or removed. - `record:related_list` gains the `parentDataSource` input (objectstack-ai/objectui#12294). - The `object-grid` and `object-map` `data` descriptions drop the retired `provider: 'api'` arm (objectstack-ai/objectui#12325). - **Lockstep record.** `pnpm gen:sdui-lockstep` re-records `packages/sdui-parser/objectui-lockstep.json` at `1f23d5b070fa`. It ran with `OBJECTUI_ROOT` set to the pin's build worktree, so the shared objectui checkout's HEAD was never moved. Across the hop, objectui's `packages/sdui-parser` changed only in `package.json`. The grammar blob `0131f27cf86d` and the predicate blob `76c18fb95d1f` are unchanged, and `check:sdui-lockstep` passes (214 grammar lines, 25 codes, the predicate). **No parser port is owed.** - **No pin-citation re-measure, and no pin-citation changeset.** `check:objectui-pin-citations` retired on `main` in `1418de4c7`, under ruling C on #23434: read points are dated ledger readings, and "a pin hop then moves nothing". So no `packages/spec/src/**` hunk is in this PR. ## Console Pin Gate steps, run locally (each exited 0) 1. Client closure: `turbo run build --filter=@objectstack/client --filter=@objectstack/sdui-parser` (34 tasks). 2. `scripts/build-console.sh` at the new pin. It reported: - bundle canary `import/jobs` present; - exactly one zod version literal (`{major:4,minor:6,patch:5}`); - "Console bundle carries THIS tree's @objectstack/spec, and only it"; - dist ready, 64460 KB, from objectui@1f23d5b070fa. That run came before the manifest regeneration, so its dist ships the previous tracked manifest. The dist is gitignored, and CI and the release build their own. 3. `pnpm check:console-sha` and `pnpm check:console-injection`: both exit 0, inside the gate run below. **Smoke boot.** `pnpm dev -- --fresh -p 43198` from this worktree: - `GET /api/v1/health` answered 200 (`status: ok`, version `18.0.0-next.1`). - `GET /_console/` answered 200 (18552 bytes), and its entry `assets/index-zcLuSSpu.js` answered 200. - The served `/_console/.objectui-sha` reads `1f23d5b070fa4d0cee0274902944d247bc4588b7`. I stopped the server by its listening PID and the recorded `pnpm` PID, and the port was free afterwards. ## Verification, at `7ab227d26` - **Tests that read the changed artefacts.** - `pnpm --filter @objectstack/sdui-parser exec vitest run`: 14 files, 225 passed. - `pnpm --filter @objectstack/lint exec vitest run src/validate-jsx-pages.production-witness.test.ts`: 5 passed. It feeds the real repo-root `sdui.manifest.json` to the validator. - The `packages/cli` tests that read a console dist manifest are left to CI. This diff changes no package source. - **Derived gates.** `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths, from the merge base) derived 69 commands. Each was run with its exit code recorded. `--ran` reports "69 derived, 69 run, 0 NOT-MEASURED, 0 UNRUN". - Two first exited 3 (prerequisite not met) and were re-run green at the same head. `check-plugin-teardown-shape --self-test` needed its fixture commit `621a48760788`, fetched at depth 1 (48 cases). `check:dual-build-cjs-loads` needed a full `turbo run build --filter=!@objectstack/docs` (75 tasks); it then read 110 entry points across 68 packages. - Named here: `check-sdui-manifest` (sha256 `370153544e9b…`, 107 components, recorded at the live pin), its self-test (13 cases), `check:sdui-lockstep`, `check:objectui-changeset`, `check-adr-0087-registration --base origin/main`, `check-changeset-no-major --base origin/main` (pre mode) and `check-empty-changeset --base origin/main`. - **NOT MEASURED: repo-wide `pnpm lint` and the `Type Check` lanes.** Reason: both are CI-owned runs, and this diff adds no TypeScript. ## Acceptance notes - **Liveness verdicts this hop makes stale. They are not changed here, and the next spec PR owes them.** At `1f23d5b070fa` the shipped console reads three things the spec and its ledger still call unread: - **`page.print`.** `packages/spec/liveness/page.json` carries `print` and its 12 children as `planned`, and `print` has `authorWarn` with an `authorHint`. `PagePrintSchema`'s docblock and eight describes say "until it ships, nothing applies it". objectui `packages/components/src/renderers/layout/page-print.ts#buildPagePrintStylesheet` now applies all eight keys (objectstack-ai/objectui#11958). - Measured on this branch: `lintLivenessProperties` from `@objectstack/lint`, on a page declaring `print`, emits `liveness-planned-property` with the hint "…no renderer applies the paper, margins, running header and footer or page numbers yet — printing the page today prints the screen layout". - `packages/lint/src/lint-liveness-properties.test.ts` uses `page.print` as its planned-with-`authorWarn` control, so that control has to move with the flip. - **`record:related_list.parentDataSource`.** Its describe opens with `[PLANNED — not yet rendered]`, and its docblock says the marker leaves "when that leg lands". `liveness/page.json`'s `_note` carries the same reading, and case E of `component-record-related-list-parent-23134.test.ts` pins the marker. objectui `packages/plugin-detail/src/renderers/record-related-list.tsx` now reads the key (objectstack-ai/objectui#12294), and the regenerated manifest lists it as a renderer input. - **`translation.json` `flows.successMessage` and `flows.errorMessage`** are `planned`. objectui `packages/app-shell/src/utils/flowResponse.ts` now reads both through the spec's `translateFlow` (objectstack-ai/objectui#12075). - Flipping them edits `packages/spec/src/**`, the ledger and a lint test, and needs a contract review. The dispatch scoped this hop to the pin artefacts, and the work is reported to the seat for one follow-up card. - objectstack-ai/objectui#12493 is not a card in this repository. This PR carries its objectui change into the shipped console and closes nothing there. --- _Generated by [Claude Code](https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent cd86e41 commit 53e3638

5 files changed

Lines changed: 141 additions & 10 deletions

File tree

‎.changeset/console-1f23d5b070fa.md‎

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
---
2+
"@objectstack/console": major
3+
---
4+
5+
Console (objectui) refreshed to `1f23d5b070fa`. Frontend changes in this range:
6+
7+
Derived from the changesets objectui declared over the range — 76 releasing of 80 changesets added across 83 non-merge commits; omitted: 4 release-nothing changesets, 3 commits carrying no changeset (they ship no package code).
8+
9+
- **major** — **BREAKING** — objectui moves to major 18, following `@objectstack/*` from 17 to 18 (objectui#12334). objectui's major is not a count of its own breaking changes: it tracks the major of the `@ob… (objectui `6f3299fe7`)
10+
- **minor** — The bell's Activity tab and the console home's activity card now read business activity only: the shared activity feed filters `sys_activity` by `object_name` to the objects the u… (objectui `1f23d5b07`)
11+
- **minor** — The approval decision panel (`record:approval_decision`) shows what was submitted (objectui#12483): the request's declared amount and a summary of its record snapshot. The amount… (objectui `521817ce9`)
12+
- **minor** — Studio's Access pillar shows an open permission set as an item header and five tabs (objectui#12456, epic objectui#12446 decision C). (objectui `78e9fb2e9`)
13+
- **minor** — Console top bar inside an app: from the `lg` breakpoint up, the search trigger is the bar's middle zone, centered between the left group and the utility cluster (objectui#12472). (objectui `1c3b0699a`)
14+
- **minor** — The approval decision panel (`record:approval_decision`) names who a pending request waits on (objectui#12482, folding objectui#12077). Each pending approver is one chip under "Wa… (objectui `bcf4df0ff`)
15+
- **minor** — The Studio's Automations pillar takes the redesign's layout (objectui#12454, epic objectui#12446). (objectui `8146afe88`)
16+
- **minor** — The console list page's header no longer draws a copy of an action that the selection bar already carries (objectui#12462). (objectui `d35cfbf3b`)
17+
- **minor** — The console list page draws its saved-view tabs and the list's Filter, Sort, Display and Search controls on one row (objectui#12440). (objectui `d4bc81eab`)
18+
- **minor** — **BREAKING** — The page kind `jsx` is retired from the page node, following `@objectstack/spec` 18 (objectstack-ai/objectstack#23638), which refuses it at parse and names `html` as its replaceme… (objectui `21f957744`)
19+
- **minor** — Studio Data pillar layout (objectui#12450, epic objectui#12446). (objectui `7a5f4c19a`)
20+
- **minor** — Console list page: the table scrolls inside the page on desktop, and a right-edge shadow says more columns follow (objectui#12463). (objectui `c950345ab`)
21+
- **minor** — A list's sort, column layout, Filter panel and tab order are now each user's own, and follow them to another browser (objectui#12418). (objectui `caac3b24e`)
22+
- **minor** — **BREAKING** — Console top bar inside an app: the app pill and its PREVIEW chip are the left group, an object route draws no breadcrumb, and 「Edit app」 is an icon button at every width (objectui… (objectui `d9d9d9868`)
23+
- **minor** — Studio design surface: Access is the fourth segment of the pillar nav, which now reads Data · Automations · Interfaces · Access (objectui#12452, epic objectui#12446 decision A). T… (objectui `d25585cff`)
24+
- **minor** — The record header's favorite star draws only where the host wires a toggle, and the console record page no longer draws one (objectui#12427). (objectui `5c4deb56a`)
25+
- **minor** — The console shell's sidebar trigger now lives in the app bar's left slot at every width (objectui#12429). Inside an app it is the bar's leftmost control: on a phone it opens the n… (objectui `e869e4127`)
26+
- **minor** — Studio design surface: one layout skeleton for the four pillars (objectui#12459, epic objectui#12446). The shell header is a 48px three-column grid — the package drawn as an app c… (objectui `cf430cd10`)
27+
- **minor** — Console sidebar: one Favorites section at the top, and one ⋯ menu on every entry (objectui#12427). (objectui `a8e5b7364`)
28+
- **minor** — The console list page spends less of the screen on chrome (objectui#12423). (objectui `a2225f913`)
29+
- **minor** — `MetadataDraftHeader`, the row type `MetadataClient.listDrafts()` declares, now declares `member` (objectui#12413). (objectui `431cece41`)
30+
- **minor** — **BREAKING** — `createObjectStackUploadAdapter`'s `scope` option is typed from the spec's upload-scope vocabulary (objectui#12055). (objectui `24804dcc6`)
31+
- **minor** — "Publish all" publishes each language of a package-less email template by its own bundle member (objectui#12402, the publish half of objectui#12271). (objectui `919d5cd3a`)
32+
- **minor** — `record:related_list` reads its parent record from `parentDataSource` (objectui#12294, ruling B on objectui#12296). The key is a member of the spec's `record:related_list` row and… (objectui `d81e46043`)
33+
- **minor** — Studio's Automations rail and the open flow's Status pill read the automation engine's registration verdict, which the flow list now serves beside its items (`registrations`, `Flo… (objectui `dbc8c1169`)
34+
- **minor** — Studio's flow designer and Debug run stop offering and emulating the single-brace `{var}` dialect, which `@objectstack/spec` 18 deletes (objectui#12329, ADR-0032 Decision 3). (objectui `52a5d81f8`)
35+
- **minor** — **Clause-②: yes (an export widens, and an accept set narrows)** (objectui `96fcf305a`)
36+
- **minor** — `RecordDetailsComponentProps.sections[]` declares `hideEmpty` (objectui#12348). (objectui `1c72d7768`)
37+
- **minor** — Depend on `@objectstack/*` `18.0.0-next.1` (objectui#12370). (objectui `ff9df8840`)
38+
- **minor** — `objectui validate` accepts `record:approvals` and `record:attachments` (objectui#12363). `@objectstack/spec` 18 declares both page blocks, `@object-ui/app-shell` renders both, an… (objectui `2b4d3f133`)
39+
- **minor** — Studio stops inserting or prescribing the single-brace `{var}` token in the rest of the flow value slots `@objectstack/spec` 18 refuses it in (objectui#12372, ADR-0032 Decisions 2… (objectui `d78e70b87`)
40+
- **minor** — The screen-flow runner reads the three `flows` translation keys `@objectstack/spec` added for a flow's option labels and its own toasts (objectui#12075, the console half of object… (objectui `42d8e8db6`)
41+
- **minor** — Studio stops writing the single-brace `{var}` token in the flow fields `@objectstack/spec` 18 refuses it in (objectui#12101, ADR-0032 Decisions 2 and 3). (objectui `0a19a683f`)
42+
- **minor** — **Studio no longer offers `externalSharingModel`** (objectui#12353). `@objectstack/spec` retires the key on the v18 line (objectstack#23268, ruling A): it has no runtime reader, a… (objectui `2d8450e46`)
43+
- **minor** — The page block `record:approval_decision` renders (objectui#12342). `@objectstack/spec` 18 declares it, and until now a page naming it passed the spec and drew nothing, because no… (objectui `52d61943c`)
44+
- **minor** — A user whose administrator forced a password change gets the change-password overlay instead of raw `403` responses (objectui#12365). (objectui `37db09f13`)
45+
- **minor** — `element:repeater` reads its query from the node-level `dataSource` binding alone (objectui#12345). `@objectstack/spec` 18 retired the row's flat `object`, `filter`, `sort` and `l… (objectui `23bf8596e`)
46+
- **minor** — **BREAKING** — The view-level `provider: 'api'` data source is no longer read anywhere in objectui (objectui#12325). `@objectstack/spec` retires it (objectstack#23082, ADR-0049): a view binds it… (objectui `524136ea7`)
47+
- **minor** — `NamedListView` declares `requiredPermissions`, the list view's audience key from `@objectstack/spec` 18 (objectui#12341, the objectui half of objectstack#22611 ruling A). (objectui `f2b17c640`)
48+
- **minor** — A page that declares `print` now prints as a document, and a record page bound to such a page offers a Print action (objectui#11958, the objectui half of the print-page ruling on… (objectui `2312bd9a6`)
49+
- **minor** — A file the reader may not open now renders a restricted state instead of a generic file chip (objectui#12339). (objectui `065a1cfbf`)
50+
- **minor** — Studio writes the flow spellings `@objectstack/spec` 18 accepts (objectui#11824, ADR-0032 §3). (objectui `cfb294739`)
51+
- **patch** — A `?tab=` deep link on a metadata item page now opens the sheet it names, and the URL keeps `tab` afterwards (objectui#12496). (objectui `9c2785b6a`)
52+
- **patch** — The AI build page no longer reads `?handoffPrompt=` from the URL, so a link can no longer send a message to the build agent on the signed-in user's behalf; the in-app "Open in Bui… (objectui `b51242899`)
53+
- **patch** — Studio flow checker: in a CEL slot (an edge or node `condition`, a decision branch `expression`, a CEL value) the roots the flow engine binds on every run, `previous`, `vars` and… (objectui `2bacbf08b`)
54+
- **patch** — A list's density and hidden fields are now each user's own, like its sort and column layout, and follow them to another browser (objectui#12474). (objectui `0656b0e3c`)
55+
- **patch** — A `markdown`, `html` or `richtext` cell keeps the grid's one-line row (objectui#12480). The grid's one-line clamp bounded inline content only, so a long rich-content value (a mult… (objectui `c3de0bc73`)
56+
- **patch** — Studio Data pillar, Form tab: one compact toolbar row and card-style sections and fields (objectui#12451). (objectui `68c9b4008`)
57+
- **patch** — Setup catalog editors show History and Audit only to a caller the authoring-trail doors admit (objectui#12475). objectstack#23546 narrows `GET /meta/:type/:name/history`, `/audit`… (objectui `720f6d475`)
58+
- **patch** — Studio's page-create seed and slotted page preview now build an object's default record page with the same detail sections the running app uses. On an object that declares no `fie… (objectui `3e2394d76`)
59+
- **patch** — A browser tab left hidden for 10 minutes stops polling the console's shared feeds, so a forgotten tab no longer keeps a scale-to-zero backend awake (objectui#12439). (objectui `27411ead4`)
60+
- **patch** — A `record:details` node with neither `sections` nor `fields` now draws the object's `highlightFields` (objectui#12433). (objectui `9782cb226`)
61+
- **patch** — An app opens on the first navigation entry the member is shown, not the first entry the server serves (objectui#12426). (objectui `6fcb2ced5`)
62+
- **patch** — An approval request reads the same way on every console surface that opens it, and the Timeline tab of its served page shows its count (objectui#12045, the page-mount step of B1 i… (objectui `bedf41c1c`)
63+
- **patch** — `usePageAssignment` opens an object's default record page: among the record pages served for the object, the one declared `isDefault: true` is returned, and declaration order deci… (objectui `92f979deb`)
64+
- **patch** — A refused "Rename view" now says why (objectui#12417). The object page's view tabs showed only the translated "Rename failed" title for any refusal, and the server's reason reache… (objectui `63079f4a0`)
65+
- **patch** — `deleteView` now shows the server's reason when the published half of a view delete is refused (objectui#12416). (objectui `cfbca7f5b`)
66+
- **patch** — Studio names a draft-only item by its label, with the machine name as secondary text (objectui#11862, the remainder after objectui#11906). (objectui `7c13d3052`)
67+
- **patch** — A refused "Delete view" now says why (objectui#12398). The object page's view tabs showed only the translated "Delete failed" title for any refusal, and the server's reason reache… (objectui `4b0a087a6`)
68+
- **patch** — Setup › Apps: deleting an app names the package whose row it removes (objectui#12397, the consumer half of objectstack#23293). (objectui `5c94723b6`)
69+
- **patch** — The developer Public Forms page lists a form as published exactly when the server's anonymous form routes serve it (objectui#11545). (objectui `6a09fdd0a`)
70+
- **patch** — A grid that fetches its own rows and is tinted by a field that is not one of its columns now colours its rows (objectui#12393). (objectui `2fc31ea94`)
71+
- **patch** — Flow designer: the analysis passes stop modelling the retired single-brace dialect (objectui#12390). A node rename now rewrites only CEL and `{{ }}` holes, so a literal `{x.y}` in… (objectui `4b496cddc`)
72+
- **patch** — Studio stops conflating two members of one bundle. The pending-changes sheet reads each draft's `member` off `GET /meta/_drafts` (objectstack#23073) and lists two languages of one… (objectui `0ddc78888`)
73+
- **patch** — A console reset, delete or draft discard names the package whose row it removes (objectui#12335, the consumer half of objectstack#23165). (objectui `d12bc5fe9`)
74+
- **patch** — **Import Wizard preview: with *Keep unknown option values* ticked, an unknown option value on a writable field is no longer marked** (objectui#11970). The server now keeps such a… (objectui `3f20d5aa2`)
75+
- **patch** — A grid row coloured by `rowColor` now reads in the dark theme, and its colour covers the whole row (objectui#12375). (objectui `70e843fa4`)
76+
- **patch** — Studio keeps a `controlled_by_parent` object savable on `@objectstack/spec` 18 (objectui#12326, the objectui half of objectstack#23100). (objectui `28fb2a001`)
77+
- **patch** — A list view tinted by a field that is not one of its columns now colours its rows (objectui#12376). (objectui `a311b6a9e`)
78+
- **patch** — A comment edit on the record feed sends only the new text and its mentions (objectui#12314, the objectui half of ruling A on objectstack-ai/objectstack#23124). The console used to… (objectui `aafaf9c10`)
79+
- **patch** — Published text no longer teaches the retired view-level `provider: 'api'` data source (objectui#12364). A view binds `provider: 'object'` or `provider: 'value'`; a metadata-declar… (objectui `d75f21285`)
80+
- **patch** — fix(fields): a text-valued formula is drawn as text, not in a monospace code font (objectui#12357) (objectui `789cb166c`)
81+
- **patch** — A New form now saves the owner the user picks (objectui#12359). When the form's layout shows Owner, the user could pick a user and see that user's chip. The create request still c… (objectui `fc211e817`)
82+
- **patch** — fix(plugin-grid): a list column's inline locale-map `label` now heads the column (objectui#12358) (objectui `1040a0a13`)
83+
- **patch** — A bulk action's confirm step now lists the affected records by their display title (the object's `nameField`, through the shared ADR-0079 resolver) instead of raw ids, for objects… (objectui `df05784ae`)
84+
- **patch** — Studio holds a Notify step whose Title is blank, the way it already holds a missing one (objectui#12343, the objectui half of `@objectstack/spec` 18 refusing a blank Notify title). (objectui `ccd7e94a8`)
85+
86+
⚠️ 5 of these carry a breaking change: 1 by a declared `major` level, 4 by the author's own breaking annotation in the changeset body. Each is marked **BREAKING** in the list above — read them before compiling the release record.
87+
88+
**In this console build, declared nowhere** — objectui merged 3 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.
89+
90+
- _(no changeset)_ docs(design): Studio design-surface reference artboards for the layout redesign (epic #12446) (#12458) (objectui `cfafe052b`)
91+
- _(no changeset)_ ci(release): correct the clear step's pre-mode comment for Changesets 3 (#12434) (objectui `6843f7599`)
92+
- _(no changeset)_ ci(test): widen the test matrix from 12 to 16 legs, and move every pin of the width (objectui#12384) (#12399) (objectui `140916c5c`)
93+
94+
Clause-②: no
95+
96+
<!-- adr-0087: not-required (no-migration-prescription)
97+
This diff moves `.objectui-sha` and the artefacts that travel with it: this console
98+
changeset, the re-recorded `scripts/sdui-manifest.record.json` and the regenerated
99+
`sdui.manifest.json`, and the re-recorded `packages/sdui-parser/objectui-lockstep.json`.
100+
It adds, removes or renames no ObjectStack-authorable key: no Zod shape, no spec
101+
declaration and no stored `sys_metadata` shape moves in it, so `objectstack migrate meta`
102+
has nothing here to rewrite, and this body carries no FROM/TO prescription of its own.
103+
The range carries five declared-breaking objectui changes, one by a declared `major`
104+
and four by their authors' breaking annotation, and the digest marked all five.
105+
Each is answered against this tree:
106+
(1) objectui#12334 (`6f3299fe7`), the declared `major`: every `@object-ui/*` package
107+
moves to major 18 to track the `@objectstack/*` 18 line. This tree is that line, in
108+
Changesets pre mode on `next` (`.changeset/pre.json`), and `@objectstack/console` is
109+
`18.0.0-next.1`; no package or example here depends on any `@object-ui/*` package.
110+
(2) objectui#12464 (`21f957744`), `@object-ui/types`: `PageNodeSchema.kind` drops `jsx`.
111+
`@objectstack/spec` here already refuses page `kind: 'jsx'` at parse
112+
(`packages/spec/src/ui/page.zod.ts`), and no example authors it.
113+
(3) objectui#12461 (`d9d9d9868`), `@object-ui/i18n`: the pack key `topbar.switchObject`
114+
is removed. Nothing in this tree reads it.
115+
(4) objectui#12055 (`24804dcc6`), `@object-ui/providers`: the upload adapter's `scope`
116+
option narrows to the spec's upload-scope vocabulary, TypeScript only. No package or
117+
example here depends on `@object-ui/providers`.
118+
(5) objectui#12325 (`524136ea7`), `@object-ui/core` and siblings: the view-level
119+
`provider: 'api'` readers are retired. `@objectstack/spec` here already refuses
120+
`view.data.provider: 'api'` (`packages/spec/src/ui/view.zod.ts`), and no example
121+
authors it.
122+
Scope of the claim, stated rather than implied: it is a claim about THIS diff, not a
123+
per-entry re-measurement of the upstream declared-breaking entries.
124+
-->
125+
126+
objectui range: `b9814b334d8a...1f23d5b070fa`

‎.objectui-sha‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
b9814b334d8aebac43dd2b04a2003963aec3cc6e
1+
1f23d5b070fa4d0cee0274902944d247bc4588b7

‎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": "b9814b334d8aebac43dd2b04a2003963aec3cc6e",
10-
"revDate": "2026-10-14T05:07:26+00:00",
9+
"rev": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
10+
"revDate": "2026-10-15T16:34:41+00:00",
1111
"source": "packages/sdui-parser/src",
1212
"files": [
1313
"packages/sdui-parser/src/body-dialect.ts",
@@ -21,7 +21,7 @@
2121
"packages/sdui-parser/src/validate.ts"
2222
]
2323
},
24-
"recordedAgainstPin": "b9814b334d8aebac43dd2b04a2003963aec3cc6e",
24+
"recordedAgainstPin": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
2525
"grammarRegion": {
2626
"file": "packages/sdui-parser/src/parse.ts",
2727
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",

‎scripts/sdui-manifest.record.json‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
"a pin bump without regeneration goes RED there — that is the anti-rot half of the freshness gate.",
1212
"Regenerate + re-record: pnpm objectui:build && node scripts/gen-sdui-manifest-node.mjs"
1313
],
14-
"objectuiSha": "b9814b334d8aebac43dd2b04a2003963aec3cc6e",
14+
"objectuiSha": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
1515
"source": "built-tree",
16-
"modulesRoot": ".cache/objectui-b9814b334d8a/apps/console",
16+
"modulesRoot": ".cache/objectui-1f23d5b070fa/apps/console",
1717
"objectuiWorkspaceVersion": "17.7.0",
1818
"generator": "scripts/gen-sdui-manifest-node.mjs",
19-
"generatedAt": "2026-10-14",
20-
"sha256": "7911e7559d96dbd3f5e76101710d89bc1c84d884369a6b905c8492172190f589",
19+
"generatedAt": "2026-10-15",
20+
"sha256": "370153544e9b8013beb95fd5e8af3eec91f911c2813ba82b216684d71c4a3f17",
2121
"components": 107
2222
}

0 commit comments

Comments
 (0)