Skip to content

Commit e66f13c

Browse files
chore(objectui): move the console pin to f8267df, past the spec deletion of checkPageComponentViewData (#23973)
Fixes #23908 Clause-②: no This PR moves the console pin from `daeb77fc84dd` to `f8267df93aba`, objectui `main` at `f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56`. That commit carries `15d8ca6da` (objectstack-ai/objectui#12678, card objectstack-ai/objectui#12666), which drops objectui's import of `checkPageComponentViewData`. #23784 (`a35f7a6764`) deleted that export from the spec. With the new pin, `pnpm objectui:build` on `main` builds again. It also carries one Spec Shape Gate registry entry for #23846 (`adad73f714`, `SelectOptionSchema.kind`) against objectstack-ai/objectui#12711. The claim declared this extra. The deprecated re-export is **not** restored. `packages/spec/src/**` is untouched, and the deletion stands. **Tier:** not governed. `check-governed-merges.mjs --branch claude/issue-23908-console-pin-past-23784`: 0 of 6 paths hit the register. Size: 6 files, +113 / −12. ## Choosing the pin - The candidates are objectui `main` commits at or after `15d8ca6da`. When this was read, there were two: `15d8ca6da` and `f8267df93` (the tip; objectstack-ai/objectui#12679, card objectui#12486). `git merge-base --is-ancestor 15d8ca6… origin/main` exits 0. The objectui clone is not shallow. - The tip was chosen because it is the latest candidate, and it builds against this tree's spec (readings below). No fallback was needed. ## Gate (a): Console Pin Gate, local equivalent 1. Client closure: `turbo run build --concurrency=2 --filter=@objectstack/client --filter=@objectstack/sdui-parser --filter=@objectstack/spec`. 34/34 tasks passed. 2. `scripts/build-console.sh` at the new pin, with `OBJECTUI_ROOT` pointing at a blobless objectui clone, under the verify lock. It ended with `VERDICT command-exit 0`: - bundle canary `import/jobs` present; - exactly one zod version literal, `{major:4,minor:6,patch:7}`, across 2253 `assets/*.js`; - "Console bundle carries THIS tree's @objectstack/spec, and only it"; - "dist ready (64708 KB) from objectui@f8267df93aba". 3. `packages/console/dist/.objectui-sha` reads `f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56`. `pnpm check:console-sha` reads "Console dist matches the objectui pin (objectui@f8267df93aba)". `pnpm check:console-injection` reads "the dist carries this tree's copy, and not the published one". Both exited 0. The `[MISSING_EXPORT] "checkPageComponentViewData"` from the card does not appear: the console build passed `vite build`. ## The second half: manifest and lockstep record - `node scripts/gen-sdui-manifest-node.mjs` read `.cache/objectui-f8267df93aba/apps/console` and wrote 107 components (sha256 `beba7d3fe260…`). It also re-recorded `scripts/sdui-manifest.record.json` at the pin. - `sdui.manifest.json` moves in two places, both from objectui changes in the range: - `page:header` no longer publishes the `showStar` input. This comes from objectui `608033b82` (card objectui#12627), which follows the spec's retirement of the key (#23650). - `page:header.maxVisible`'s description gains two sentences, about the host's own buttons and the primary button (objectui `ef71a09f9`). - No component is added or removed. The accept set only narrows, so `Clause-②: no` holds. - `OBJECTUI_ROOT=.cache/objectui-f8267df93aba pnpm gen:sdui-lockstep` re-recorded `packages/sdui-parser/objectui-lockstep.json` at the pin. The grammar blob `0131f27cf86d` and the predicate blob `76c18fb95d1f` are unchanged, and `check:sdui-lockstep` passes (214 grammar lines, 25 codes). No parser port is owed. - `node scripts/check-sdui-manifest.mjs` exits 0. With `OBJECTUI_ROOT` set and `--require-objectui`, it also confirms that `@object-ui 17.7.0` is the version the pin declares. - `packages/console/dist/` is not tracked. Nothing in it was edited by hand. ## Gate (b): Spec Shape Gate, local equivalent The steps are the workflow's own: - `npm pack` of this tree's built spec; - a separate objectui worktree at `main` = `f8267df93aba`, with `pnpm install --frozen-lockfile`; - `spec-shape-gate.mjs inject`; - `TURBO_FORCE=true pnpm type-check --continue`, which ran 81 turbo tasks (78 passed, 3 failed: `@object-ui/react#build`, `@object-ui/react#type-check`, `@object-ui/types#type-check`); - `spec-shape-gate.mjs report`, which exited **0**: "5 diagnostic(s), all registered retirements -- known, not red." | objectui file | line | code | reading | |---|---|---|---| | `packages/types/src/__tests__/select-option-tier1-convergence-7014.test.ts` | 130, 138, 150, 157 | TS2344 | known (registered: objectstack-ai/objectui#12711), **this PR's entry** | | `packages/react/src/SchemaRenderer.tsx` | 1945 (x2: build and type-check) | TS2345 | known (registered: objectstack-ai/objectui#12654), seat 1's F4 entry | - `layout.zod.ts:25` (TS2305) is gone, and so is `imported-defaults-8317.test.ts:145`: `grep -c 'layout.zod\|checkPageComponentViewData'` over the log reads 0. The `types` package's `tsc --noEmit` and `tsconfig.examples.json` passed, and its chained `tsconfig.test.json` produced only the four rows above. - **The blind spot, closed.** `@object-ui/react`'s chained `tsconfig.test.json` never runs under `type-check`, because its first `tsc` is red on the F4 row. It was run on its own (`tsc -p tsconfig.test.json --noEmit` in `packages/react`). It reports exactly two rows, `SchemaRenderer.tsx:1945` TS2345 and `SchemaRenderer.expressions.test.tsx:171` TS2322. Both are covered by seat 1's existing F4 entry. - **No other red row.** Nothing needed `git log -S` attribution, and nothing belongs to another seat. ## The registry entry `scripts/ci/spec-shape-retirements.json` gains one entry: `objectstack_pr` 23846, `objectstack_commit` `adad73f71483abf84b470e90367fe8080c44a4e0`, `downstream_card` `objectstack-ai/objectui#12711`, `registered_at` 2026-10-16. - It has one pattern: `file` `packages/types/src/__tests__/select-option-tier1-convergence-7014.test.ts`, `code` `TS2344`, `message` `Type 'false' does not satisfy the constraint 'true'.` (the full first line). The pattern carries no line number, so it covers all four rows. - `retired` says what happened. Nothing was retired: the spec ADDED an optional key, and objectui's convergence pins red on a new key by design. The entry is deleted when objectui#12711 closes. - **Where the measurement comes from.** Seat 1 measured it first (`6215839271` on #18549: objectui `f78efdd1e3` against objectstack `570f01d270`, the same four lines). This PR re-measured it against objectui `f8267df93aba` and this branch's spec, in the table above. - `parseRegistry` accepts the real file (2 entries). `pnpm check:spec-shape-gate` (the self-test) passes 60/60. This PR edits the registry, so the workflow's `pull_request` trigger runs the real gate here. ## objectui commits `daeb77fc..f8267df` that touch the spec consumption surface The range has 40 non-merge commits. The 14 below change a line naming `@objectstack/spec` (`git show` excluding Markdown): - `15d8ca6da` fix(types): drop the page view-data check objectstack main deleted (objectui#12666). **This is why the pin moves.** Without it the console does not build against this tree. - `f8267df93` objectui#12486: the page renderer drops its `kind: 'jsx'` arm. The spec already refuses `jsx` at parse. Breaking for `PageNodeSchema.kind`, answered in the changeset's ADR-0087 note. - `f62b6ff4e` deps(v18): objectui resolves `@objectstack/*` `18.0.0-next.2`. No effect on the console build, which injects this tree's spec through `OBJECTSTACK_SPEC_DIST`. The single-zod canary passes. - `608033b82` `page:header` stops reading `showStar`. This is the manifest's one input removal, above. - `a98a23c78` Studio retires the two delegated-admin switches the spec retired (#23488's objectui half). - `3eb3ec138` objectui#12504: `DataSource.updateViewConfig` and its capability gate are retired. Breaking for `@object-ui/types`; nothing in this tree calls it. - `023087f63` `resolveRecordPointer` reads `referenceDeletedWhen`. - `c6a42be39` objectui deletes its copy of the spec shape gate. The gate now runs only here. - Imports or type references only: `f78efdd1e`, `db8ce2f41`, `8614705c1`, `ef71a09f9`, `33fbc861d`, `7b5e55893`. None of these blocks the pin: the console builds and the shape compile reads only registered rows. ## The console changeset `.changeset/console-f8267df93aba.md` was written by `scripts/bump-objectui.sh --no-commit f8267df…`, following `docs/releases-maintenance.md` step 3. - `@objectstack/console` **minor**: 46 releasing changesets across 40 non-merge commits, 3 annotated breaking, 3 commits without a changeset. - The script's ADR-0087 placeholder is answered `not-required (no-migration-prescription)`. Each of the three breaking entries is answered against this tree. - `check-adr-0087-registration --base origin/main`, `check-changeset-no-major --base origin/main` and `check-empty-changeset --base origin/main` all exit 0. - Because the pin's changeset is a real declaring changeset, `skip-changeset` is not applied. - **File-surface note:** the claim allowed a `.changeset/23908-*.md` only if a gate asked for one. The pin's own changeset is named `console-SHA12.md` by the bump script, as on every earlier hop. No other changeset is added. ## Verification, at `0136ab25c` - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths, merge base `161aee104`) derived 71 commands. Each was run, with its exit code captured before any pipe. `--ran` with exit codes reads "71 derived, 71 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)". - Two commands first exited 3 (prerequisite not met). Both were re-run green at the same head: - `check-plugin-teardown-shape --self-test`: its fixture commit `621a48760` was outside the shallow clone. After `git fetch origin 621a487…` it passed 48 cases. - `check:dual-build-cjs-loads`: it needed a full build. `turbo run build --concurrency=2 --filter=!@objectstack/docs` passed 75/75, and the gate then read 110 entries across 68 packages. - This PR changes no package source, so no package `test` / `typecheck` is owed. ## Acceptance notes - #23885 remains open: it is the hourly full-battery card, and it goes with the next green run, not with this PR. - objectui#12711 remains open. Its registry entry here is deleted when it closes. --- _Generated by [Claude Code](https://claude.ai/code/session_01FQ8CFdsfm5FTPhm4HHxGN8)_ 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01FQ8CFdsfm5FTPhm4HHxGN8 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 022c6e7 commit e66f13c

6 files changed

Lines changed: 113 additions & 12 deletions

File tree

‎.changeset/console-f8267df93aba.md‎

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
"@objectstack/console": minor
3+
---
4+
5+
Console (objectui) refreshed to `f8267df93aba`. Frontend changes in this range:
6+
7+
Derived from the changesets objectui declared over the range — 46 releasing of 46 changesets added across 40 non-merge commits; omitted: 3 commits carrying no changeset (they ship no package code).
8+
9+
- **minor** — **BREAKING** — The page renderer no longer compiles a `kind: 'jsx'` page node as `html`. This completes the retirement of the page kind `jsx` that `@objectstack/spec` 18 made (objectstack-ai/obj… (objectui `f8267df93`)
10+
- **minor** — The page schemas no longer import or attach `@objectstack/spec`'s page-parse judge of a view-data component's retired `api` binding, which objectstack#23784 removed from the spec… (objectui `15d8ca6da`)
11+
- **minor** — Home: "Recently accessed" brings you back to the records and list views you opened, beside the activity feed (objectui#12604). (objectui `f0e760afe`)
12+
- **minor** — The details grid passes a pointer field's `referenceDeletedWhen` to `resolveRecordPointer` (objectui#12489). (objectui `023087f63`)
13+
- **minor** — The record details grid draws a platform-deleted pointer target as a tombstone in the declared option's label (objectui#12489). (objectui `023087f63`)
14+
- **minor** — `resolveRecordPointer` reads `referenceDeletedWhen`, so a pointer pair can say the platform deleted its target (objectui#12489). (objectui `023087f63`)
15+
- **minor** — The console top bar is 48 px (`h-12`) in every frame, the height both approved console artboards draw (objectui#12639). It was 56 px (`h-14`). (objectui `dcd104102`)
16+
- **minor** — List grids show the record a pointer field names, and the Approvals Inbox says who else is waiting (objectui#12608). (objectui `f78efdd1e`)
17+
- **minor** — Locale keys for the console home's "My work" section (objectui#12602), in all ten packs. (objectui `db8ce2f41`)
18+
- **minor** — The console home's "Needs your attention" card becomes the "My work" section of the approved home artboard (objectui#12602), and the pending-drafts banner above the greeting moves… (objectui `db8ce2f41`)
19+
- **minor** — Resolve `@objectstack/*` `18.0.0-next.2` (objectui#12626). (objectui `f62b6ff4e`)
20+
- **minor** — A kanban under a list view puts every record of the view in its column, not the list's first page, and its cards carry the view's first columns (objectui#12619). (objectui `8614705c1`)
21+
- **minor** — **BREAKING** — `page:header` no longer reads `showStar`, ahead of `@objectstack/spec` 18 retiring the key (objectstack#23650). (objectui `608033b82`)
22+
- **minor** — The console home's top half follows the approved home artboard (objectui#12601): a search field in the top bar, a greeting with a one-line work summary, two compact builder chips,… (objectui `6c4d00da0`)
23+
- **minor** — `DefaultLoginPage` passes the translated names of `LoginForm`'s new password reveal toggle, `auth.login.showPasswordText` and `auth.login.hidePasswordText` (objectui#12600). It ke… (objectui `8ed7e5a8f`)
24+
- **minor** — `LoginForm` gains an optional `hideHeader` prop and a password reveal toggle, and the shared auth form styles take the console login artboard's sizes (objectui#12600). (objectui `8ed7e5a8f`)
25+
- **minor** — The console's login page follows the approved "refined centred" artboard (objectui#12600). (objectui `8ed7e5a8f`)
26+
- **minor** — New `auth.login` strings for the console login page, in all ten language packs (objectui#12600): `welcomeTitle`, `welcomeDescription`, `showPasswordText`, `hidePasswordText`, `foo… (objectui `8ed7e5a8f`)
27+
- **minor** — Every wide centred dialog keeps a 1rem gutter on each side of the window from `sm` (640px) up, by one shared class (objectui#12603). (objectui `726d8c9fc`)
28+
- **minor** — A grouped grid now draws one table with one sticky column header. Each group is a 36 px band row between the rows: a chevron, the group value and its count, in one cell that spans… (objectui `619e3f7a4`)
29+
- **minor** — The Studio's Publish and Changes buttons no longer open the pending-changes sheet the same way. (objectui `92c2a6976`)
30+
- **minor** — **A record dialog with no authored layout opens bounded, and draws two fields per row wherever no `columns` is declared** (objectui#12521). Three defaults of `ModalForm` change. N… (objectui `7b5e55893`)
31+
- **minor** — **BREAKING** — The console's list toolbar no longer has a write into the shared view, and the data-source method that write used is retired (objectui#12504). (objectui `3eb3ec138`)
32+
- **minor** — Studio's Add field asks for the label and type before it creates the field, and the field type picker also searches descriptions (objectui#12516). (objectui `1b3b5b102`)
33+
- **patch** — Action-param and bulk-action dialogs draw `date` and `datetime` params with the platform date picker, the same face record forms draw since objectui#12622 (objectui#12642). (objectui `c6b7d8203`)
34+
- **patch** — The cloud-connection panel's "Not connected" card no longer repeats the page subtitle (objectui#12655). (objectui `efa9cb4fa`)
35+
- **patch** — Record page sections: a collapsible section's header is now a real button named by the section title (objectui#12625). It carries `aria-expanded`, is reachable by Tab, and Enter o… (objectui `4be76e030`)
36+
- **patch** — Studio's permission-set editor no longer offers the two delegated-admin switches that `@objectstack/spec` 18 retired (objectui#12406, the objectui half of objectstack#23488). (objectui `a98a23c78`)
37+
- **patch** — Inside an app, the product mark stays in the top bar as the way home, and the app menu gains Back to home, All apps and Settings (objectui#12605). (objectui `a5bb7ac2f`)
38+
- **patch** — Setup › Packaged automation keeps a flow row to the table's height when the platform says why the flow is not armed (objectui#12609). (objectui `8a8bcf3dd`)
39+
- **patch** — Record forms draw `date` and `datetime` fields with the platform date picker instead of the browser's native date input (objectui#12622). (objectui `ca7a4c316`)
40+
- **patch** — The record header draws one primary action and the rest as secondary buttons (objectui#12617). (objectui `ef71a09f9`)
41+
- **patch** — **`marketplace.installedAdditiveNote` is plain text in all ten packs** (objectui#12610). Each value dropped its leading `<strong>Note:</strong>` markup (in that pack's language);… (objectui `f74638c1b`)
42+
- **patch** — **Installed Apps' kernel note is the tooltip of the Uninstall it qualifies** (objectui#12610). The "kernel API is additive only" note was a paragraph at the foot of the list, show… (objectui `f74638c1b`)
43+
- **patch** — **A settings action row draws its label once, on the button** (objectui#12610). The settings renderer's `action_button` row printed the manifest's `label` as the row label and aga… (objectui `f74638c1b`)
44+
- **patch** — Marketplace cards show the whole app name, and the id keeps its package name (objectui#12616). (objectui `07b063249`)
45+
- **patch** — Studio at a narrow width keeps the words that matter readable (objectui#12611). (objectui `a8560b228`)
46+
- **patch** — The list toolbar's Display menu now closes once a layout is chosen (segmented or dropdown switcher), returning focus to the Display button, as Escape already does; the panel's tog… (objectui `79c199692`)
47+
- **patch** — The Studio's Automations rail orders its object groups the way the package's app presents its objects (objectui#12612). The groups used to follow the alphabet of the object labels… (objectui `0a41305b0`)
48+
- **patch** — Metric tiles keep their title readable in narrow tiles. The title now owns the first line (up to two lines, with an ellipsis on the second), the value never wraps and steps down o… (objectui `63d00da3d`)
49+
- **patch** — The pending-changes sheet no longer lists the package stamp as one of the author's own changes (objectui#12594). Expanding a new object draft showed `_packageId` under "Also chang… (objectui `33fbc861d`)
50+
- **patch** — An `lg` or `xl` `ModalForm` dialog keeps a 1rem gutter on each side of the window from `sm` (640px) up (objectui#12593). (objectui `85e8961f2`)
51+
- **patch** — A boolean cell's read-only checkbox is named by its field (objectui#12584). (objectui `7d0c174ba`)
52+
- **patch** — Studio's way home leads back to the Studio landing, and the two links that leave for Setup say so (objectui#12513). (objectui `f5eec6383`)
53+
- **patch** — **The console's New and Edit dialog on a field-heavy object opens bounded on desktop** (objectui#12521). For an object with twelve or more authorable fields, `@objectstack/spec`'s… (objectui `7b5e55893`)
54+
- **patch** — Studio: the draft status chip sits in the same place in every pillar's item header (objectui#12524). "Unpublished draft" in Data, Automations and Interfaces, and Access's "saved a… (objectui `ae923ece2`)
55+
56+
⚠️ 3 of these carry a breaking change: 3 by the author's own breaking annotation in the changeset body — objectui declares no `major` inside a launch window (`scripts/check-changeset-no-major.mjs`). Each is marked **BREAKING** in the list above — read them before compiling the release record.
57+
58+
**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.
59+
60+
- _(no changeset)_ fix(live-e2e): the backend cold install writes overrides.vitest so npm 10 can install the published graph (objectui#12649) (#12674) (objectui `d66ceea5a`)
61+
- _(no changeset)_ docs(skills): point two published member counts at their declarations instead of numbers (objectui#12588) (#12591) (objectui `8415d9f11`)
62+
- _(no changeset)_ ci: delete the spec-main-shape-gate copy, the spec shape gate runs in objectstack (objectui#12352) (#12596) (objectui `c6a42be39`)
63+
64+
Clause-②: no
65+
66+
<!-- adr-0087: not-required (no-migration-prescription)
67+
This diff moves `.objectui-sha` and the artefacts that travel with it: this console
68+
changeset, the re-recorded `scripts/sdui-manifest.record.json` and the regenerated
69+
`sdui.manifest.json`, and the re-recorded `packages/sdui-parser/objectui-lockstep.json`.
70+
It adds, removes or renames no ObjectStack-authorable key: no Zod shape, no spec
71+
declaration and no stored `sys_metadata` shape moves in it, so `objectstack migrate meta`
72+
has nothing here to rewrite, and this body carries no FROM/TO prescription of its own.
73+
The range carries three objectui changes their authors annotated breaking, and the
74+
digest marked all three. Each is answered against this tree:
75+
(1) objectui#12486 (`f8267df93`), `@object-ui/types`: `PageNodeSchema.kind` drops `jsx`
76+
and the page renderer stops compiling it as `html`. `@objectstack/spec` here already
77+
refuses page `kind: 'jsx'` at parse (`packages/spec/src/ui/page.zod.ts`), so no page
78+
this tree accepts reaches that arm.
79+
(2) objectui#12627 (`608033b82`), `@object-ui/components`: `page:header` stops reading
80+
`showStar`. `@objectstack/spec` here already retires the key; its conversion is the
81+
registered `page.component.page:header.showStar` entry in
82+
`packages/spec/src/conversions/registry.ts`.
83+
(3) objectui#12504 (`3eb3ec138`), `@object-ui/types` and `@object-ui/data-objectstack`:
84+
`DataSource.updateViewConfig` and its capability gate are removed. No package or example
85+
here depends on any `@object-ui/*` package; the name survives in this tree only in two
86+
test comments and one checklist step, none of which calls it.
87+
Scope of the claim, stated rather than implied: it is a claim about THIS diff, not a
88+
per-entry re-measurement of the upstream declared-breaking entries.
89+
-->
90+
91+
objectui range: `daeb77fc84dd...f8267df93aba`

‎.objectui-sha‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
daeb77fc84dd824e74c95b87cdede85afdb248e7
1+
f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56

‎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": "daeb77fc84dd824e74c95b87cdede85afdb248e7",
10-
"revDate": "2026-10-15T23:34:05+00:00",
9+
"rev": "f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56",
10+
"revDate": "2026-10-16T14:03:42+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": "daeb77fc84dd824e74c95b87cdede85afdb248e7",
24+
"recordedAgainstPin": "f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56",
2525
"grammarRegion": {
2626
"file": "packages/sdui-parser/src/parse.ts",
2727
"delimiter": "/* ---------------------- the JS literal subset (#6614) ---------------------- */",

‎scripts/ci/spec-shape-retirements.json‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,20 @@
1919
"message": "Type 'string' is not assignable to type '{ '[REMOVED] Key retired: run `os validate` for its migration.': never; }'."
2020
}
2121
]
22+
},
23+
{
24+
"retired": "nothing retired -- the spec ADDED an optional key: the select option's lifecycle `kind` (`open` | `won` | `lost`, required only under a `stageField`, #23809). objectui's select-option convergence pins assert by design that the converged form and metadata faces gained no key beyond `description` / `default`, so a new spec key reds them (TS2344 `Equal` pins, compiled only by the package's chained test project); the entry is deleted when objectui re-pins the faces",
25+
"objectstack_pr": 23846,
26+
"objectstack_commit": "adad73f71483abf84b470e90367fe8080c44a4e0",
27+
"downstream_card": "objectstack-ai/objectui#12711",
28+
"registered_at": "2026-10-16",
29+
"matches": [
30+
{
31+
"file": "packages/types/src/__tests__/select-option-tier1-convergence-7014.test.ts",
32+
"code": "TS2344",
33+
"message": "Type 'false' does not satisfy the constraint 'true'."
34+
}
35+
]
2236
}
2337
]
2438
}

‎scripts/sdui-manifest.record.json‎

Lines changed: 3 additions & 3 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": "daeb77fc84dd824e74c95b87cdede85afdb248e7",
14+
"objectuiSha": "f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56",
1515
"source": "built-tree",
16-
"modulesRoot": ".cache/objectui-daeb77fc84dd/apps/console",
16+
"modulesRoot": ".cache/objectui-f8267df93aba/apps/console",
1717
"objectuiWorkspaceVersion": "17.7.0",
1818
"generator": "scripts/gen-sdui-manifest-node.mjs",
1919
"generatedAt": "2026-10-16",
20-
"sha256": "370153544e9b8013beb95fd5e8af3eec91f911c2813ba82b216684d71c4a3f17",
20+
"sha256": "beba7d3fe26072b35143cad70fc48891a2ac1eac5264a41cb48953dac3553fa9",
2121
"components": 107
2222
}

‎sdui.manifest.json‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3318,18 +3318,14 @@
33183318
"type": "boolean",
33193319
"description": "Set false for the bare h1 header on non-record pages"
33203320
},
3321-
{
3322-
"name": "showStar",
3323-
"type": "boolean"
3324-
},
33253321
{
33263322
"name": "showCopyId",
33273323
"type": "boolean"
33283324
},
33293325
{
33303326
"name": "maxVisible",
33313327
"type": "number",
3332-
"description": "How many header actions render as inline buttons on desktop before the rest fold into the overflow menu. A positive integer — the contract rejects 0 and fractional values. Two kinds of action are routed to the overflow menu regardless of this budget and never occupy an inline slot: an action whose locations declare record_more without record_header, and any action with component action:menu."
3328+
"description": "How many header actions render as inline buttons on desktop before the rest fold into the overflow menu. A positive integer — the contract rejects 0 and fractional values. Two kinds of action are routed to the overflow menu regardless of this budget and never occupy an inline slot: an action whose locations declare record_more without record_header, and any action with component action:menu. The host's own buttons (the record page's Edit) take no slot and never fold. The first inline action, or the one declaring variant primary, is the one filled primary button; the others are outline buttons."
33333329
},
33343330
{
33353331
"name": "mobileMaxVisible",

0 commit comments

Comments
 (0)