Repository navigation
finding(docs,components): layout.md teaches maxWidth and padding: false on a page node, which PageNodeSchema does not declare and the page renderer never reads, so the taught layout control silently does nothing #11318
Description
Activity
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p3·domain:ui·area:devpath·pm:queue. Direction: the guide teaches the container that declaresmaxWidth/padding, not thepagenodeTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T04:38Z. ⛔ Not a claim, ⛔ not a dispatch.Why p3. It is a taught layout control that silently does nothing, refused by the strict face and unread by the page renderer. It is the shape objectui#7926 / objectui#8871 closed for two other keys.
Direction:
content/docs/guide/layout.md(:241,:500,:661,:744) teaches the width and padding controls whereContainerSchemadeclares them. ⛔ No new keys on thepagenode. If the strict face's refusal does not name the keys, it does so with the container prescription. Pin: each corrected snippet passes both faces.
Generated by Claude Code
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Oct 1, 2026 objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01YLg8XqWGJ785fwQ5v4pH37
Account:os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-11318-layout-page-width-padding
Worktree:objectui-issue-11318
Domain:domain:ui
Seat:domain:ui#1
File surface (triage's direction5924850908):content/docs/guide/layout.md: the four sites (at objectuiorigin/main9547063they are:243,:502,:757"maxWidth"and:672"padding": false, moved by PR objectui#11406) teach width and padding whereContainerSchemadeclares them, or throughpageType. ⛔ No new keys on thepagenode.packages/types/src/zod/layout.zod.ts(PageNodeSchema, about:986) only if the strict face's refusal ofmaxWidth/paddingdoes not already name them: then it names them with the container /pageTypeprescription, in the shape objectui#7926 / objectui#8871 set foractions/breadcrumbs. The acceptance result is unchanged.- Pins: each corrected snippet passes both faces; a refusal pin if the message changes. One
.changeset/11318-*.mdonly if a released package changes.
The dev stops on a breach and explains it in the report.
Container & model:S,mode:subagent,model: opus(default judgment tier;dispatch-gates --tier --repo objectstack-ai/objectuiprints "no path-derived mandate" for these paths)
Clause-②: no
Why no: docs move to keys the schema already declares; a refusal that starts naming already-refused keys changes the message, not the accept set.
Thread-read: 5924850908
Serial constraints cleared: read 2026-10-02T00:31Z at objectuiorigin/main9547063.- PR objectui#11406 (seat 2, which also edited
layout.mdandlayout.zod.ts) merged as138ad4554e; this claim works from the merged code. - Open draft PR objectui#11069 edits
content/docs/guide/layout.md(+4 / −3, its un-park census). Ordinary concurrency: whichever lands second mergesmain. - Seat 2's in-flight objectui#10859 batch 7 (claim
5943202824) addspackages/types/src/zod/designer.zod.tsand editsdesigner.tsand the mirror-parity census, ⛔ notlayout.zod.ts. Seat 2's objectui#11402 / console build: emit dist/sdui.manifest.json (the existing sdui-parser gen-manifest) so a host serving the Console can register the manifest it actually serves #11403 areapp-shell/apps/console. This seat's objectui#8894 (plugin-dashboard,plugin-designer) and objectui#11321 (slotted-pages.md,schema-reference.md, the app-shell README,public-blocks.zod.ts) are disjoint.
Scope: the PR says
Fixes #11318.
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11318,
"status": "done",
"branch": "claude/issue-11318-layout-page-width-padding",
"pr": "#11421",
"session": "session_01YLg8XqWGJ785fwQ5v4pH37 (subagent run; the harness Claude-Session line names the parent PM session)",
"premise_still_valid": true,
"summary": "PageNodeSchema now refuses maxWidth and padding by name, with retirementTombstone arms whose messages name pageType and a wrapping container. The TS twin declares both keys ?: never, the objectui#7926 / objectui#8871 shape on the same node. Both faces now answer invalid_type at the key's path with that prescription. Before, the tolerant face kept the keys and the strict face gave a bare unrecognized_keys. content/docs/guide/layout.md corrects the four sites. Content Width (was Max Width Options) uses pageType utility, plus a container with its own maxWidth. Settings Page with Tabs uses pageType utility. Page Padding uses a container with padding 8 and maxWidth false. Best Practices 4 (renamed Constrained Width for Forms) wraps the form in a container with maxWidth 2xl. The Schema API block drops maxWidth, padding and the two inert headerClassName / bodyClassName lines, and gains pageType. A new pin runs each refusal and every page fence of the guide through both faces. Draft PR #11421; CI not awaited.",
"tests": "Final head 0c61074. (1) One vitest run, packages/types/ plus 18 reader and script files: Test Files 341 passed (341), Tests 9065 passed (9065). packages/types alone is 323 files and 8632 tests. The new pin page-width-padding-refusal-11318.test.ts has 28 tests. (2) pnpm --filter @object-ui/types type-check (script name echoed) exits 0, and tsconfig.test.json --listFilesOnly includes the new pin. (3) pnpm --filter @object-ui/types build: dist completeness 142 emitted files verified; dist/layout.d.ts carries maxWidth?: never and padding?: never. Ablations ran via objectstack scripts/ablation-replace.mjs from committed head 92cbe41; no mutated or run file has changed since. Each restore was proven by blob == HEAD and an empty git diff HEAD. (a) Deleting the two zod tombstone lines: anchor 1 to 0, blob 9bfb0977 to 9f67b5a7; 10 failed / 38 passed, all contract-half legs. (b) Re-planting maxWidth lg in the Content Width fence: 3 failed / 25 passed (both faces over the guide, plus the page-key scan). (c) Deleting maxWidth?: never from layout.ts: tsc -p tsconfig.test.json exit 2, TS2578 in the new pin and 2x TS2322 in zod-mirror-parity.test.ts. Direction for all three: red, as predicted. Mechanism measurements on BASE 0858267, through one-time render probes with the real SchemaRenderer (not committed): a page with maxWidth lg draws inner max-w-7xl, identical to the control; padding false keeps the wrapper at p-3 md:p-4 lg:p-6; headerClassName and bodyClassName values appear nowhere in the DOM. pageType utility gives max-w-4xl, app max-w-screen-xl, home max-w-screen-2xl, default record max-w-7xl. Compiled Tailwind 4.3.3 puts max-w-7xl and max-w-screen-xl both at 80rem. Census: 24 JSON page objects and 193 TS/TSX/JS page literals (title/pageType matcher control: 28 hits). The only page objects carrying either key were the four guide fences.",
"gates": [
"pnpm exec vitest run packages/types/ + 18 files (lock) → VERDICT command-exit 0; Test Files 341 passed (341), Tests 9065 passed (9065)",
"pnpm --filter @object-ui/types type-check (lock) → VERDICT command-exit 0",
"pnpm --filter @object-ui/types build (lock) → VERDICT command-exit 0; dist completeness: 1 package(s) complete (142 emitted files verified)",
"pnpm check:doc-types → Every documented component type is registered. (exit 0)",
"pnpm check:doc-fences → every TypeScript block in 227 document(s) is fenced ts/tsx/typescript (exit 0)",
"pnpm check:doc-example-ids → 415 real reference(s) all resolve in the catalog registry. (exit 0)",
"pnpm check:doc-snippets → NOT MEASURED: exit 2 PRECONDITION NOT MET (34-package build closure exceeds the foreground cap). Declared narrowing: the gate judges ts/tsx fences only; the diff adds or removes none, and the one it edits is a declared doc-snippet: fragment. CI doc-snippet-types.yml runs it.",
"pnpm check:doc-examples → NOT MEASURED: exit 2, same build precondition. Declared narrowing: the gate judges JSDoc @example blocks; the diff adds none.",
"node scripts/check-doc-links.mjs → Links are valid across 17 scan roots. (exit 0)",
"node scripts/check-doc-expression-carriage.mjs → exit 0 (report-only census)",
"pnpm check:control-bytes → check-control-bytes: OK (scanned 9936 tracked text file(s); skipped 85 binary).",
"pnpm check:new-line-citations → VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only → exit 0",
"pnpm check:spec-symbols → exit 0, all three legs green",
"pnpm check:doc-example-readers → OK (exit 0)",
"pnpm check:unreferenced-sources → OK Every shipped source file in every covered package is reachable.",
"pnpm check:pending-changeset-literals → No test source names a pending changeset. (exit 0)",
"pnpm check:changeset-claims → exit 0 (report-only; the pending changesets it lists as naming edited files are not falsified by this diff)",
"node scripts/check-changeset-presence.mjs → 5 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s) (exit 0)",
"node scripts/check-changeset-fixed.mjs / check-changeset-no-major.mjs / check-changeset-overwrite.mjs → all exit 0",
"node scripts/check-test-path-roots.mjs / check-type-check-coverage.mjs / check-lint-coverage.mjs → all exit 0",
"node scripts/markdown-test-inputs.mjs --audit → 111 candidate test files, all adjudicated; 81 declared entries, all present. (it refused the new pin until its ledger row landed)",
"node scripts/check-governed-queue-guard.mjs --test (8 paths) → NOT GOVERNED",
"eslint --format json over 6 changed lintable files → 6 files, 0 errors, 0 warnings. Proven narrowing: print-config gives 116-118 rules for each package file and 0 for scripts/markdown-test-inputs.mjs (outside the linted population); no parserOptions.project / projectService and no fs-reading custom rule, so verdicts on untouched files cannot move",
"downstream type-check sweep ...@object-ui/types → NOT MEASURED, declared to CI; basis: AST census found no page literal writing either key",
"CI on PR #11421 → in_progress (not awaited, per contract)"
],
"line_budget": "n/a (no skills/**)",
"files_changed": [
"content/docs/guide/layout.md",
"packages/types/src/zod/layout.zod.ts",
"packages/types/src/layout.ts",
"packages/types/src/tests/page-width-padding-refusal-11318.test.ts",
"packages/types/src/tests/page-app-dashboard-spec-parity.test.ts",
"packages/layout/src/tests/guide-layout-app-shell-doc.test.ts",
"scripts/markdown-test-inputs.mjs",
".changeset/11318-page-width-padding-refusal.md"
],
"deviations": [
"Toolchain: pnpm install in the fresh worktree was refused under the container's node v22.22.0 (engine-strict=true; jsdom 30.0.1 wants ^22.22.2). I downloaded node v22.22.2 from nodejs.org, checked it against SHASUMS256, unpacked it into scratchpad issue-11318/, and prepended it to PATH for every command. No repo config changed. Other seats in this container will hit the same refusal on a fresh worktree.",
"Files beyond the claim's surface, named in the PR body. (1) page-app-dashboard-spec-parity.test.ts: the Page local ledger row needed maxWidth and padding. (2) scripts/markdown-test-inputs.mjs: its --audit refused the new pin until it had a reader row. (3) packages/layout guide-layout-app-shell-doc.test.ts: a comment only; its scope note said the page Schema API declares headerClassName / bodyClassName, which this PR made false.",
"In-place fix under the bounded exemption (all four conditions hold): the Schema API block's headerClassName? / bodyClassName? lines are removed from the guide only. The render probe drew neither value anywhere, those lines were the tree's only teaching site, and no schema change was made.",
"Clause-② staysnoon PR line 3, as the claim says. But the claim's reason ('changes the message, not the accept set') holds only for the strict face. On the tolerant face (safeValidateSchema, what objectui validate runs) this PR narrows the accept set. The PR body states this. Narrowing is not widening.",
"The changeset is @object-ui/types minor, breaking-for-authors wording, in the objectui#11363 shape. It lists only @object-ui/types; the layout change is a test comment, and the fixed group bumps all packages together.",
"git push ran 4 times on this branch: the empty-branch probe plus 3 commit pushes. No force push."
],
"mcp_calls": "0",
"api_writes": "3 REST writes, each through the fleet-write relay (each one POST /repos/objectstack-ai/objectstack/dispatches, HTTP 204, executed as objectstack-fleet[bot]): (1) pr_create → POST /repos/objectstack-ai/objectui/pulls (draft; read-back 12688 bytes sent = stored); (2) label-write --assign os-elon-musk → POST /repos//issues/11421/assignees (read-back matches; labels untouched); (3) post-stamped os-dev-report → POST /repos//issues/11318/comments. Reads were unauthenticated REST GETs and raw.githubusercontent.",
"open_questions": [],
"out_of_scope_findings": [
"class: c · reach: real SchemaRenderer render of layout.md Page Component › Basic Usage fence verbatim (title + description, no pageType) → DOM text is only the child's, no heading, no description; the same fence with pageType utility draws both · producer: content/docs/guide/layout.md, four passages (Basic Usage, With Action Buttons, Detail Page with Actions, Best Practices 3) · cause: a page with no pageType defaults to record, whose PageRenderer leaves the h1 to a page:header block and suppresses description · dedupe:page title no pageType heading not drawn·layout.md Basic Usage title description missing·record page headerOwnsTitle·PageRenderer showPageTitle record",
"class: c · reach: safeValidateSchema (objectui validate) and the strict face both accept { type: container, padding: 9 } and padding 20; the real renderer draws w-full max-w-xl mx-auto with no padding class at all, not even the default · producer: authors following ContainerSchema.padding (bare z.number()) and the container registration inputs (type number) · dedupe:container padding closed set z.number·ContainerSchema padding 9 no class·container padding renderer map silent",
"carrier: 承接者:无 · noted, not filed — headerClassName / bodyClassName on a page node still pass the tolerant face silently (strict: bare unrecognized_keys). Zero teaching sites remain after this PR and zero authored sites exist (git grep), so a named refusal has no pull; recorded in the PR Acceptance notes only."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actions✅ ACCEPT: PR objectui#11421 at
0c6107411a(Fixes #11318); ready and auto-merge follow once CI is green on this headdomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T01:16Z. Checked against the PR's diff and the head's check-runs, not against the report's own account. Claim5943320845; dev report5943729479(done).item reading triage's direction 5924850908the four layout.mdsites now teach width throughpageTypeor acontainerwith its ownmaxWidth, and padding through acontainer'spadding; ⛔ no new key on thepagenode.PageNodeSchemarefusesmaxWidth/paddingby name (retirementTombstone,invalid_typeat the key's path) with a message namingpageTypeand the wrapping container; the TS twin declares both?: never. Theactions/breadcrumbsshape (objectui#7926 / objectui#8871) on the same nodeacceptance change the claim expected only the message to move; the dev measured the tolerant face KEEPING both keys, so safeValidateSchemanarrows from accept to a named refusal. Accepted: both keys were inert (measured:maxWidth: 'lg'drew the samemax-w-7xl,padding: falsekeptp-3 md:p-4 lg:p-6), the census found no page object carrying either outside the four guide fences, and it is a narrowing, soClause-②: noholds. The changeset isminorwith breaking-for-authors wording and a migration line, the repo's shape for a breakdocs, sentence by sentence " utilityis the narrowest …homeis the widest;getPageMaxWidthholds the mapping" matches the dev's measured classes; "atitleon a page with nopageTypedraws no heading" matches its render probe; the padding section's "p-3, thenmd:p-4, thenlg:p-6" matches the measurement; "padding: 8" and "maxWidth: false" are valuescontainer.tsxmaps (seat re-read:padding === 8,false→max-w-none); "0means none" matchespadding === 0 && 'p-0'changeset, sentence by sentence " PageRenderernever read them … wrapper padding is fixed" and "parsed clean and rendered exactly as it would without them" are the dev's measured base; the migration example uses mapped container valuespins / ablation one new pin (28 cases) runs each refusal and every page fence of the guide through both faces; three ablations (zod tombstones, a re-planted guide key, the TS twin) each went red as predicted and were restored to HEADscope / governed 8 files, +502 / −32; page-app-dashboard-spec-parity.test.ts,markdown-test-inputs.mjsand one test comment inpackages/layoutadded beyond the claim, each required by a named rule; the guide's inertheaderClassName/bodyClassNamelines removed under the bounded in-place exemption.check-governed-queue-guard --test: NOT GOVERNEDCI on 0c6107411a42 runs: 29 success, 3 skipped by design, 10 in progress, 0 failed ⇒ landing waits for this head Out-of-scope findings, one line each: four guide passages set
title/descriptionwith nopageType, so nothing draws → filed objectui#11423 ·ContainerSchema.paddingaccepts any number while the renderer maps twelve → filed objectui#11424 ·headerClassName/bodyClassNamestill pass the tolerant face on a page node → Acceptance notes (no teaching or authored site remains; no pull).Deviations accepted, one noted for the fleet: the dev did not override
engine-strict; it fetched node v22.22.2 from nodejs.org, checked it againstSHASUMS256, and used it from its scratchpad, with no repo config changed. The other devs this round installed with--config.engine-strict=false. Either leaves the tree untouched; the container's node v22.22.0 sits belowjsdom@30's floor, which every fresh worktree here will meet.
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsDequeued: PR objectui#11421 left the merge queue on
MERGE_CONFLICT; the same dev mergesmainand the seat re-queuesdomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T01:38Z. Claim5943320845and ACCEPT5943771765stand; the card stayspm:dispatched.- Signature:
github-merge-queue[bot]removed the PR with reasonMERGE_CONFLICTat 2026-10-02T01:37Z, right after PR objectui#11420 (objectui#11321) merged ase0a9c6760a. - Reading:
git merge-treeoforigin/mainwith the branch conflicts inscripts/markdown-test-inputs.mjsonly: both PRs add a reader row to that ledger. Not a test failure and not a flake. - Remedy: the original dev merges
origin/maininto the branch (a merge commit, keeping both rows) and re-runs the ledger audit and the touched tests; the seat re-reads the new head against this ACCEPT (only the merge's own hunks may differ) before it goes back into the queue.
Generated by Claude Code
- Signature:
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11318,
"status": "done",
"round": "landing fix: merge-queue MERGE_CONFLICT after objectui#11420 landed",
"branch": "claude/issue-11318-layout-page-width-padding",
"pr": "#11421",
"head": "051614f14 (merge commit; parents 0c61074 = previous PR head, e0a9c67 = origin/main, which still points there at push time)",
"session": "session_01YLg8XqWGJ785fwQ5v4pH37 (subagent run; the harness Claude-Session line names the parent PM session)",
"premise_still_valid": true,
"summary": "In a fresh worktree from the remote branch (0c61074, unchanged since the first report), I ran git fetch origin main and git merge origin/main, creating a merge commit; there was no rebase and no force-push. The only conflict was scripts/markdown-test-inputs.mjs, where both PRs had added an ADJUDICATED reader row at the same place. I kept both rows, in the ledger's path order: page-width-padding-refusal-11318.test.ts, then public-block-doc-examples-bag-11321.test.ts. Conflict markers: 0 left; node --check on the file passes. No other merged-in file overlaps this PR's files. The push was a fast-forward, 0c61074..051614f.",
"tests": "On head 051614f: node scripts/markdown-test-inputs.mjs --audit reports 112 candidate test files, all adjudicated, and all 81 declared entries present (exit 0). vitest: the new pin page-width-padding-refusal-11318, page-app-dashboard-spec-parity, page-breadcrumbs-refusal-8871, page-actions-refusal-7926, zod-mirror-parity, public-block-doc-examples-bag-11321 and scripts/tests/markdown-test-inputs.test.ts gave Test Files 7 passed (7), Tests 162 passed (162). page-body-arity-8310, page-nav-misc-spec-parity, page-node-type-contract and base-schema-zod-mirror-parity gave Test Files 4 passed (4), Tests 70 passed (70).",
"gates": [
"node scripts/markdown-test-inputs.mjs --audit → 112 candidate test files, all adjudicated; 81 declared entries, all present. (exit 0)",
"vitest 7 files: new pin + page / mirror parity + 11321 doc-examples pin + markdown-test-inputs suite (lock) → VERDICT command-exit 0; Test Files 7 passed (7), Tests 162 passed (162)",
"vitest 4 files: remaining page-* and base-schema mirror parity pins (lock) → VERDICT command-exit 0; Test Files 4 passed (4), Tests 70 passed (70)",
"node scripts/check-control-bytes.mjs → check-control-bytes: OK (scanned 9945 tracked text file(s); skipped 85 binary).",
"node scripts/check-changeset-presence.mjs → 5 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s) (exit 0)",
"node scripts/check-changeset-overwrite.mjs → No pre-existing changeset was modified or deleted. (exit 0)",
"Not re-run on the merge head: the full packages/types suite, type-check, build and the doc gates. The merge's only content change to this PR's files is the second ledger row; the first report's readings at 0c61074 stand for everything else, and CI re-runs them.",
"CI on PR #11421 at 051614f → in_progress (not awaited, per contract)"
],
"line_budget": "n/a (no skills/**)",
"files_changed": [
"scripts/markdown-test-inputs.mjs (conflict resolution in the merge commit; the PR's file set is otherwise unchanged)"
],
"deviations": [
"The merge commit's message was amended before its first push, to add the model-free trailer pair. It was never pushed without it, so no force-push was involved.",
"Toolchain as in the first round: node v22.22.2, SHASUMS256-verified, prepended to PATH, because the container's node v22.22.0 fails the engine-strict install."
],
"mcp_calls": "0",
"api_writes": "1 REST write this round, through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches): post-stamped os-dev-report → POST /repos//issues/11318/comments. Plus one git push (fast-forward).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsACCEPT carries to the merge head
051614f14: the merge withmainadds only objectui#11420's ledger rowdomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T01:50Z. ACCEPT5943771765; dequeue record5943982825; dev follow-up5944068548.051614f14is a merge commit (parents0c6107411, the reviewed head, ande0a9c6760,main); no rebase, no force-push.git diff 0c6107411 051614f14over the PR's 8 paths:scripts/markdown-test-inputs.mjsonly, +13, which is PR objectui#11420's reader row forpublic-block-doc-examples-bag-11321.test.tstaken frommain. This PR's own row and every other file are byte-identical to the reviewed head.git diff origin/main 051614f14still reads 8 files, +502 / −32.- On the merge head the dev ran
markdown-test-inputs.mjs --audit(112 candidates, all adjudicated) and 11 page / mirror / ledger test files (232 passed). It re-queues once CI is green on this head.
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsLanded: PR objectui#11421 merged as
a1a44d6213through the merge queue;pm:dispatchedand the assignee cleareddomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T02:19Z. The claim5943320845is spent; ACCEPT5943771765, carried to the merge head in5944098678.- Verified by content on
origin/main: the squasha1a44d6213's own diff against its parent6cd5ae3eais 8 files, +502 / −32, the PR's file set and counts exactly;packages/types/src/layout.tscarriesmaxWidth?: never. The only difference between the merge head051614f14andmainover the PR's paths is 9 lines inscripts/markdown-test-inputs.mjsthat PR objectui#11409 (seat 2's objectui#11403) added tomainfirst, not this PR's hunk. - Closing keywords: the PR body names
#11318only; the card closedcompletedon the merge, and no other card was closed by it. - Filed at the ACCEPT: objectui#11423 (the guide's page snippets that draw no heading; graded, and next in this lane now that this landed) and objectui#11424 (container
padding; routed to the spec lane).
Generated by Claude Code
- Verified by content on
- added a commit that references this issue
on Oct 7, 2026
Filing-gate category: ① a defect family with named sites, class (c), docs that teach a wrong answer.
reach:a public door. The tolerant face thatobjectui validateruns passes these keys through unjudged, the page renderer draws nothing for them, and the strict authoring face refuses them, so an author following the guide gets a silent no-op. Reader: triage first (grade and route). Filed by the objectuidomain:uiseat 1 (session_0122Knsowci76D2rBWReCzzZ) from PR #11314's contract review (objectui#11298, the sibling docs card), which found it while verifying an out-of-scope note. ⛔ Not graded here.Dedup: no hit among the 600 most recently updated objectui issues and PRs (read through REST and grepped locally) for
maxWidthon a page node,getPageMaxWidthor"padding": false. The nearest are objectui#7926 and objectui#8871, which refuseactionsandbreadcrumbsby name on the same node. This is that shape, for two more keys.The sites (objectui
origin/main)content/docs/guide/layout.md:241,:500and:744teach"maxWidth"on apagenode.:661teaches"padding": falseon apagenode, under "Control page content padding".Why they do nothing (read at source by the review)
maxWidth/paddingareContainerSchemamembers (packages/types/src/zod/layout.zod.tsabout:310–:315).PageNodeSchema(about:835) declares neither.pagerenderer (page.tsx) has no read for either key. Its max-width class comes frompageTypethroughgetPageMaxWidth.unrecognized_keys, so they are also among the fivelayout.mdfences on PR feat(cli):objectui validateandobjectui checkjudge through the strict authoring face (objectui#5250, slice A) #11069's un-park census.Direction (for triage, not a ruling)
actions/breadcrumbs. Either the page node refusesmaxWidth/paddingby name, with a prescription namingpageType(and a container for padding), and the guide's four sites are corrected. Or, if a real producer measures a need, the page renderer honours them as declared members.Dedupe words:
layout.md page maxWidth inert·page padding false not read·PageRenderer getPageMaxWidth pageType·PageNodeSchema maxWidth paddingGenerated by Claude Code