Repository navigation
docs(guide): slotted-pages' "customize only the header" example writes eyebrow and icon on a page:header, which the contract refuses #11165
Description
Activity
objectstack-fleet commented
on Sep 30, 2026 ContributorAuthorMore actionsTriage: first grade —
documentation·priority:p3·domain:devx·pm:queue. Direction: the "customize only the header" example keeps only keysPageHeaderPropsaccepts, and a docs-snippet pin validates that nodeTriage: lands in
content/docs/guide/slotted-pages.md⇒domain:devx(docs).Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-30T02:56Z. ⛔ Not a claim, ⛔ not a dispatch.Why p3. A published example that teaches a refused node is a product defect (NORTH-STAR 4), and AI authors transcribe examples. But the failure is loud: the node is refused at validation, naming both keys. Nothing is stored wrong.
Direction.
-
The example.
AccountDetailPage'sslots.headerdrops:eyebrow(not aPageHeaderPropskey);icon(tombstoned, ADR-0087 D2);breadcrumb, which triage ruled RETIRE on objectui#11166 (spec half spec(ui): retirePageHeaderProps.breadcrumb("Show breadcrumb", default true) — no renderer draws a trail and the console shell already draws one; the spec half of objectui#11166 objectstack#20758).
It points readers to
content/docs/layout/page-header.mdxfor the prop reference. -
The pin. The example's header node passes
safeValidateSchemaand the spec row's full parse. The old node is refused oneyebrowandicon(the control). The existing docs-snippet tests are its home if one reads this page; otherwise one pin beside them.- ⛔ No new gate: a pin on this example, not a sweep of every fence.
-
Serial. None.
page-header.mdxis objectui#11166's file, not this card's.
-
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repoand removed
on Sep 30, 2026 objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsClaim: PM loop,
domain:devxlane queue (R5 ofdomain:devxseat 2, marker5912527248). The slot was freed by objectui#11070 round 6 reporting, under the maintainer's concurrency order 「并发保持3」.
Session:session_01TdiauJaVCHuj45EzZGUxHh
Account:huangyiirene
Branch:claude/issue-11165-slotted-pages-header-example
Worktree:objectui-issue-11165
Domain:domain:devx
Seat:domain:devx#2(objectui#10917)
File surface:content/docs/guide/slotted-pages.md: the "customize only the header" example keeps only keysPageHeaderPropsaccepts.eyebrowand the tombstonedicongo, and the example points atcontent/docs/layout/page-header.mdxfor the prop reference.- One pin, in the existing docs-snippet test home: the example's header node passes
safeValidateSchemaand the spec row's full parse. Its control is the old node, refused oneyebrowandicon. - Excluded ⛔:
- the
breadcrumbseam card filed alongside it (the example'sbreadcrumb: truestays as it is); page-header.mdxitself;- any renderer change.
- the
- Stop on breach; explain in the report.
Container & model:S,mode:subagent, model: opus (TIER_DEFAULT; docs-only surface).content/docs/**is a review face, so an at-tier record on the landing head is owed.
Clause-②: no. A docs example correction; no contract or accept set moves.
Thread-read: 5903161241
Serial constraints cleared: 2026-10-01T05:24Z, against objectuiorigin/main5262f7d, over the 11 open PRs. None touchesslotted-pages.mdorpage-header.mdx; PR docs: taught action:* nodes move their executor keys into the specpropertiesbag (objectui#11183) #11317's guide edits are other pages. The other in-flight work is file-disjoint: objectui#11101, objectui#5867 batch 7 (components/**), PR ci(half-state-patrol): call objectstack's composite action pinned to a sha, with the no-anchor opt-in (objectui#11174) #11332, and PR feat(types,plugin-form,plugin-charts,app-shell)!: dashboard widgets bind a dataset in the catalog and docs; FormulaFieldMetadata takes the spec's expression; three display-pointer readers read displayField alone (objectui#11070, round 6) #11333.
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11165,
"status": "done",
"branch": "claude/issue-11165-slotted-pages-header-example",
"pr": "#11339",
"session": "session_01TdiauJaVCHuj45EzZGUxHh",
"premise_still_valid": true,
"summary": "Draft PR objectui#11339 at head ca770c6 (one commit on base 5262f7d). The commit removeseyebrowand the tombstonediconfrom the slotted-pages 'customize only the header' example. It adds a lead-in pointing at /docs/layout/page-header for the prop list.breadcrumb: truestays, per the Zone 1 ruling. No test read slotted-pages.md, so the one pin is a new file, examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts. It sits beside the nearest docs-example pin for this node, pageheader-with-actions.test.tsx. The pin reads the fence from the page and evaluates it, using the readme-dashboard-examples-spec-valid technique. It asserts that the header node passes safeValidateSchema and that ComponentPropsMap['page:header'] parses its properties in full. Its control is the same node with eyebrow and icon put back, refused by both judges on exactly those two keys. Rest of the page (page:* class): the other three page:header nodes are all clean under safeValidateSchema, PageComponentSchema and the row, so there was nothing else to change. Conflict, stated rather than picked silently: triage comment 5903161241 directed droppingbreadcrumbtoo, but the brief's binding ruling and the claim keep it, so I followed the brief. The brief lists check:doc-snippets and check-doc-snippet-types as two gates. They are one script, scripts/check-doc-snippet-types.mjs. Commit trailers follow AGENTS.md's model-free pair, and the PR footer is the os-dev session-URL form. PR assigned to huangyiirene; no labels written. The path labeler added documentation/examples/tests. No ready, no enqueue. The worktree and its node_modules are removed. CI at the time of this report: 39 check runs, 18 success, 3 skipped, 18 in_progress, 0 red.",
"tests": "Re-measure at base 5262f7d (tsx over packages/types/src, @objectstack/spec 17.5.0): safeValidateSchema(old) refused with [properties.icon: invalid_type, properties: unrecognized_keys [eyebrow]], and the node without the two keys is OK. PageHeaderProps.safeParse(old) refused with [icon: invalid_type, : unrecognized_keys [eyebrow]], and without them it is OK. PageSchema accepts the whole page either way. Pin, under os-verify-lock (slot issue-11165), command: pnpm exec vitest run --maxWorkers=2 examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts. Result: 'Tests 4 passed (4)' at HEAD ca770c6 after the ablation restore, with git diff HEAD empty. Ablation, committed first, through objectstack scripts/ablation-replace.mjs in WRAP mode under the lock. It plantedeyebrow: 'ACCOUNT',beforebreadcrumb: true,in the page fence: anchor x1 to x0, blob 4d1327d81019 to 7c97d87158d5. Result: 'Tests 2 failed | 2 passed (4)'. Mirror leg received ['properties: unrecognized_keys eyebrow'], row leg received [': unrecognized_keys eyebrow'], and the lit and refusal controls stayed green. Restore: blob 4d1327d81019 equals HEAD, git diff HEAD empty. No dist is involved: the pin reads the page with readFileSync. The first attempt was a no-op that the tool refused, because the replacement contained the anchor (anchor 1 to 1). It restored and the test never ran; I re-ran with an indented anchor. Gates at HEAD ca770c6, each exit 0: check-doc-fence-languages --self-test (26 cases) and the scan; check-doc-links ('Links are valid across 17 scan roots'); check-control-bytes; check-doc-component-types; check-doc-example-ids; check-new-cross-file-line-citations (0 new); check-test-path-roots (the new read is classified absolute, not cwd); check-lint-coverage; check-type-check-coverage; check-changeset-presence ('no changeset is owed'; docs and test only; no skip-changeset). Lint, narrowed: eslint --no-inline-config --format json on the 2 changed files. JSON reports 2 entries. The .ts was linted with 0 errors and 0 warnings. The .md is outside eslint's own population ('File ignored because no matching configuration was supplied'). eslint.config.js declares no parserOptions.project or projectService, so there is no type-aware linting and untouched files' verdicts cannot move. Type-check, narrowed: built @object-ui/types under the lock (dist completeness 138 files OK). Then tsc -p on a temp config extending examples/schema-catalog/tsconfig.test.json with include = the new test only: exit 0, and the file is in --listFiles (396 files). NOT MEASURED: check:doc-snippets (scripts/check-doc-snippet-types.mjs). Reason: it needs its 35-package --build-filter closure built, which I did not do under the 3-dev memory order; CI doc-snippet-types.yml runs it. Narrowed instead: the edited fence alone, tsc --strict --moduleResolution bundler against the installed spec, exit 0. The pre-fix fence also exits 0, which confirms the gate is blind to this class. A control with an unknown page key gives TS2353, exit 2. The fence imports only @objectstack/spec/ui, so no objectui dist enters its program. NOT MEASURED: the full @object-ui/example-schema-catalog type-check. Reason: it needs its devDependency closure built; narrowed as above. NOT MEASURED: repo-wide pnpm test and scripts/tests/unit-registry-absence-collision.test.ts for the new unit-project file. Reason: owed to CI; the new file imports only @object-ui/types/zod and @objectstack/spec/ui, neither of which registers a component. NOT MEASURED: ci.yml 'pnpm check' (needs a @object-ui/cli build; no schema file changed). NOT MEASURED: CI verdict, in_progress at report time.",
"mcp_calls": "0 — no MCP GitHub calls",
"api_writes": "3 — each through the fleet-write relay (one POST /repos/objectstack-ai/objectstack/dispatches each): pr_create gives POST /repos/objectstack-ai/objectui/pulls (draft, #11339); label-write --assign gives POST /repos//issues/11339/assignees (read back MATCHES); post-stamped gives POST /repos//issues/11165/comments (this report). Not REST: 2 git pushes (empty branch, commit ca770c6).",
"open_questions": [],
"out_of_scope_findings": [
"class: c · reach: named producer, the docs fence itself: content/docs/guide/slotted-pages.md, section 'Naming a related list's actions', json fence. AI authors transcribe docs examples, the same reach objectui#11165 was filed on. Outside this brief's page:* class (it is a record:* node), so not touched. Evidence at base 5262f7d, @objectstack/spec 17.5.0: the node writes objectName, relationshipField, columns and actions besidetyperather than inproperties. objectui safeValidateSchema accepts it. Spec PageComponentSchema refuses it with ': unrecognized_keys [objectName, relationshipField, columns, actions]'. Placed in a spec Page regions[].components[], PageSchema refuses it with 'regions.0.components.0: unrecognized_keys'. The same node with those keys inpropertiesparses OK under PageSchema. page-header.mdx already teaches the properties position as the judged one for page components. Dedupe words: record:related_list flat props beside type; related list actions json fence; slotted-pages related_list properties bag; unrecognized_keys objectName relationshipField.",
"carrier: objectui#11166 · noted, not filed. The example keepsbreadcrumb: trueper the ruling, though page-header.mdx says it draws nothing. When the spec tombstonesbreadcrumb(objectstack#20758), the new pin's row leg goes red, which hands objectui#11166 the edit of this example.",
"carrier: 承接者:无 · noted in the PR body only. @objectstack/spec PageSchema accepts a component whosepropertiescarry undeclared or tombstoned keys: it does not judgepropertiesbytype. Only the component row and objectui's mirror refuse them. This is already documented in packages/layout page-header-subtitle-conversion-coverage.test.ts; it is an observation, not filed."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsSeat review of the report
5925514342: ACCEPT PR #11339, pending CI and the at-tier record.domain:devxseat 2 (objectui#10917),session_01TdiauJaVCHuj45EzZGUxHh, R5, 2026-10-01T05:45Z.PR #11339 (draft, head
ca770c6, 2 files, +156/−2):- The example:
content/docs/guide/slotted-pages.md's "customize only the header" example dropseyebrowand the tombstonedicon. It gains a lead-in pointing at the Page Header reference.breadcrumb: truestays, per the brief's ruling over the triage direction; the dev stated the conflict rather than picking silently. - The pin:
examples/schema-catalog/test/slotted-pages-header-example-11165.test.tsreads the fence from the page, so it follows the page rather than restating it.- It asserts
safeValidateSchemaand theComponentPropsMap['page:header']row. - Its control is refused on exactly
eyebrowandiconby both judges. - The ablation planted
eyebrowback and went red on both legs, with the controls lit.
- It asserts
- The rest of the page: the other three
page:headernodes are clean under all three judges. - NOT MEASURED, accepted: the dev did not build
check-doc-snippet-types's 35-package closure, under the seat's memory order. CI'sdoc-snippet-typesruns it. The narrowedtsc --stricton the fence is exit 0, and the pre-fix fence is also 0, which confirms that gate is blind to this class.
Out-of-scope findings:
- Already filed: the
record:related_listjson fence on the same page, with props flat besidetype, is objectui#11321 item 1 (domain:ui,pm:queue). No new card. breadcrumb: carried by objectui#11166. When objectstack#20758 tombstones it, this PR's pin goes red and hands that card the edit.PageSchemadoes not judgepropertiesbytype: already documented inpage-header-subtitle-conversion-coverage.test.ts. Noted only.
Landing:
Clause-②: no, butcontent/docs/**is a review face, so an at-tier record is owed. Like every objectui PR right now, this PR waits on the red requiredSpec Main Shape Gate(objectui#11330, objectstackd830d71f). Once that repair lands onmain, this PR mergesmain, then gets its at-tier record, ready, and enqueue.Fixes #11165closes the card.- The example:
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11165,
"status": "done",
"branch": "claude/issue-11165-slotted-pages-header-example",
"pr": "#11339",
"session": "session_01TdiauJaVCHuj45EzZGUxHh",
"premise_still_valid": true,
"summary": "Patch round on PR objectui#11339. New head: 92ad04b, one commit on the seat's update-branch merge 8756b8f. It was a fast-forward push: no force and no rebase. The red came from the 'Test (shard 1/8)' job (110253134142), in scripts/tests/markdown-test-inputs.test.ts. My new pin reads content/docs/guide/slotted-pages.md, and the ADJUDICATED ledger in scripts/markdown-test-inputs.mjs did not list it. Fix: added one ADJUDICATED entry with a one-line reason comment: examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts, with reads: ['content/docs/guide/slotted-pages.md']. It is placed first in the Map, in the ledger's path order. Nothing else changed. The PR body's 'Verification (head ca770c6)' section now reads the earlier head. I did not PATCH it. If the seat wants it current, the only addition is this round's runs at 92ad04b, listed in tests. The worktree was recreated from the remote branch and is removed again. No claim posted. CI at 92ad04b was not read: in_progress at report time.",
"tests": "Control: node scripts/markdown-test-inputs.mjs --audit on the unedited ledger (a temp copy of HEAD 8756b8f's file, deleted afterwards) gives exit 1. Its finding is the CI one: 'unadjudicated-test: examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts reads markdown the ledger does not describe (content/docs/guide/slotted-pages.md)'. With the edit: --audit gives exit 0, '109 candidate test files, all adjudicated; 81 declared entries, all present'. Under os-verify-lock (slot issue-11165) at HEAD 92ad04b: pnpm exec vitest run --maxWorkers=2 scripts/tests/markdown-test-inputs.test.ts scripts/tests/check-pending-changeset-literals.test.ts examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts gives 'Test Files 3 passed (3)', 'Tests 44 passed (44)'. VERDICT command-exit 0. check-pending-changeset-literals is the one other test that imports the script (markdownTestInputsAmong). The other git grep hits name the script only in comments. Gates at 92ad04b, each exit 0: check-control-bytes; check-new-cross-file-line-citations (0 new); check-changeset-presence (none owed); eslint --no-inline-config on scripts/markdown-test-inputs.mjs (0 errors, 0 warnings). NOT MEASURED: CI at 92ad04b. Reason: in_progress at report time; CI convergence belongs to the seat. NOT MEASURED: repo-wide pnpm test. Reason: owed to CI.",
"mcp_calls": "0 — no MCP GitHub calls",
"api_writes": "1 this round, through the fleet-write relay (one POST /repos/objectstack-ai/objectstack/dispatches): post-stamped gives POST /repos//issues/11165/comments (this follow-up report). Not REST: 1 git push (fast-forward 8756b8f to 92ad04b).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsContract review
Served-tier:
CONTRACT_REVIEW_TIER
Head-sha:92ad04bf09ee0b9fa6752999a52395d6545d89c5
Local-runs: noneReviewed from the card (#11165: body and all five comments,
5903161241through5926453403), the PR (#11339: body, file list, the net diff againstmain) and the 40 check-runs on the head. The head is the dev's ledger commit on top of the update-branch merge8756b8fce315(merge base770cc5ba4d15); the net diff is three files, +161/-2, and the two commitsmainhas gained since (#11338,#11351) touch none of them, so the net diff reads the same against the current tip. Check-runs: 37 success, 3 skipped (the two coverage matrix rows anddependabot), 0 failure;Spec Main Shape Gateis green on this head.① Derived judgments
- Accept set: no move, and that is right. The diff touches no schema (nothing under
packages/types/src/zod/**, nothing in@objectstack/spec).PageHeaderPropsalready refused the two keys before this PR:eyebrowis undeclared on astrictObject(unrecognized_keys),iconis an ADR-0087 D2 tombstone (invalid_type). The PR moves the producer (the docs example) to the contract, not the contract to the example, which is the Prime Directive [WIP] Enhance UI components for forms and layouts #12 direction. content/docs/guide/slotted-pages.md: right. The "customize only the header" fence drops exactlyeyebrowandicon;title,subtitleandbreadcrumb: trueremain, all keys the row accepts today. The new lead-in's three claims hold against the page and the measured facts: theheaderslot replacespage:header(the page's own slot menu says so);propertiesarePageHeaderPropskeys; the shape is closed and refuses an undeclared key by name (unrecognized_keys [eyebrow]). The link/docs/layout/page-headerresolves (Internal Docs Link Checkgreen) and the fence still compiles as aPage(Doc Snippet Type Checkgreen; the PR body is right that this gate was blind to the defect before and after, which is why the pin exists). No other fence on the page changed.examples/schema-catalog/test/slotted-pages-header-example-11165.test.ts: right, and lit in CI. It reads the fence off the page under its heading (a missing or moved fence throws rather than skips), evaluates the literal, and asks both judges:safeValidateSchema(the mirrorobjectui validateruns) and the spec rowComponentPropsMap['page:header']in a full parse. The control re-plantseyebrowandiconand pins the refusal to exactly those two keys from both judges, so a judge that stopped judging cannot pass. The lit control pinskind: 'slotted'and apage:headerinslots.header. The read is rooted at the file viaimport.meta.urlat depth 4, which is the file's real depth. The rootvitest.config.mtsunitproject includesexamples/**/*.test.ts, and the head'sTest (shard 3/8)log shows the file ran: 4 tests passed. The@objectstack/spec/uiimport resolves the same way the siblingpageheader-with-actions.test.tsxalready does (root devDependency);LintandType Checkare green on the file. Public surface: none, since@object-ui/example-schema-catalogisprivate: true.scripts/markdown-test-inputs.mjs: right. OneADJUDICATEDentry, the same shape as its siblings ({ reads: [...] }), placed first in path order, declaring the guide page as the pin's input so a markdown-only edit to the page runs the shard instead of skipping it. This is the fix for the one red the previous head took (Test (shard 1/8),markdown-test-inputs.test.ts, an unadjudicated reader); at this head that test ran in shard 1/8 and passed (25 tests). Repo-internal; no public surface.- Public surface: no move. A docs page, a private package's test, a repo script. Nothing exported, nothing in a released package.
- Governed surfaces: none touched (
Governed Surface Queue Guardgreen). The record is owed becausecontent/docs/**is a review face, per the claim.
② Semver level
- Nothing publishes:
content/docs/**andscripts/**are not packages, andexamples/schema-catalogisprivate: true. No changeset is owed: right. The PR carries no changeset and noskip-changesetlabel, andChangeset DeclarationandChangeset Fixed Group Checkare green on exactly that shape. - The PR body's declaration line
Clause-②: nois right: the diff neither widens an accept set nor widens the public surface, and it narrows nothing either, since both keys were refused before it. The claim's ownClause-②: no.matches it (Changeset Claim Re-readgreen). No direction arm: right, because there is no direction to name.
③ Boundary flags
breadcrumb, triage direction against the dispatch ruling (R1 report5925514342, PR body "Acceptance notes"). Triage (5903161241) directed droppingbreadcrumbtoo; the claim (5925313912) excluded the breadcrumb seam card and keptbreadcrumb: true. The dev followed the claim and stated the conflict instead of picking silently. Answered: the claim is the dispatch, and the triage comment says of itself that it is not a claim and not a dispatch. The row acceptsbreadcrumbtoday (the pin's row leg is green on this head), and the pin is the tripwire the PR body names: when objectstack#20758 tombstones the key, the row leg reds and hands objectui#11166 the edit of this example. Not a defect of this PR.- NOT MEASURED locally (R1 report):
check:doc-snippets, the package type-check, repo-widepnpm test,unit-registry-absence-collision,pnpm check. All answered by the head's check-runs:Doc Snippet Type Check,Type Check,Test (shard 1/8)throughTest (shard 8/8),Test (dist pins),Build & E2EandLintare every one success. The dev's note thatcheck:doc-snippetsandcheck-doc-snippet-typesare one script is correct and changes nothing. - Stale verification head in the PR body (R2 report
5926453403). The body's "Verification" section is headedca770c6a, the pre-merge head, and was not PATCHed. Answered: the section is labelled with the head it describes, the R2 report carries the runs at this head, and the check-runs on92ad04bfare the verification of record. Not a landing condition; the seat may refresh the body at its discretion. - CI at the previous head (R2 report). The one red,
Test (shard 1/8)on the unadjudicated reader, is closed by the head commit and green here. open_questions:[]in both reports. Nothing to answer.- Out-of-scope findings. (1) The
record:related_listjson fence on the same page, with its props flat besidetype: carried by objectui#11321 item 1 per the seat review, and outside this PR'spage:*scope. (2)breadcrumb: objectui#11166, above. (3)PageSchemadoes not judge a component'spropertiesby itstype: an observation already pinned inpage-header-subtitle-conversion-coverage.test.ts, noted. None blocks this PR. - Serial. The claim cleared the 11 open PRs against these files; the two commits
mainhas gained since the merge base touch none of them. - Nothing escalated.
Implemented-by:
claude/issue-11165-slotted-pages-header-example
Reviewed-by:session_01TdiauJaVCHuj45EzZGUxHhVERDICT: PASS
Rendered: 2026-10-01T07:32Z, read-only; nothing built, run or re-run.
- Accept set: no move, and that is right. The diff touches no schema (nothing under
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsLanded: PR #11339 merged through the queue as
743181aat 2026-10-01T07:49Z.Fixes #11165closed this card as completed.domain:devxseat 2 (objectui#10917),session_01TdiauJaVCHuj45EzZGUxHh, R5, recorded at 2026-10-01T07:49Z.- Reviewed head = landed head:
- The at-tier contract record
5926865878(PASS,CONTRACT_REVIEW_TIER,Local-runs: none) names92ad04bf09ee0b9fa6752999a52395d6545d89c5. - That head is the dev's
ADJUDICATEDledger fix on top of the seat's update-branch merge ofmain. It cleared the one red,markdown-test-inputs, from the previous head. - Nothing was pushed after the record.
- CI on the head: 40 check-runs, 37 success, 3 skipped.
- The at-tier contract record
- Delivered:
content/docs/guide/slotted-pages.md's "customize only the header" example keeps onlyPageHeaderPropskeys.eyebrowand the tombstonediconare gone, and a lead-in points at the Page Header reference.- The new pin
examples/schema-catalog/test/slotted-pages-header-example-11165.test.tsreads the fence from the page and asks both judges. It has a refusal control and a lit control. - The page is recorded in the
markdown-test-inputsledger.
- Carried elsewhere:
breadcrumb→ objectui#11166. When objectstack#20758 tombstones it, this pin's row leg goes red.- The page's flat
record:related_listfence → objectui#11321 item 1.
- The
pm:dispatchedresidue is stripped in the same act.
- Reviewed head = landed head:
- added a commit that references this issue
on Oct 7, 2026
Filing-gate category: ③ a docs example that teaches a node the contract refuses, class (c).
reach:a named producer, the docs example itself:content/docs/guide/slotted-pages.md, "Example: customize only the header". AI authors transcribe docs examples.safeValidateSchemaon the example's exact node at PR objectui#11162's headc79ae7497. It is refused withproperties.icon: invalid_typeandproperties: unrecognized_keys [eyebrow]. In the control, the same node withouteyebrowandiconvalidates OK.5902367106, ③ out-of-scope (c)) confirmed it real at the head and pre-existing. The spec rowComponentPropsMap['page:header'](PageHeaderProps, astrictObject) declares noeyebrowand tombstonesicon(ADR-0087 D2: removed in@objectstack/spec17.0.0, no renderer ever read it). The fence typespropertiesas an open record, so no snippet gate catches it.Reader: triage first (grade and route), then the seat that dispatches it. Filed by
domain:uiseat 2 (session_011p7ikEivgXefNDaE5S5Uec) at the ACCEPT of PR objectui#11162 (objectui#3906, Phase 2, which taught the canonicalpage:headernode on its own reference page), from the dev report'sout_of_scope_findings[0](5902224540). ⛔ Not graded here.The site (read at objectui
origin/maina8c550938)content/docs/guide/slotted-pages.md, theAccountDetailPageexample,slots.header:Direction (for triage, not a ruling)
PageHeaderPropsaccepts. Dropeyebrowandicon.content/docs/layout/page-header.mdx(rewritten by PR objectui#11162) is the prop reference to point at.breadcrumb: trueis accepted, but today it draws only an empty slot; that is the separate seam card filed with this one. Whether the example keeps it follows that card.safeValidateSchemaand the spec row's full parse. The control is the old node, refused oneyebrowandicon. The existing docs-snippet tests are the natural home, if one reads this page.Dedupe
The 1000 most recently updated objectui issues and PRs (down to #10338) were grepped:
eyebrow,account_header_slottedandcustomize only the header: only PR objectui#11162 (the source).slotted-pages: three closed PRs that cite the page for other claims (objectui#10470 action placement, objectui#10649 refresh, objectui#10870 page kinds).No card covers this.
Generated by Claude Code