Commit d4f5232
* feat(spec)!: retire the `type: 'page'` list-view mount and its `pageName` binding
A list view could declare `type: 'page'` and name a published page in
`pageName`, delegating its whole rendering to the page renderer. Only the
spec half of that was ever built (#13216 direction 1, PR #13372). No
renderer ever routed the member — objectui's list-view switch shares its
`default:` arm with `case 'grid'`, and `isListViewVisualization('page')`
is false — so a page view drew an empty table where the page belonged,
and the three parse refusals policing the binding (`checkListViewPageMount`)
policed a mount that never mounted anything.
ADR-0049 enforce-or-remove; maintainer ruling 2026-09-09, decision batch
#107 item 1.
- `pageName` becomes a `retiredKey()` tombstone on both list-view doors.
- `'page'` leaves the `type` enum; the enum's own error map carries the
prescription, keyed on `issue.input` (the `exportOptions` 'pdf'
precedent — an enum-VALUE narrowing has no tombstone to hang one on).
- `checkListViewPageMount`, its three refusal messages, the
`validateCrossReferences` page branch, `@objectstack/lint`'s
`validateViewPageRefs` / `VIEW_PAGE_UNRESOLVED`, and `view.form.ts`'s
`page` section are removed with the mount.
- `RuntimeStackContext.pages` and the `page` row of
`CLOSURE_CONTEXT_KEY_BY_TYPE` leave with the only crossed rule that
read them: a view publish no longer gathers a live page universe.
- ADR-0087: D2 conversion `view-page-mount-removed` (protocol 18) strips
both keys from stored rows and `os migrate meta --from 17` output;
`type` is stripped rather than rewritten, since the schema defaults it
to `grid` — exactly what the row already rendered.
The surviving page mount is the app navigation item
(`PageNavItem.pageName`), untouched.
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
Co-authored-by: Claude <noreply@anthropic.com>
* chore(i18n): regenerate metadata-form bundles after the page-mount retirement
`view.form.ts`'s `page` section and its `pageName` input are gone (#17063), so
the extracted metadata-form labels drop with them: the `page` section
label/description and the `pageName` label/helpText, across en/es-ES/ja-JP/zh-CN
plus the three source-hash bundles. Pure deletion — merge mode adds and
translates, it does not remove, so this is `check-i18n-bundles.mjs --write`
rewriting the default locale from source and dropping the orphaned keys.
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
Co-authored-by: Claude <noreply@anthropic.com>
* chore(spec): regenerate the two os-regen artifacts the merge driver dropped
`packages/spec/api-surface/ui.json` and `packages/spec/export-origins/ui.json`
are routed to `merge=os-regen`, and both sides of the merge had edited them, so
the driver merged them with exit 0 while keeping one side. The dropped side was
main's: #17257 added four `*Parsed` type exports on the `ui` entry point
(`ElementDataSourceParsed`, `ObjectCalendarPropsParsed`,
`ObjectKanbanPropsParsed`, `ObjectMetricPropsParsed`), and the merge commit's
copy of both artifacts carried none of them.
Regenerated from the committed merge — `pnpm --filter @objectstack/spec build`
then the gen chain — so the content is re-derived from the merged source rather
than hand-reconciled. Both files gain exactly those four rows and nothing else;
every other generated artifact this branch touches (migration registry,
authorable surface, spec-changes, upgrade guide, liveness counts, react-blocks,
the reference docs) regenerated byte-identical to the merged tree.
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
Co-authored-by: Claude <noreply@anthropic.com>
* chore(spec): regenerate view.mdx on the merged tree and repair a renamed test helper
Discharges the os-regen deferral recorded by the merge commit.
content/docs/references/ui/view.mdx — re-derived with `gen:docs` from the merged
sources on a known-good base, rather than accepting what the merge driver left.
The driver had exited 0 while keeping the branch's blob verbatim and silently
dropping main's side; the merge commit took main's side per
`scripts/pm/os-regen-merge.sh` step 2, and this regeneration re-derives the
retirement's own rows on top. Both sides are present in the result.
packages/spec/src/ui/view.test.ts — main added a third `describe.each` site using
`viewDoorsCarryingPageMountCheck`, which this branch had renamed to
`viewDoorsCarryingObjectLevelChecks`. Both edits merged without a textual
conflict and left a dangling identifier; the rename is propagated to main's new
block. No behaviour change on either side.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent bc2bf01 commit d4f5232
48 files changed
Lines changed: 720 additions & 1032 deletions
File tree
- .changeset
- content/docs/references
- api
- data
- system
- ui
- packages
- lint/src
- metadata-protocol/src
- platform-objects/src/apps/translations
- spec
- api-surface
- authorable-surface
- export-origins
- liveness
- src
- conversions
- kernel
- migrations
- entries/retired-keys
- ui
- skills/objectstack-ui
- references
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| 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 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
808 | 808 | | |
809 | 809 | | |
810 | 810 | | |
811 | | - | |
| 811 | + | |
812 | 812 | | |
813 | 813 | | |
814 | 814 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1609 | 1609 | | |
1610 | 1610 | | |
1611 | 1611 | | |
1612 | | - | |
| 1612 | + | |
1613 | 1613 | | |
1614 | | - | |
| 1614 | + | |
1615 | 1615 | | |
1616 | 1616 | | |
1617 | 1617 | | |
| |||
1628 | 1628 | | |
1629 | 1629 | | |
1630 | 1630 | | |
1631 | | - | |
| 1631 | + | |
1632 | 1632 | | |
1633 | 1633 | | |
1634 | 1634 | | |
| |||
1648 | 1648 | | |
1649 | 1649 | | |
1650 | 1650 | | |
1651 | | - | |
| 1651 | + | |
1652 | 1652 | | |
1653 | 1653 | | |
1654 | 1654 | | |
| |||
1713 | 1713 | | |
1714 | 1714 | | |
1715 | 1715 | | |
1716 | | - | |
| 1716 | + | |
1717 | 1717 | | |
1718 | 1718 | | |
1719 | 1719 | | |
| |||
1733 | 1733 | | |
1734 | 1734 | | |
1735 | 1735 | | |
1736 | | - | |
| 1736 | + | |
1737 | 1737 | | |
1738 | 1738 | | |
1739 | 1739 | | |
| |||
0 commit comments