Repository navigation
fix(components): a slotted page template draws only the regions it places, and full-width retires (objectui#12476) - #12901
Conversation
…aces, and full-width retires (objectui#12476) The default, header-sidebar-main and three-column templates no longer stack a region they do not place under main; the page shows a refusal naming the region and the template's slots. The template registry is keyed by the spec's PAGE_TEMPLATE_SLOTS and drops full-width; an unregistered template draws a refusal instead of the pageType layout. dashboard keeps its open grid; the pageType dispatch is unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KduCFcSEActo1Znrb6DLqw
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KduCFcSEActo1Znrb6DLqw
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: Read against the card #12476 (body and all six comments), the ruling objectstack#23610 comment 6190536588 (items 2 and 5), the PR body, the net diff from merge-base ① Derived judgments
② Semver level
③ Boundary flags
To pass on the next head:
The residuals above do not block. A new head needs a new record. Implemented-by: VERDICT: FAIL |
…ge-template-slots
…rect prose the full-width retirement made false (objectui#12476) @object-ui/components reads PAGE_TEMPLATE_SLOTS, which the spec carries from 18.0.0-next.2. The pending 23610 changeset, the buildDefaultPageSchema seed comment, the PageNodeSchema.template docblock and the zod mirror's placement comment no longer name FullWidthTemplate or the stack under main. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KduCFcSEActo1Znrb6DLqw
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: Read against card #12476 (its body and all six comments), the ruling on objectstack#23610 (comment 6190536588, items 2 and 5), the PR body, file list and comments (the earlier record 6236121598 on What moved since ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS |
席位核对 · ACCEPT ·
|
Fixes #12476
Clause-②: no (narrowing)
What changes
packages/components/src/renderers/layout/page.tsx, against@objectstack/spec18.0.0-next.3 (PAGE_TEMPLATE_SLOTS,checkPageRegionPlacement):default,header-sidebar-mainandthree-column, a region the template does not place is no longer stacked undermain. It is drawn nowhere and never moved into another slot. Where it used to stack, the page shows a refusal (data-page-refusal="unplaced-region") naming the region and the template's slots.full-widthretires.TEMPLATE_REGISTRYis now keyed by the spec'sPageTemplate, so a template the spec adds or retires fails to compile.FullWidthTemplateis renamedDefaultTemplate. A template name the registry does not hold draws a refusal (data-page-refusal="unregistered-template") instead of silently taking the pageType layout.@object-ui/componentsnow reads the spec'sPAGE_TEMPLATE_SLOTS, which@objectstack/spec18.0.0-next.1 does not carry, so its declared range moves from^18.0.0-next.1to^18.0.0-next.2(the lockfile's onespecifierline moves with it; the resolved version stays 18.0.0-next.3)..changeset/23610-record-page-seed-default.mdno longer says the renderer recognisesfull-width: a storedfull-widthrow keeps rendering because the platform rewrites it todefaulton read. Three comments that namedFullWidthTemplateor the old stacking are corrected too.dashboard's open grid; the 12-column block grid in each placed region (objectui#12624); the narrow-region compact list (objectui#12703); the pageType dispatch (no template), which still stacks.Why a visible refusal, not drawing nothing
The spec migration rewrites only
full-widthtodefaulton read. A stored row with an unplaced region is served unchanged, so it does reach the renderer. Drawing nothing would silently lose content. Stacking is the mis-layout the ruling retires. A visible refusal tells the author what to rename.Callers read (H3)
plugin-detailbuildDefaultPageSchema,template: 'default', regionsmainandasideonly) and approval pages: unaffected.full-width.Tests
page-template-slots-12476.test.tsx: 16 tests. 7 pin the refusals, 9 are controls.layout-default-jsdoc-7361row 7 now readsDefaultTemplate(rename only).@object-ui/componentstest: 4036 green.Acceptance notes
PageBlockCanvasaddRegion) writesregion_N, which the save door refuses on adefaultor template-less page. Reported to the seat, not fixed here.default. Left as is per the claim's surface.Provenance: built by the cloud session
session_01KduCFcSEActo1Znrb6DLqw(claim6235363143) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. The seat replaced the dev's footer line with this paragraph. After the first head (572fd84) failed its contract review (6236121598), the dev reworked it tofd893dd, and the seat added the two bullets above on the floor and the corrected changeset (body refreshed 2026-10-17T16:31Z, after the contract reviews6236121598and6236677561); nothing else changed.Generated by Claude Code