Commit 3cf6449
chore(objectui): bump the console pin to dd3f7e1be356 (carries the injected-client boot fix) with the showcase div→box and trash-icon follow-through (#20436)
Clause-②: no
Moves the console pin from objectui `f8a9d0fb0596` to objectui `main`
`dd3f7e1be356`, which is 325 upstream changesets and 41 of them declared
breaking on objectui's own surfaces. The PR also lands the three pieces
this repo needs so the console built at that pin actually works. A local
boot from a zero-user database, driven in a headless browser from the
first-run registration onward, found each of them.
## Why this pin, and not an earlier `main`
At any objectui `main` from `8cc0e2984` onward, a console built by
`scripts/build-console.sh` dies at boot. The page stays on the splash
screen with `TypeError: u is not a function`.
The script always injects this tree's `@objectstack/client` through
`OBJECTSTACK_CLIENT_DIST`. That client resolved outside `node_modules`,
so it missed the `vendor-objectstack` group and landed in `framework`.
`framework` imports `data-adapter`, and `data-adapter` `require`s the
CJS client at its top level before `framework` has defined it.
The Console Pin Gate only builds the bundle and never loads it, so the
gate stays green on this breakage. The fix landed upstream as
objectui#10921 (for objectui#10920), and `dd3f7e1be356` is its merge
commit. At this pin `chunk-membership.json` reads `client: {
"vendor-objectstack": 1 }`, and the console boots.
## What changes
| Piece | Change |
|---|---|
| `.objectui-sha` + `.changeset/console-dd3f7e1be356.md` |
`bump-objectui.sh` over the whole range `f8a9d0fb0596...dd3f7e1be356`:
325 releasing changesets, 41 annotated breaking, 0 declared major.
ADR-0087 disposition: `not-required (no-migration-prescription)`, worded
as in the last bump that carried breaking entries. |
| `sdui.manifest.json` + record | Regenerated from the pin's built tree:
107 components, up from 59. The 48 additions are the html-tier intrinsic
tags objectui now registers (`a`, `p`, `h1`–`h6`, `ul`/`ol`/`li`,
`table`, `img`, …). `div` is not among them. `check-sdui-manifest
--require-objectui` passes. |
| `packages/sdui-parser/objectui-lockstep.json` | Re-recorded against
`.cache/objectui-dd3f7e1be356`: 214 grammar lines, byte-identical, and
all 26 codes agree. |
| 47 pin citations in `packages/spec/src` | Re-measured, not
sha-swapped, over both hops `f8a9d0fb0` → `733fd5ac6` → `dd3f7e1be`.
Byte-identical files hold by identity. Moved spans are re-pointed.
Changed spans are re-read, with the change stated where cited. No read
point died. The corpus counts in the six semantic migration entries were
calibrated at `f8a9d0fb0` first, then re-taken at the pin; all 96 dark
tokens are still 0. The `view.zod.ts` map-config record's five quoted
anchors are re-pointed; none changed what it reads. |
| Showcase html pages | Capability Map (the showcase landing page),
Start Here and the HTML Command Center rendered `HTML page failed to
compile` at the pin. objectui now refuses `div` on `kind:'html'` pages
and names `box` as the drop-in swap (objectui#10757). Every wrapper
moves to `box`, and all three render with their styles intact. |
| `packages/lint` JSX ratchet | With the regenerated manifest and the
migrated pages, the wired gate emits zero findings over the shipped
pages. Every ledger row went stale, so `sdui-jsx-baseline.json` is
deleted, as its header prescribes, and the census assertion inverts to
"the wired run is clean". |
| `trash-2` → `trash` | lucide 1.43, which the pin ships, dropped
`Trash2` from the runtime `icons` record the console resolves names
through. `icon: 'trash-2'` draws nothing, while `trash` is the identical
glyph (objectui measured it node for node). Changed: four
`@objectstack/platform-objects` delete actions, the app-todo delete
action, the flow builder's `delete_record` palette entry, and the
`BulkAction.icon` describe example. The changeset is `patch` for
`platform-objects` and `spec`. |
| `FormField.span` describe | The describe names the pin it was re-read
at; the claim still holds. Separate `spec` patch changeset; the
reference docs are regenerated. |
## Verification
Gates, run locally at the head:
- `check:objectui-pin-citations`: 47 asserting citations match, and 7
anchor-content assertions are verified against objectui at `dd3f7e1be`.
- `check:generated`: all 15 artifacts are up to date.
- `check:sdui-lockstep` OK, `check-sdui-manifest --require-objectui` OK,
`check:console-sha` OK, `check:cross-package-test-inputs` OK.
- `packages/lint`: 4704 passed.
- `examples/app-showcase`: 384 passed.
- `packages/platform-objects`: 911 passed.
- `packages/spec`: 17121 passed and 2 failed. Both failures reproduce
here on Node 22 as well. They are script-harness tests, not tests of
this diff: `build-schemas-check-mode` sees a stamp `mismatch`, and
`check-liveness` sees a child's JSON cut at byte 65478. I left them for
CI to arbitrate rather than claim either way. An earlier run under heavy
machine load showed 18 failures; all 16 extra were load timeouts that
pass on a quiet re-run.
End to end, on a fresh zero-user database (`objectstack dev
--no-seed-admin`), with the console built at the pin, driven in headless
Chromium:
- **First run.** The `/setup` wizard creates the owner. A CJK-only
organization name renames the bootstrap org (slug kept) instead of
creating a second one. The exit is a full-document navigation, and
`bootstrap-status` flips to `hasOwner:true`.
- **Signup gate.** An uninvited sign-up is refused `403
SELF_REGISTRATION_CLOSED`, both at the API and through `/register`.
Anonymous `/setup` redirects to `/login?redirect=%2Fsetup`, and the
owner's `/setup` opens Setup.
- **Invitation.** The owner invites through the org record page; the
role list is the closed four-name vocabulary. The invited email
registers through `/register` and joins as `member`.
- **Member gates.** Five forged admin calls as the member (invite admin,
invite member, rename org, demote owner, create team) are each refused
403. The member sees no create affordance, and a direct create is
refused 403.
- **Owner CRUD.** Create through the form dialog (lookup and
required-field validation work), edit and delete a project, each checked
server-side.
- **Self-service.** The member renames, uploads an avatar (now stored as
`/api/v1/storage/files/<id>`, not a `data:` URL), changes the password
(old one refused, new one accepted) and signs out from the user menu.
- **Page sweep.** 95 surfaces as the owner (showcase and Setup) and 58
as the member (showcase and account) show no page errors and no 5xx. The
only failures at `9f0c84a` were the three html pages this PR migrates.
Findings outside this PR's scope, noted here and not filed: several
strings are untranslated on the zh-CN console (`Delegated Admin`, the
raw server message on a refused sign-up, the wizard's `Cancel/Next/Step
1 of 3`, `MEMBER COUNT`). A read-only member's wizard shows disabled
inputs with no explanation. Record delete confirms through the native
`window.confirm`. The console probes `GET /api/v1/usage/storage`, which
answers 404 on this server.
---
_Generated by [Claude
Code](https://claude.ai/code/session_local_f929252f-7e71-4327-b98b-bd46424b5e05)_
---------
Co-authored-by: Jack Zhuang <50353452+hotlong@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>1 parent aeb0557 commit 3cf6449
36 files changed
Lines changed: 1730 additions & 558 deletions
File tree
- .changeset
- content/docs/references/ui
- examples
- app-showcase/src/ui/pages
- app-todo/src/actions
- packages
- lint/src
- platform-objects/src/identity
- sdui-parser
- spec/src
- data
- kernel
- migrations
- entries/semantic
- studio
- 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 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
200 | 200 | | |
201 | 201 | | |
202 | 202 | | |
203 | | - | |
| 203 | + | |
204 | 204 | | |
205 | 205 | | |
206 | 206 | | |
| |||
365 | 365 | | |
366 | 366 | | |
367 | 367 | | |
368 | | - | |
| 368 | + | |
369 | 369 | | |
370 | 370 | | |
371 | 371 | | |
| |||
1062 | 1062 | | |
1063 | 1063 | | |
1064 | 1064 | | |
1065 | | - | |
| 1065 | + | |
1066 | 1066 | | |
1067 | 1067 | | |
1068 | 1068 | | |
| |||
1445 | 1445 | | |
1446 | 1446 | | |
1447 | 1447 | | |
1448 | | - | |
| 1448 | + | |
1449 | 1449 | | |
1450 | 1450 | | |
1451 | 1451 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
30 | | - | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
51 | | - | |
52 | | - | |
53 | | - | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
| 56 | + | |
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
86 | | - | |
| 86 | + | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
89 | 89 | | |
90 | 90 | | |
0 commit comments