Commit 1cbe165
chore(objectui): bump the console pin to ab1879721595 (carries objectui f624f278, b0bf413c and ab187972) (#21625)
Fixes #21616
Clause-②: no
Moves the bundled Console's objectui pin from `89cad75d5570` (#21380) to
objectui `main` at claim time,
`ab187972159583b595facdcae3c73b50f6f312e9`, so the Console carries
objectui#11553, objectui#11544 and objectui#11562, and objectui's own
move onto `@objectstack/*` 17.6.0. Unblocked by this, once it lands:
#12438 (B1's re-run), #21464 (the held object-grid `columns` member).
#21596's run reads whatever console this pin builds.
## Range
`89cad75d5570..ab1879721595`: 65 non-merge commits, 119 changesets added
(one no longer present at the tip, read from the commit that added it),
111 releasing (43 declared breaking, all by the author's annotation), 8
release-nothing, 1 commit without a changeset (`6903eafbc`, a docs
example). `git merge-base --is-ancestor` exits 0 against objectui
`origin/main` for the old pin and for every commit named below;
`ab1879721595` is `origin/main` at the claim-time read.
## The landings this bump carries
| objectui landing | merge commit | who waits here |
|---|---|---|
| objectui#11553 — Studio reaches the organization's package-less flows
at `/studio/~org/automations` (PR objectui#11565) | `f624f278d77e` |
#12438 B1's re-run |
| objectui#11544 — a grouped grid's group headers read the object
field's `options` only, never a column's (PR objectui#11563) |
`b0bf413cac21` | #21464's held object-grid `columns` member |
| objectui#11562 — `record:details` edit mode edits a `textarea` field
in a multi-line textarea, so a save keeps its line breaks (PR
objectui#11567) | `ab1879721595` (the pin itself) | the console this
repo ships |
| objectui#11438 — objectui resolves `@objectstack/*` 17.6.0 and follows
its mechanical contract moves (PR objectui#11531) | `6158e4c93f0b` |
none; carried by the range |
## What changed here, and why
- `.objectui-sha` and `.changeset/console-ab1879721595.md`, written by
`scripts/bump-objectui.sh ab187972159583b595facdcae3c73b50f6f312e9
--no-commit` (auto level `minor`). The explicit sha is passed because
the shared `../objectui` checkout sits on another branch. The script's
`adr-0087: TODO` placeholder is answered `not-required
(no-migration-prescription)`, in the wording the previous bumps used,
naming all 43 declared-breaking entries (26 commits). Each is objectui's
own surface: its validators, layout nodes, node-type keys, CLI, designer
and drill-report types. Where an entry narrows toward an ObjectStack
shape, ObjectStack already declares that shape: the `{ condition, style
}` rule, a dataset-bound dashboard widget, `deleteBehavior`,
`percentScaleOf`. Measured: none of the 22 retired or narrowed node keys
probed is a `ComponentPropsMap` row (56 rows) or a `PageComponentType`
member (31).
- `packages/sdui-parser/objectui-lockstep.json`, re-recorded with `pnpm
gen:sdui-lockstep` against the build worktree at the pin
(`OBJECTUI_ROOT=.cache/objectui-ab1879721595`; the generator correctly
refused the off-pin shared checkout). It reads 214 grammar lines (blob
`0131f27cf86d`), 25 codes and containment predicate `76c18fb95d1f`, all
unchanged, so no port is owed.
- `sdui.manifest.json` + `scripts/sdui-manifest.record.json`, from `node
scripts/gen-sdui-manifest-node.mjs` over the tree `pnpm objectui:build`
built at the pin. It has 107 components, none added or removed. Fourteen
changed their published inputs:
- `grid` drops `smColumns` / `mdColumns` / `lgColumns` / `xlColumns`,
and its `columns` and `gap` become value sets. `stack` / `flex` `gap`
and `container` `padding` become value sets too.
- `page:header` drops the inert `breadcrumb`.
- `object-grid` gains `description`, `emptyState` and
`keyboardNavigation`. `object-pivot` gains `drillDown`, and
`record:line_items` gains ten inputs.
- Descriptions changed on `object-grid` / `object-kanban`
`conditionalFormatting`, `action:button` / `action:icon`
`successMessage`, and the `fields` input of the three form blocks
(`object-form`, `embeddable-form`, `object-master-detail-form`).
- The 49 asserting pin citations in `packages/spec/src`
(`check:objectui-pin-citations` reds on any pin move) were re-measured
at the new pin, not restamped. Each anchor was mapped through its cited
file's diff and re-read. Block hashes and corpus counts were re-taken
with a method that first reproduced every `89cad75d5` number: the
selection block still hashes to `c88443302d40…`, and the corpus is 10071
files with `objectstack` 16044 and `@objectstack/spec` 6461 at the old
pin, against 10267, 16377 and 6665 here. This regenerates
`packages/spec/src/migrations/registry.ts` and
`content/docs/references/ui/view.mdx`. It adds
`.changeset/objectui-pin-citations-ab1879721595.md` (`@objectstack/spec`
patch), because the `FormField.span` describe and six migration
descriptions name the pin.
- Records whose claim moved, not only their numbers:
- The four `action:*` rows. objectui#11344 now forwards
`outcomeMessages` to the runner. The `action:button` / `action:icon`
rows record it as a key the renderer forwards and the row does not
declare: it arrives on the `action:bar` member path, and objectui leaves
the input unpublished until the row declares it. The `action:group` /
`action:menu` rows record it riding each member's forward.
- The `object-tree` paragraph now cites the regenerated manifest record.
- Patch round, after the contract review: `object-grid`
`keyboardNavigation`. The grid reads the key at this pin
(objectui#11068, `154075ab1`: `ObjectGrid.tsx:5458` hands
`schema.keyboardNavigation ?? inlineEditable` to `data-table.tsx`, which
makes the cells one roving Tab stop). So the describe drops
`[EXPERIMENTAL — not enforced]` and its "no renderer reads it" sentence,
and states the measured behaviour. The member docblock and the block
docblock's [#20694] paragraph record the read and keep the
`db11afd4967c` measurement as history.
`content/docs/references/ui/component.mdx` is regenerated.
- The same sweep found two more records of the same class:
- `object-grid` `emptyState`'s record called the unresolved locale map
"a renderer gap". objectui#11227 (`6158e4c93`) ends that gap:
`ObjectGrid.tsx:6468-6469` resolves `title` / `message` against the
display locale.
- `ActionSchema.outcomeMessages` was `planned`, with an author warning
that the console does not show outcome copy yet. The console reader is
objectui#11344 (`c476be0e0`, `ActionRunner.composeSuccessMessage`), so
the row is `live`, as it prescribed for this commit. This adds
`packages/spec/liveness/action.json` and its count shard
`liveness/state-counts/action.md` to the diff, and the `successMessage`
row's note records the interpolation.
- Every other anchor held on a byte-identical file or moved with its
cited text byte-identical. That includes the three quoted-first-line
anchors in `ui/view.zod.ts` that redded: `ObjectView.tsx` `2293` ->
`2299`, `objectql.zod.ts` `2145` -> `2370` (still `.strict()`) and
`1160` -> `1419` (still without `map`). No key, default, enum member or
export moves.
- No example, test or gate needed adapting for the breaking entries or
for objectui#11438's behaviour changes. Measured on this branch:
- The showcase JSX pages use `flex` gaps 1, 2, 3, 4, 6 and 8 and `grid`
gap 5 with columns 3 and 4, all inside the new sets.
- No example names a retired grid `*Columns` key or any retired node key
(0 `git grep` hits).
- No example dashboard widget uses the dataset-less inline-object form,
which the spec refuses without `dataset` anyway.
- All three example `percent` fields declare `max: 100`, so
objectui#11475's storage-driven scaling reads them as whole percents.
- No example uses `is_empty` / `$empty` on a value provider.
## Browser verification (`examples/app-showcase`, this branch)
`pnpm dev -- --fresh --ui --no-watch -p 41737` ran at `87d7c51424`,
before the merge, with its own ephemeral DB and the seeded admin. The
four `main` commits merged afterwards touch no console asset.
`check:console-sha` reports `objectui@ab1879721595`. The run was driven
in headless Chromium (`/opt/pw-browsers/chromium`) with every API
response captured.
| carried fix | drive | result at `ab1879721595` |
|---|---|---|
| objectui#11553 | `POST
/api/v1/automation/showcase_task_completed/clone` `{ name:
'pinprobe_flow_clone', label: 'Pinprobe flow clone' }`, then open
`/_console/studio/~org/automations` | clone **200**. `GET
/api/v1/meta/flow/pinprobe_flow_clone` **200**, `_packageId` null. The
page header reads "Organization flows · Automations". The rail lists
"Pinprobe flow clone" and the canvas opens it
(`?surface=flow:pinprobe_flow_clone`, status draft). Studio's home lists
"NOT IN A PACKAGE · Organization flows" beside "No writable packages
yet" |
| objectui#11544 | Tasks list → Group → Add group field → Status | five
headers, keyed `backlog` / `done` / `in_progress` / `in_review` /
`todo`, labelled from the object field's options: Backlog, Done, In
Progress, In Review, To Do. Each counts 2, matching `POST
/api/v1/data/showcase_task/query` (`groupBy: ['status']`, 5 records).
The retired column-`options` read cannot be authored (the strict
`ListColumnSchema` refuses `options`), so there is no pre-fix leg to
contrast |
| objectui#11562 | `PATCH` a task's `notes` to `"Call back
Monday.\n\nBudget approved, needs legal review.\n"`, open its record
page, double-click Notes, append "Signed off.", Save | the editor is a
`TEXTAREA` whose value carries both line breaks. The stored value after
the save is `"Call back Monday.\n\nBudget approved, needs legal
review.\nSigned off."` |
Smoke: the `/_console/home` launcher, Capability Map, Command Center
(大屏), the JSX Command Center (`grid columns={4} gap={5}`), the Delivery
Operations dashboard (KPI tiles and charts drawn), Chart Gallery,
Component Gallery and Task Board. 0 page errors. Non-2xx responses were
only `401 /auth/get-session` before sign-in, `404 /usage/storage` and
one `404 ?state=draft` no-draft probe. Only the PIDs this run started
were stopped.
## Gates and tests run locally, at `4fc15b7e67` (sync round),
`5eadf35375` (patch round) and `b93b5fec00`
`4fc15b7e67` is the head after merging `origin/main` `5b5e83f446` with
`scripts/pm/os-regen-merge.sh`. The merge commit `501902fb09` had no
conflict hunk. `component.zod.ts` and `migrations/registry.ts`
auto-merged, and both sides' added and removed lines are intact,
compared line for line against each side's own diff. The os-regen driver
kept this branch's side of `content/docs/references/ui/component.mdx`,
dropping main's object-metric `aggregate` and `trend` rows
(`3f1bc816a2`). `check:generated --fix` regenerated it in `4fc15b7e67`,
and it now differs from main only by this PR's `keyboardNavigation` row.
The PR's own contribution, its diff against `origin/main`, is the same
25 paths with the same added and removed lines as at `5eadf35375`.
At `4fc15b7e67`, `dispatch-gates --commands` derived the same 128
commands from the same 25-path diff, and all 128 exited 0. `--ran`
reports 128 derived, 128 run, 0 NOT-MEASURED. These also exited 0:
- `check:objectui-pin-citations --verify-anchors` (54 asserting
citations match `ab1879721`; 7 content assertions verified)
- `check:authorable-surface`, `check:migration-registry` (`registry.ts`
current: 360 semantic entries, with main's
`ui-object-metric-aggregate-trend-typed`), `check:generated` (all 15
artifacts current), `check:docs` and `check:liveness`
- `@objectstack/spec` test (609 files, 18057 passed, 1 todo) and
typecheck
- eslint on the 15 changed TS files (0 errors, 0 warnings)
At `5eadf35375`, `dispatch-gates --commands` derived 128 commands from
the 25-path diff (the 127 below plus `check:platform-checklist`), and
all 128 exited 0. `--ran` reports 128 derived, 128 run, 0 NOT-MEASURED.
These also exited 0:
- `check:objectui-pin-citations --verify-anchors` (54 asserting
citations match `ab1879721`; 7 content assertions verified)
- `check:generated` and `check:docs` (`component.mdx` regenerated by
`check:generated --fix`)
- `check:liveness` (after `gen:liveness-counts`)
- `@objectstack/spec` test (608 files, 18017 passed, 1 todo) and
typecheck
- `@objectstack/lint` `lint-liveness-properties.test.ts` (95 passed)
- eslint on the 15 changed TS files (0 errors, 0 warnings)
`b93b5fec00` is the head after merging `origin/main` `f97660cdd6` with
`scripts/pm/os-regen-merge.sh`. The regenerated `registry.ts` is
byte-identical to the merge's and keeps main's new
`element-text-variant-heading-subheading-retired` entry.
- `node scripts/pm/dispatch-gates.mjs --commands` derived 127 commands,
the same set before and after the merge. All 127 exited 0 at this head,
and the `--ran` reconciliation reports 127 derived, 127 run, 0
NOT-MEASURED, every exit recorded. On the pre-merge pass at
`87d7c51424`, `check:skill-examples` and `check:dual-build-cjs-loads`
first exited 3 (PREREQUISITE NOT MET: no `dist/`) and exited 0 after
`pnpm build`.
- Named by the dispatch, all exit 0:
- `check-adr-0087-registration --base origin/main`,
`check-changeset-no-major --base origin/main`
- `check:console-sha`, `check:console-injection`, `check:sdui-lockstep`,
`check-sdui-manifest`
- `check:objectui-pin-citations --verify-anchors` (49 asserting
citations match `ab1879721`; 7 content assertions verified)
- `check:migration-registry`, `check:objectui-bump`
- `@objectstack/spec check:generated` (after `check:generated --fix`
regenerated `content/docs/references/ui/view.mdx`)
- The console build passed its single-zod canary (one
`{major:4,minor:6,patch:5}` literal) and its spec-injection check.
- `pnpm build` exited 0. `pnpm --filter @objectstack/spec test`: 608
files, 18017 passed, 1 todo. `pnpm --filter @objectstack/sdui-parser
test`: 218 passed. `pnpm --filter @objectstack/spec typecheck`: exit 0.
- `eslint --no-inline-config` was run on the 13 changed TS files: 0
errors, 0 warnings. The population is `**/*.{ts,…}`
(`eslint.config.mjs:971`), and the config enables no type-aware linting
(`:327-328`), so the diff cannot move a judgment on an untouched file.
Repo-wide `pnpm lint` is left to CI.
Environment: Node 22.22.0 sufficed. At this pin objectui locks `jsdom`
29.1.1 (`engines ^22.13.0`), so no newer Node was needed.
## Acceptance notes
- objectui, measured in the browser run above, not touched here:
switching the list's Group field leaves stale "(empty)" groups stuck on
"Loading grid…". The server answers only the real groups. Title (10
groups), then Priority, showed 13 groups (9 phantom + 4); then Status 8
(3 + 5); then Priority 8 (4 + 4). `useServerGrouping.ts` and
`useGroupedData.ts` are byte-identical at `89cad75d5570` and
`ab1879721595`, so this hop does not reach them. Not measured in a
browser at the old pin.
- `object-kanban`'s `conditionalFormatting` is still `z.unknown()` in
this spec, while objectui#11522 now declares only the `{ condition,
style }` rule on that block. This is the same typing-by-reference move
#21464 makes for its object-block members.
- The `action:button` / `action:icon` rows in `ui/component.zod.ts`
still do not declare `outcomeMessages`, which objectui now forwards.
Declaring it is a contract decision, recorded on the rows and not made
here.
- `conversions/registry.ts`' `PAGE_HEADER_COMPONENT_TYPES` docblock
still calls `page-header` objectui's legacy alias. objectui retired that
node key in this range (`ad1785c1d`). The conversion itself is
unaffected.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01HRYqpqGcWpJuJkDmbRF75w)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 96b0e31 commit 1cbe165
25 files changed
Lines changed: 1042 additions & 264 deletions
File tree
- .changeset
- content/docs/references/ui
- packages
- sdui-parser
- spec
- liveness
- state-counts
- src
- data
- kernel
- migrations
- entries/semantic
- ui
- scripts
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
735 | 735 | | |
736 | 736 | | |
737 | 737 | | |
738 | | - | |
| 738 | + | |
739 | 739 | | |
740 | 740 | | |
741 | 741 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
216 | | - | |
| 216 | + | |
217 | 217 | | |
218 | 218 | | |
219 | 219 | | |
| |||
343 | 343 | | |
344 | 344 | | |
345 | 345 | | |
346 | | - | |
| 346 | + | |
347 | 347 | | |
348 | 348 | | |
349 | 349 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
10 | | - | |
| 9 | + | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
106 | | - | |
| 106 | + | |
107 | 107 | | |
108 | 108 | | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
116 | 114 | | |
117 | 115 | | |
118 | 116 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
0 commit comments