You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 74c4b34
Browse filesBrowse the repository at this point in the historyBrowse files
chore(objectui): move the console pin to 088e0f705520 (objectui#12175 PR-5, #12174 Q3b) (#15204 B2) (#22967)
Part of #15204
Clause-②: no
**The console pin hop `e5311165a8d6` → `088e0f705520`** (objectui
`main`; the merge of objectui#12175). It is the follow-up #22939 named:
#22939 declares `widget: 'position-ref'` / `'permission-ref'` on the two
grant name fields of Setup's user page, and this pin brings the console
that registers those widgets. Until it lands, those fields render as
text inputs. #22900 waits for this PR and #22939.
**Tier:** no governed surface (`GOVERNED_SURFACES` in
`scripts/pm/check-governed-merges.mjs`). 20 files plus #22973's ported
CI files (`.github/workflows/ci.yml`,
`scripts/check-test-suite-ceilings.mjs`,
`scripts/partition-test-shards.mjs`).
## The hop: 3 objectui commits, all on objectui `main`
- `088e0f705`, objectui#12175 (objectui#7611 PR-5): a record-form field
names one registry item by name (`position-ref` lists `GET
/meta/position`, `permission-ref` lists `GET /meta/permission`, and each
stores the chosen name);
- `83b9fade2`, objectui#12174 (objectui#7611 Q3b): a position approver
is read through the spec's registry binding `{ source: 'registry', type
}`;
- `2498a0753`, objectui#12110: the rich-text editor draws no hint lines.
## The pin round, as #22874's
**Console Pin Gate steps, run locally** (each exited 0):
1. Client build: `turbo run build --filter=@objectstack/client...`.
2. `scripts/build-console.sh` at the pin.
3. `check:console-sha`: "Console dist matches the objectui pin
(objectui@088e0f705520)".
4. `check:console-injection --require-stamp`.
**Artefacts that travel with the pin:**
- **Console changeset.** `scripts/bump-objectui.sh` generated
`.changeset/console-088e0f705520.md`: `@objectstack/console` **minor**,
the level #22874's pin move used. It has 3 releasing entries, 0
breaking, so there is no ADR-0087 placeholder, and it carries `Clause-②:
no`. `check:objectui-changeset` passes.
- **SDUI manifest.** `node scripts/gen-sdui-manifest-node.mjs`:
`sdui.manifest.json` is byte-identical across the hop (107 components),
and `scripts/sdui-manifest.record.json` is re-recorded at the pin.
`check-sdui-manifest` passes.
- **Lockstep record.** `pnpm gen:sdui-lockstep` re-records
`packages/sdui-parser/objectui-lockstep.json` at `088e0f705520`.
`check:sdui-lockstep` passes, so the save gate's parser and the
renderer's copy agree and no port is owed.
- **Pin citations, re-measured for this hop only** (re-measure, never
find-and-replace):
- files that three records cite changed on the hop, all for
objectui#12175, and every cited line held or moved byte-identical:
- `form.tsx` (+3, registering the two widget hints): `spanLadderFor`
held at `:275-302`, and its call site moved `:3326` → `:3329` unchanged,
so the `FormField.span` describe's claim holds (re-pointed, with
`content/docs/references/ui/view.mdx` regenerated);
- `data-objectstack/src/index.ts` (+33 at `:5335`, the adapter's
`listMetadataItems`): below both reads the curated-public-blocks record
cites, so `serializeOrderBy` `869-895` and the `translateFilterArray`
arm `5066-5077` are unmoved;
- the `en` / `zh` / `de` packs (`fields.registryRef` keys, +4 each): the
calendar record's `calendar.configRequired` strings moved +4 and did not
change;
- every other record cites only files that are byte-identical across the
hop (`git diff --quiet`, checked file by file), and each gains a hop
sentence saying so. The first version of this PR said two of the three
changed files were byte-identical; the contract review caught it, and
`378004003` corrects both records and the changeset;
- the six migration entries were recounted with `git grep -o -F`, which
reproduces every `e5311165a8d6` figure exactly. The corpus is 8519
files, and every retired name still reads 0;
- `check:objectui-pin-citations --verify-anchors`: 55 asserting
citations match `088e0f705`, and the 13 quoted anchors verify against
objectui at the pin;
- changeset `.changeset/objectui-pin-citations-088e0f705520.md`:
`@objectstack/spec` patch, `Clause-②: no`.
## Browser check, against this branch's built dist
`examples/app-showcase` was booted `--fresh` with this branch's console
dist and #22939's object metadata temporarily merged in, uncommitted;
#22939 is not on `main` yet. As the admin on Setup's user page:
- the **Position** and **Permission Set** fields render as registry
pickers (`registry-ref-position` / `registry-ref-permission`), listing
16 positions and 17 permission sets;
- picking `auditor` and `mcp_agent_data_read`, then pressing Create,
wrote both grant rows (verified through the data API);
- **`everyone` is still listed** among the positions (the open objectui
finding: the server refuses it as a grant target).
## Verification (local, at this head)
- full `turbo run build` green;
- spec typecheck green, spec suite 706 files / 20,387 passed. This was
run with the docs build's git-ignored `content/docs/protocol-upgrade/`
moved aside: that generated guide reds four tree-scan pins in any
checkout where the docs app was built, as recorded on #22939;
- `dispatch-gates --ran`: 125 derived families, all recorded with exit
0.
## Acceptance notes
- CI `Test Core` red on `6ef50e894` only on the suite-duration ceiling
step (`service-analytics`, `knowledge-ragflow`), which is #22949's class
and not this diff's. This branch now carries #22973's two commits,
cherry-picked in order (`e6c7a6ce6` → `598bb69c1`, `ef3d0764b` →
`55535f501`); both scripts' `--self-test`s pass.
- objectui finding, carried over (carrier: none yet): the `position-ref`
picker lists the `everyone` audience anchor.
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_013XKtmoR5QCUSTMjiQ3os49
---------
Co-authored-by: Claude <noreply@anthropic.com>
Console (objectui) refreshed to `088e0f705520`. Frontend changes in this range:
6
+
7
+
Derived from the changesets objectui declared over the range — 3 releasing of 3 changesets added across 3 non-merge commits.
8
+
9
+
-**minor** — A record-form field can name one item of a metadata registry by its machine name: a `text` field that declares `widget: 'position-ref'` lists the position registry, and one that d… (objectui `088e0f705`)
10
+
-**patch** — A position approver is read through the spec's registry binding, `{ source: 'registry', type }` (objectstack#22710): its readable label and its designer picker come from the posit… (objectui `83b9fade2`)
11
+
-**patch** — A rich-text field no longer draws hint lines above its editor (objectui#12110, ruled B). The `markdown`, `html` and `richtext` editors used to show "Format: markdown" (or "Format:… (objectui `2498a0753`)
The spec's objectui citations, and the shipped description text that names the `.objectui-sha` pin (the `FormField.span` describe and six migration-entry descriptions), are re-measured against the new console pin, objectui `088e0f705520`.
6
+
7
+
Clause-②: no
8
+
9
+
Every anchor was mapped through the objectui diff `e5311165a8d6..088e0f705520`: 54 paths over 3 commits (objectui#12110's rich-text hint lines, objectui#12174 and objectui#12175). Files that three records cite changed on the hop, all for objectui#12175, and every cited line in them held or moved with its text byte-identical:
10
+
11
+
-`form.tsx` (+3, registering the `position-ref` / `permission-ref` widget hints): `spanLadderFor` held at `:275-302`, and its one call site moved `:3326` -> `:3329` with the call unchanged. So `FormField.span: 'full'` still takes the whole row at every multi-column tier.
12
+
-`data-objectstack/src/index.ts` (+33 at `:5335`, the adapter's `listMetadataItems`): this lands below both reads the curated-public-blocks record cites, so `serializeOrderBy``869-895` and the `translateFilterArray` arm `5066-5077` are unmoved.
13
+
- The `en` / `zh` / `de` packs (`fields.registryRef` keys, +4 each): the calendar record's `calendar.configRequired` strings moved by +4 and did not change.
14
+
15
+
Every other record cites only files that are byte-identical across the hop (`git diff --quiet`, checked file by file), and each gains a hop sentence that says so.
16
+
17
+
The six migration entries' corpus counts were re-taken with `git grep -o -F`, the method that reproduces every `e5311165a8d6` number. The corpus is now 8519 tracked files, and every retired name each entry counts still reads 0. The lit controls moved with the corpus, for example `objectstack` from 18355 to 18400 and `useState` from 2659 to 2661.
|**colSpan**|`integer`| optional | Absolute column span (1-4). The renderer clamps it to the form grid's current column count, so the cell starts at a real column boundary at every surface width and never overflows (`colSpan: 4` in a 3-column grid renders as 3); a `colSpan` within the column count renders as authored, and `colSpan: 1` emits no span class at all. |
216
-
|**span**|`Enum<'auto' \| 'full'>`| optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `e5311165a8d6`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
216
+
|**span**|`Enum<'auto' \| 'full'>`| optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `088e0f705520`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
217
217
|**widget**|`string`| optional | Custom widget/component name (overrides type-based inference) |
218
218
|**language**|`string`| optional | Code editor language (for type=code) |
|**colSpan**|`integer`| optional | Absolute column span (1-4). The renderer clamps it to the form grid's current column count, so the cell starts at a real column boundary at every surface width and never overflows (`colSpan: 4` in a 3-column grid renders as 3); a `colSpan` within the column count renders as authored, and `colSpan: 1` emits no span class at all. |
346
-
|**span**|`Enum<'auto' \| 'full'>`| optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `e5311165a8d6`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
346
+
|**span**|`Enum<'auto' \| 'full'>`| optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `088e0f705520`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
347
347
|**widget**|`string`| optional | Custom widget/component name (overrides type-based inference) |
348
348
|**language**|`string`| optional | Code editor language (for type=code) |
Copy file name to clipboardExpand all lines: packages/spec/src/migrations/entries/semantic/18.kernel-health-check-and-hot-reload-durations-unit-in-key.ts
+'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 8506 tracked files (0 across the 8441 at 499799502, the 8424 at 0df67f237, 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 '
57
+
+'the string debounceDelay each occur 0 times across its 8519 tracked files (0 across the 8506 at e5311165a, the 8441 at 499799502, the 8424 at 0df67f237, 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 '
58
58
+'8512 at f8a9d0fb0 and the 8303 at 62597c588 too), against lit '
59
59
+'controls objectstack 12966 and @objectstack/spec 4997 on the same corpus at 87af769e9, '
60
60
+'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, to 18047 and 7545 at 20c6d351a, to 18248 and 7582 at 0df67f237, to 18271 and 7587 at 499799502 and to 18355 and 7599 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, to 18248 and 7582 at 0df67f237, to 18271 and 7587 at 499799502, to 18355 and 7599 at e5311165a and to 18400 and 7603 at this pin (git grep -o -F, the method that reproduces '
62
62
+'every earlier count).',
63
63
acceptanceCriteria:
64
64
'Every producer and reader of a PluginHealthCheck spells intervalMs and timeoutMs, and every '
+'spells timeout 0 times; outside the zod file and its test the only live occurrences are the '
47
47
+'generated rows in content/docs/references/kernel/plugin-security-advanced.mdx, which this '
48
48
+'rename regenerates. The pinned objectui checkout — this is the pin we build against, '
49
-
+'`.objectui-sha` = `e5311165a8d6aa77b5cb7d9fd05da8451a2c21aa`, re-read from this tree — '
50
-
+'spells resourceLimits.timeout 0 times across '
51
-
+'8506 tracked files, against lit controls timeout 1706, RuntimeConfig 357 and resourceLimits '
52
-
+'2 on the same corpus (0 across 8441, and 1704 / 352 / 2, at 499799502; 0 across 8424, and 1705 / 347 / 2, at 0df67f237; 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 '
49
+
+'`.objectui-sha` = `088e0f705520e82bee1d65a5fa3c1f7a26672dde`, re-read from this tree — '
50
+
+'spells resourceLimits.timeout 0 times across 8519 tracked files, against lit controls timeout 1706, RuntimeConfig 357 and resourceLimits 2 on the same corpus (0 across 8506, and 1706 / 357 / 2, at e5311165a; 0 across 8441, and 1704 / 352 / 2, at 499799502; 0 across 8424, and 1705 / 347 / 2, at 0df67f237; 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 '
53
51
+'1086 / 240 / 2, at 62597c588); both resourceLimits hits are prose in packages/app-shell recording '
54
52
+'that objectui\'s own AppShellRuntimeConfig shares not one key with the spec\'s '
55
53
+'RuntimeConfig, so nothing there authors this key and no pin bump is owed. ADR-0087.',
0 commit comments