Measured while implementing #4652. Filed unassigned. Duplicate-searched (keyword +
PageAccordionItem + page:accordion + the renderer path): no open issue covers it.
The finding
The identical defect shape as #4632/#4652, in a different component. packages/components/src/renderers/layout/containers.tsx:771-776 declares a local (not exported from @object-ui/types) interface for the page:accordion layout container:
interface PageAccordionItem {
label: any;
icon?: string;
collapsed?: boolean;
children: any[];
}
PageAccordionRenderer (same file, lines ~778-838) reads item.label, item.collapsed and item.value/item.children — never item.icon. Grepping icon across the whole renderer body (ComponentRegistry.register('accordion', PageAccordionRenderer, { namespace: 'page', ... })) returns no read.
This is a different component from the one #4652 fixed: page:accordion (namespace page, a layout container registered separately, isContainer: true) vs. ui:accordion / AccordionSchema.items: AccordionItem[] (namespace ui, the disclosure primitive packages/types/src/disclosure.ts declares). Different file, different interface, different registration — out of #4652's declared file surface, so not folded into that PR under the bounded in-place exemption (AGENTS.md-equivalent dispatch discipline: same defect class, different file/claim).
Impact
Dormant, same shape as the sibling findings: an author who declares icon on a page:accordion panel gets a correctly rendered accordion panel with the icon silently dropped. Nothing goes red.
Unmeasured here: whether any catalog entry, docs page, or example app authors icon on a page:accordion item — that sweep is part of taking this card, and decides enforce-or-remove per the established family framing (#4632/#4652).
Options
Enforce-or-remove, decided by measured pull (the #4632/#4652 ruling's framing):
- Wire
icon — render it alongside item.labelStr in the trigger.
- Retire the declaration if the sweep shows no pull.
Related: #4632, #4652, #4631 (three/four-surface reconciliation instrument — here there is no Zod mirror since PageAccordionItem is a page-container-local interface, not a @object-ui/types export, so this may be a two-surface case: local interface + renderer).
Measured while implementing #4652. Filed unassigned. Duplicate-searched (keyword +
PageAccordionItem+page:accordion+ the renderer path): no open issue covers it.The finding
The identical defect shape as #4632/#4652, in a different component.
packages/components/src/renderers/layout/containers.tsx:771-776declares a local (not exported from@object-ui/types) interface for thepage:accordionlayout container:PageAccordionRenderer(same file, lines ~778-838) readsitem.label,item.collapsedanditem.value/item.children— neveritem.icon. Greppingiconacross the whole renderer body (ComponentRegistry.register('accordion', PageAccordionRenderer, { namespace: 'page', ... })) returns no read.This is a different component from the one #4652 fixed:
page:accordion(namespacepage, a layout container registered separately,isContainer: true) vs.ui:accordion/AccordionSchema.items: AccordionItem[](namespaceui, the disclosure primitivepackages/types/src/disclosure.tsdeclares). Different file, different interface, different registration — out of #4652's declared file surface, so not folded into that PR under the bounded in-place exemption (AGENTS.md-equivalent dispatch discipline: same defect class, different file/claim).Impact
Dormant, same shape as the sibling findings: an author who declares
iconon apage:accordionpanel gets a correctly rendered accordion panel with the icon silently dropped. Nothing goes red.Unmeasured here: whether any catalog entry, docs page, or example app authors
iconon apage:accordionitem — that sweep is part of taking this card, and decides enforce-or-remove per the established family framing (#4632/#4652).Options
Enforce-or-remove, decided by measured pull (the #4632/#4652 ruling's framing):
icon— render it alongsideitem.labelStrin the trigger.Related: #4632, #4652, #4631 (three/four-surface reconciliation instrument — here there is no Zod mirror since
PageAccordionItemis a page-container-local interface, not a@object-ui/typesexport, so this may be a two-surface case: local interface + renderer).