Skip to content

Commit 140238a

Browse files
chore(objectui): move the console pin to f96f771, carrying objectstack-ai/objectui#12453 and objectstack-ai/objectui#12519 (#23738)
Fixes #23720 Clause-②: no This PR moves the console pin from `1f23d5b070fa` to `f96f771140f1`, objectui `main` at `f96f771140f1ba488245e0d0d3e7420d720bff9a`. That commit carries `2a69285` (objectstack-ai/objectui#12453, the Studio read-only posture, the epic's last design child) and `73a3eb2` (objectstack-ai/objectui#12519, navigation edit mode keeps the 240 px rail), and every other commit the card lists as not in the old pin. 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-23720-console-pin-hop` reads 0 of 4 paths on the register (exit 0). Size: 4 files, +47 / −6 (53 changed lines, under the 3000 human-merge line). ## The hop: 31 objectui commits, 267 paths, all on objectui `main` - REST `compare` `1f23d5b070fa...f96f771`: `ahead_by` 31, `behind_by` 0, `total_commits` 31, 267 files. - In the sibling checkout (not shallow: `git rev-parse --is-shallow-repository` answers `false`), `git merge-base --is-ancestor X f96f771` exits 0 for `2a69285` and for `73a3eb2`. It also exits 0 for each of the other seven commits the card lists as missing (`a27c1cf`, `b541694`, `a3d14e7`, `5249c24`, `eea0993`, `baab2d6`, `d17952c`), for the old pin, and for `f96f771140f1` against objectui `origin/main`. `2a69285` is 13 commits behind the new pin and `73a3eb2` is 14 behind. - The negative leg: each of those nine commits against the OLD pin exits 1. Control leg on the same checkout: `1f23d5b070fa~50` against `1f23d5b070fa` exits 0. ### Why `f96f771140f1` - When the work started (2026-10-15T22:30Z), `f96f771140f1` was objectui `main`'s tip, the commit the dispatch read. - At that reading every check-run of objectui's required set read `completed: success`, 41 of 41 across its merge-queue and push runs: `Lint` 2, `Type Check` 2, `Test (shard N/16)` 32, `Build & E2E` 2, `Build Docs` 2, `Changeset Declaration` 1. objectui's `main` ruleset (`GET /repos/objectstack-ai/objectui/rules/branches/main`) also requires `Test` and `Governed Surface Queue Guard`, and both read success. The only run still going was `Test (coverage shard 2/8)`, which is not in the required set. - Re-read at 23:05Z, before opening this PR: objectui `main` had moved 4 commits, to `3e09c1e8d`, whose required set was still running (32 success, 11 in progress). The 4 are `7066dae53` (a docs move), `830eb1f2d` (objectstack-ai/objectui#12522), `f23eb01cb` (objectstack-ai/objectui#12514) and `3e09c1e8d` (objectstack-ai/objectui#12510). The card's "Not this card's" section names those cards as riding a later hop and says this one does not wait for them, so this PR keeps the pin read at dispatch time and does not chase the tip. ## Acceptance readings, at the new pin ### (a) The built console bundle carries the read-only link, and not the retired key **Source, at objectui `f96f771140f1`.** `packages/app-shell/src/views/metadata-admin/i18n.ts` declares `'engine.studio.pkg.readonlyLink': 'Read-only · Customize with an overlay'` (line 3034, and the zh-CN entry at line 6318). `StudioDesignSurface.tsx:526` renders it. `git grep engine.studio.designer.hintReadOnly` finds nothing under `packages` or `apps` at the new pin. At the old pin it finds 5 hits: the two i18n entries, the `ObjectFormDesigner.tsx:806` call site and two test lines. **Built bundle.** `scripts/build-console.sh` built objectui at the pin into `.cache/objectui-f96f771140f1/`, and its dist was copied to `packages/console/dist/` (3449 files, 3434 under `assets/`). A literal-string grep (`grep -rlF`) over every file: - `engine.studio.pkg.readonlyLink`: 2 assets. In `assets/studioBuilder-BUpNsRQw.js` it is the link's call site, `` Z(`engine.studio.pkg.readonlyLink`,n) ``, right after its `Layers` icon. In `assets/i18n-Ba_I5RJO.js` it is the table entry, 2 occurrences (en and zh-CN). - `Read-only · Customize with an overlay`: 1 asset, `assets/i18n-Ba_I5RJO.js`. - **The control.** The retired key `engine.studio.designer.hintReadOnly` appears in 0 of the 3449 files. - **Positive control for that zero.** `engine.studio.designer.toolbarHint` is the sibling key the retired one was rendered beside (`ObjectFormDesigner.tsx`, same i18n table). It appears in the same two assets, `studioBuilder-BUpNsRQw.js` and `i18n-Ba_I5RJO.js`, so the grep can see that table and that component. On the smoke boot below, the served `/_console/assets/i18n-Ba_I5RJO.js` and `/_console/assets/studioBuilder-BUpNsRQw.js` are byte-identical to the dist copies (`cmp` exit 0 each). They give the same readings: 1 English string, 1 key at the call site, 0 retired keys. ### (b) A smoke boot serves `/_console/.objectui-sha` at the new pin `pnpm dev -- --fresh -p 47321` from this worktree, with the `pnpm` PID recorded: - `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-CYwFWDSL.js` answered 200 (283056 bytes). - The served `/_console/.objectui-sha` reads `f96f771140f1ba488245e0d0d3e7420d720bff9a` (200). I stopped the server by its listening PID (3900) and the recorded `pnpm` PID (3798). Every PID in its process tree was gone afterwards, and `lsof -ti tcp:47321` found nothing. **No live browser run.** (a) is a source and bundle reading. A browser pass on a read-only package was not part of the card's acceptance and was not done. ## Artefacts that travel with the pin - **Console changeset** `.changeset/console-f96f771140f1.md`, from `scripts/bump-objectui.sh --no-commit f96f771…`. - `@objectstack/console` **minor**, the level the script derived: the highest level objectui declared over the range. - The digest walked the range completely: 31 releasing changesets across 31 non-merge commits, 0 breaking (0 declared `major`, 0 annotated), 0 release-nothing, 0 commits without a changeset. - **No ADR-0087 marker.** The range declares nothing breaking, so the changeset is not breaking and owes no disposition. `check-adr-0087-registration --base origin/main` reads "this PR adds no declared-breaking changeset (1 non-breaking changeset(s) seen)". This differs from the previous hop, whose range carried five declared-breaking entries. - **SDUI manifest.** `node scripts/gen-sdui-manifest-node.mjs` over `.cache/objectui-f96f771140f1/apps/console` wrote 107 components. `sdui.manifest.json` is **byte-identical** (sha256 `370153544e9b…`, unchanged), so no component, input or accept set moved. Only its provenance record `scripts/sdui-manifest.record.json` moves (`objectuiSha` and `modulesRoot`). The unchanged manifest is also why `Clause-②: no` holds on the one shipped file this repository adds to the console dist. - **Lockstep record.** `pnpm gen:sdui-lockstep` re-records `packages/sdui-parser/objectui-lockstep.json` at `f96f771140f1`. 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` did not change at all (`git diff --stat` is empty). 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.** ## Console Pin Gate steps, run locally The `Console Pin Gate` is a `main` full-battery job that is skipped on PRs. This is its local equivalent: 1. Client closure: `turbo run build --concurrency=2 --filter=@objectstack/client --filter=@objectstack/sdui-parser --filter=@objectstack/spec` (34 tasks, 34 successful). 2. `scripts/build-console.sh` at the new pin, under the verify lock. It reported: - bundle canary `import/jobs` present; - exactly one zod version literal (`{major:4,minor:6,patch:5}`, 2252 `assets/*.js` read); - "Console bundle carries THIS tree's @objectstack/spec, and only it"; - dist ready, 64496 KB, from objectui@f96f771140f1. That run came before the manifest regeneration, but the regenerated manifest is byte-identical, so the dist ships the same bytes either way. 3. `pnpm check:console-sha` ("Console dist matches the objectui pin (objectui@f96f771140f1)") and `pnpm check:console-injection` (self-test 67 assertions, then the injected-spec reading): both exit 0, inside the gate run below. ## Verification, at `b1a8a6bcf` - **Derived gates.** `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths, from merge base `9bb93706f`) derived 69 commands. Each was run with its exit code recorded before any pipe. `--ran` reports "69 derived, 69 run, 0 NOT-MEASURED, 0 UNRUN". - One first exited 3 (prerequisite not met) and was re-run green at the same head: `check:dual-build-cjs-loads` needed a full `turbo run build --concurrency=2 --filter=!@objectstack/docs` (75 tasks, 75 successful). It then read 110 entry points across 68 packages. - Named here: `check-sdui-manifest` (sha256 `370153544e9b…`, 107 components, recorded at the live pin) and 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` ("This diff introduces no `major` bump"), `check-empty-changeset --base origin/main`, `check:console-sha` and `check:console-injection`. - **The package this diff touches.** `pnpm --filter @objectstack/sdui-parser exec vitest run --maxWorkers=2`: 14 files, 225 passed. `pnpm --filter @objectstack/sdui-parser typecheck` (`tsc --noEmit`): exit 0. The lockstep record is not in that package's `files[]` and no test of it reads the file. These ran as a regression check, not as owed coverage. - **Not merged with `main` before opening.** `main` moved 4 commits (`9bb93706f` to `d0c09e47c`) while this ran. None of them touches any of this PR's 4 paths. 29 of the 45 paths they touch are under `packages/spec/src`, so a merge would make the locally built console dist's spec-injection reading stale and would need a second console build to re-read it. CI reads this PR at its merge ref, and the queue rebuilds it onto `main`. - **NOT MEASURED: repo-wide `pnpm lint`, the `Type Check` lanes and the full test farm.** Reason: they are CI-owned runs, and this diff adds no TypeScript. ## Acceptance notes - **Liveness: no verdict this hop makes stale was found.** The method: the leaf key of each of the 139 non-`live` rows in `packages/spec/liveness/*.json`, grepped as a word over the range's 3610 added lines of non-test objectui source under `packages` and `apps`. The only hits were `pageName`, a local route variable, and `bordered`, in a comment. Neither reads the ledger's `view.list` keys. - The rows the previous hop made stale (`page.print`, `translation.flows.successMessage` and `errorMessage`) are still `planned`, and the open family card #23710 carries them. This PR does not change them. - PR #23708 (`domain:spec` seat 2), which plans a later pin move, touches none of `.objectui-sha`, the manifest pair, the lockstep record or a console changeset: 29 files read at 23:05Z. - objectstack-ai/objectui#12453 and objectstack-ai/objectui#12519 are not cards in this repository. This PR carries their objectui changes into the shipped console and leaves the objectui cards as they are. --- _Generated by [Claude Code](https://claude.ai/code/session_016PVjjuVPte5XEJvaQx1E4t)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 2906cd8 commit 140238a

4 files changed

Lines changed: 47 additions & 6 deletions

File tree

‎.changeset/console-f96f771140f1.md‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
"@objectstack/console": minor
3+
---
4+
5+
Console (objectui) refreshed to `f96f771140f1`. Frontend changes in this range:
6+
7+
Derived from the changesets objectui declared over the range — 31 releasing of 31 changesets added across 31 non-merge commits.
8+
9+
- **minor** — The object list's chrome sits on fewer rows (objectui#12528). (objectui `646caea87`)
10+
- **minor** — **A dashboard's "Refresh All" sits in the console page header** (objectui#12554). The console's dashboard page draws the button at the right of its page header's one row, among it… (objectui `96dea1b7a`)
11+
- **minor** — Console pages: a dashboard and the Approvals Inbox draw the page header an object list draws, and the top bar draws no breadcrumb on a dashboard or page route (objectui#12526). (objectui `cd64d43f1`)
12+
- **minor** — Studio Interfaces pillar: the rail is the app's navigation tree as the running sidebar draws it, the "+" offers every nav kind, and the header, tab row and nav-item inspector foll… (objectui `b5416943c`)
13+
- **minor** — The flow canvas's node cards and the Studio's node configuration aside take the Automations redesign (objectui#12488, epic objectui#12446). (objectui `a27c1cfb8`)
14+
- **patch** — A dataset-bound metric tile on `DashboardGridLayout` is two lines, not three (objectui#12573). (objectui `f96f77114`)
15+
- **patch** — Record details: Enter on a link inside a read-only details row that offers copy now opens the link, instead of copying the row's value (objectui#12569). (objectui `6f5dc6b30`)
16+
- **patch** — Studio's Data pillar Form tab now previews the draft (objectui#12515). (objectui `e089a25b9`)
17+
- **patch** — List toolbar: the Filter, Export and Add record buttons keep an accessible name when they render icon-only below the `sm` breakpoint (objectui#12500). Each carries an `aria-label`… (objectui `3821a3ac5`)
18+
- **patch** — The approval decision panel's declared amount also takes a roll-up total (objectui#12534): a field the target object declares `type: 'summary'` whose `summaryOperations` is a `sum… (objectui `cf0f40323`)
19+
- **patch** — A dataset-bound metric tile on a dashboard is two lines, not four (objectui#12528). (objectui `d88e3517e`)
20+
- **patch** — Opening a collapsed section in a record dialog no longer takes the whole console off screen (objectui#12559). (objectui `0081cdc9e`)
21+
- **patch** — The Studio's Interfaces canvas no longer asks for the schema of an object that has only a draft (objectui#12508). (objectui `1b28dbf27`)
22+
- **patch** — Console pages: Flow Runs, Integrations & APIs, Audit Log, AI Approvals, Applications, Profile, the Settings hub and each settings namespace page draw the console page header an ob… (objectui `0d2ac9055`)
23+
- **patch** — A record pointer card now links to the record it shows, when the reader may read that record (objectui#12557). (objectui `7f535f86a`)
24+
- **patch** — Hiding columns on your own saved view now sticks, even when the view declares no `columns` (objectui#12505). (objectui `572bbce00`)
25+
- **patch** — A read-only package now says it is read-only in two places in the Studio, the same in every pillar (objectui#12453). (objectui `2a692851a`)
26+
- **patch** — Studio Interfaces: editing the navigation keeps the 240 px rail, so the content column and the inspector no longer move when you press Edit or Done. Each row of the navigation edi… (objectui `73a3eb2b9`)
27+
- **patch** — A console page's "Edit in studio" button opens the page in Studio, where every other Studio handle on the same screen goes (objectui#12540). (objectui `a90c13178`)
28+
- **patch** — Studio no longer logs a red "Failed to load resource" line for things it already knows are absent (objectui#12508). (objectui `d17952c06`)
29+
- **patch** — The object designer (Studio's Object Settings) and Setup's app navigation editor pick an icon from the catalog the console ships instead of taking a typed Lucide name, and the ico… (objectui `93ce81ac0`)
30+
- **patch** — A sectioned create or edit form draws every section at its own `columns` count per row, whatever the other sections declare (objectui#12548). (objectui `5f8ecf678`)
31+
- **patch** — Flow canvas: a branch edge's pill reads the edge's own label first, so two outcomes of one decision no longer show the same truncated condition (objectui#12507). (objectui `baab2d6ed`)
32+
- **patch** — The record page's highlight strip no longer cuts a value without saying so, and at phone width it uses one layout (objectui#12523). (objectui `518a8e308`)
33+
- **patch** — The console list page's saved-view tabs show as many tabs as the toolbar row has room for again, instead of folding to one tab and "N more" (objectui#12518). (objectui `92318202a`)
34+
- **patch** — The console sidebar's ⋯ menu Design entry, and a favorite's Design entry, open the item's Studio surface: the same destination the app bar's Edit app opens for that item (objectui… (objectui `646307f37`)
35+
- **patch** — Studio Data pillar: the object header shows the same controls on every tab (objectui#12511). (objectui `5249c2435`)
36+
- **patch** — The Studio header no longer overlaps on a narrow window (objectui#12509). (objectui `a3d14e787`)
37+
- **patch** — New package dialog: the display name is now the first field, and the Package ID, Object namespace and Version follow it in the same Basics card. Each of the three says it was fill… (objectui `eea0993c1`)
38+
- **patch** — Record page History: an entry with no actor at all (neither a resolved name nor a user id — a seed backfill or a hook with no user in context) now reads "System" with a cog glyph… (objectui `165f8ff9f`)
39+
- **patch** — Record page header `⋯` menu: the system entries (Edit, favorites, Share, Delete) now carry icons (pencil, star, share, trash) like the app's own actions; the menu lists authored a… (objectui `1ffd6a2fc`)
40+
41+
objectui range: `1f23d5b070fa...f96f771140f1`

‎.objectui-sha‎

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

‎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": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
10-
"revDate": "2026-10-15T16:34:41+00:00",
9+
"rev": "f96f771140f1ba488245e0d0d3e7420d720bff9a",
10+
"revDate": "2026-10-15T21:57:44+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": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
24+
"recordedAgainstPin": "f96f771140f1ba488245e0d0d3e7420d720bff9a",
2525
"grammarRegion": {
2626
"file": "packages/sdui-parser/src/parse.ts",
2727
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",

‎scripts/sdui-manifest.record.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
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": "1f23d5b070fa4d0cee0274902944d247bc4588b7",
14+
"objectuiSha": "f96f771140f1ba488245e0d0d3e7420d720bff9a",
1515
"source": "built-tree",
16-
"modulesRoot": ".cache/objectui-1f23d5b070fa/apps/console",
16+
"modulesRoot": ".cache/objectui-f96f771140f1/apps/console",
1717
"objectuiWorkspaceVersion": "17.7.0",
1818
"generator": "scripts/gen-sdui-manifest-node.mjs",
1919
"generatedAt": "2026-10-15",

0 commit comments

Comments
 (0)