Skip to content

record:details sections: five more renderer-honoured keys remain undeclared by the strict section schema (title / defaultCollapsed / icon / description / headerColor) #11661

Description

@os-warren

While implementing #11289 (which declared hideEmpty / collapsible / showBorder on RecordDetailsProps.sections under the maintainer's 2026-08-23 direction-1 ruling — that ruling names exactly those three keys, so these five are out of that card's scope and are deliberately NOT declared there), measurement of the same render path found five more keys in exactly the pre-#11289 position: honoured at runtime, rejected by the strict section schema, so objectstack validate warns they "did nothing" while they in fact do something.

Measured at the .objectui-sha pin (190fbd01) in objectui packages/plugin-detail:

  • RecordDetailsRenderer (renderers/record-details.tsx) spreads every authored section through to DetailSection ({ ...s, title, showBorder, hideEmpty, fields }), so any authored key reaches it.
  • title — read at record-details.tsx:190 as s.title ?? s.label: an authored title wins over label. A second spelling of the heading slot (the label describe() calls it the declared one), same shape as the retired page:cardbody-vs-children pair — convergence may be the right answer rather than declaration.
  • defaultCollapsed — read at DetailSection.tsx:139 (React.useState(section.defaultCollapsed ?? false)): the initial collapsed state of a collapsible: true section. With collapsible now declared by record:details sections cannot survive an empty record: hideEmpty / collapsible / showBorder are honoured by the renderer but undeclared by the strict section schema #11289, this is the one key of the five an author is most likely to reach for next — a collapsible section that should START folded has no legal spelling.
  • icon — read at DetailSection.tsx:516/546 (section.icon && <SectionIcon …>): renders a heading icon.
  • description — read at DetailSection.tsx:520-521/557-558: renders sub-heading text under the section title.
  • headerColor — read at DetailSection.tsx:513/542 (bg-${section.headerColor}): tints the card header. Note the template-literal Tailwind class is unsafe-by-construction (arbitrary values won't be in the compiled CSS), so "honoured" is only nominally true here — this one may be a renderer bug to fix rather than a key to declare.

Each key needs its own declare-vs-converge-vs-fix judgement (they are not one batch: title is an alias question, headerColor may be dead-in-practice, the middle three look like straightforward declarations), and any accept-set widening on this published face is a maintainer call — which is why this is filed rather than folded into #11289's PR. #11289 remains scoped to its ruled three keys.

Back-link: #11289 (context and the measurement method; NOT resolved here — this issue is additional scope beyond that ruling).


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions