Skip to content

docs(layout): page-header.mdx's PageHeaderProps key list omits two live keys (maxVisible, mobileMaxVisible) #6083

Description

@yinlianghui

Found while fixing #5923 (PR #6082), which corrected the guide's copy of this list. Not fixed there — that card's dispatch scoped the file surface to content/docs/guide/layout.md and nothing else. Filed unassigned for triage.

The claim

content/docs/layout/page-header.mdx:66-68:

subtitle is the canonical key: @objectstack/spec/ui's PageHeaderProps — the contract for the authored page:header node — declares title / subtitle / breadcrumb / actions / recordChrome / showStar / showCopyId / aria and has no description.

That is 8 keys. The shape declares 10 live ones.

Measurement

Against the installed @objectstack/spec17.2.0, walking the zod shape's declared keys (not a safeParse output-key list, which omits optional keys that carry no default):

DECLARED KEY COUNT: 11
["title","subtitle","icon","breadcrumb","actions","recordChrome",
"showStar","showCopyId","maxVisible","mobileMaxVisible","aria"]
icon optional -> never <-- ADR-0087 D2 tombstone, correctly excluded by this page
maxVisible optional -> number <-- not in the page's list
mobileMaxVisible optional -> number <-- not in the page's list

Both missing keys are live and authorable, and carry their own describe() text in the shape:

  • maxVisible — "How many header actions render as inline buttons before the rest fold into the overflow menu (renderer default 3)."
  • mobileMaxVisible — "The maxVisible budget on mobile viewports (renderer default 1)."

Confirmed accepted: safeParse of an object carrying all ten live keys returns success, with maxVisible and mobileMaxVisible present in the output.

Severity note

Lower-impact than #5923's defect: this page's list omits two keys rather than naming a retired one, so an author following it writes nothing that gets rejected — they just never learn that the header's action-overflow budget is authorable. The page is otherwise accurate, and its handling of the icon spec-tombstone-vs-component-prop split is the clearest treatment of that distinction in the docs tree.

Why no gate caught it

Same structural reason as #5923: the claim is prose, not a code fence, so check-doc-component-types (type literals in code blocks) and check-doc-snippet-types (ts/tsx fence compilation, TS_FENCE_LANGUAGES = ["ts","tsx","typescript"]) are both blind to it. Unlike the guide page, content/docs/layout/page-header.mdx is not in UNGATED_DOCS either — it is covered at document level and still fence-blind to prose.

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatched

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions