Found while re-measuring the lucide gate's header parenthetical for #5992 (PR #6277). Filed unassigned; out of that card's fence — #5992 changes what the gate judges, this is a renderer repair.
Sub-issue of #5931, which already owns "catalog fixtures declare child icon keys the renderer never reads" for button-group, breadcrumb and command. This adds a fourth container to that set, and it is the one with a materially different answer available.
What was measured
At ef2a3bd8d, every untyped node carrying a string icon in the schema catalog was enumerated and grouped by its nearest typed ancestor, then each container's renderer was read to see what it does with the key:
| container | names | what the renderer does with icon |
|---|
dropdown-menu | 3 | resolveIcon(item.icon) — repaired by #5930 |
context-menu | 4 | never reads icon |
button-group | 8 | never reads button.icon (#5931) |
breadcrumb | 3 | never reads icon (#5931) |
command | 9 | never reads icon (#5931) |
timeline | 4 | raw text, <span>{item.icon}</span> — the authored names are emoji, so this is arguably correct as-is |
tree-view | 30 | a two-valued literal switch, node.icon === 'folder' — never a name lookup |
packages/components/src/renderers/overlay/context-menu.tsx has no reference to icon at all. Its renderContextMenuItems is line-for-line the shape dropdown-menu.tsx had before #5930, including the same submenu recursion:
if(item.type==='separator')return<ContextMenuSeparatorkey={i}/>;if(item.type==='label')return<ContextMenuLabelkey={i}>{item.label}</ContextMenuLabel>;if(item.children){…<ContextMenuSubTriggerinset={item.inset}>{item.label}</ContextMenuSubTrigger> … }return(<ContextMenuItemkey={i}…>{item.label}{item.shortcut&&<ContextMenuShortcut>{item.shortcut}</ContextMenuShortcut>}</ContextMenuItem>);The four authored names live in examples/schema-catalog/src/schemas/components-overlay-context-menu/basic-context-menu.json — copy, scissors, clipboard, trash. All four are live icons keys today, so nothing renders wrong; they simply render nothing.
Why this one is different from #5931's other three
For button-group/breadcrumb/command the open question is whether the key should exist at all. For context-menu it is not open: its twin was answered three weeks ago. #5930 decided the shape (route through resolveIcon, i.e. the RECORD surface; LazyIcon explicitly ruled out because it degrades an unknown name to the Database glyph, trading a no-icon failure for a wrong-icon one) and decided that repairing only the leaf arm and not the submenu-trigger arm would be a narrower version of the same bug. A context-menu repair is that diff again, in a file next door.
Note on what will and will not catch it
#5992/PR #6277 makes the gate judge icon names on untyped child items of a container that declares it reads them. context-menu will correctly not declare that while its renderer does not read the key — so the gate stays silent here by construction, and correctly so. When this card is repaired, the census entry should be added in the same PR: one line, 'context-menu': { paths: [], descendants: true, min: 1, resolver: … }, and the fixture's four names come under judgement.
References
Generated by Claude Code
Found while re-measuring the lucide gate's header parenthetical for #5992 (PR #6277). Filed unassigned; out of that card's fence — #5992 changes what the gate judges, this is a renderer repair.
Sub-issue of #5931, which already owns "catalog fixtures declare child
iconkeys the renderer never reads" forbutton-group,breadcrumbandcommand. This adds a fourth container to that set, and it is the one with a materially different answer available.What was measured
At
ef2a3bd8d, every untyped node carrying a stringiconin the schema catalog was enumerated and grouped by its nearest typed ancestor, then each container's renderer was read to see what it does with the key:icondropdown-menuresolveIcon(item.icon)— repaired by #5930context-menuiconbutton-groupbutton.icon(#5931)breadcrumbicon(#5931)commandicon(#5931)timeline<span>{item.icon}</span>— the authored names are emoji, so this is arguably correct as-istree-viewnode.icon === 'folder'— never a name lookuppackages/components/src/renderers/overlay/context-menu.tsxhas no reference toiconat all. ItsrenderContextMenuItemsis line-for-line the shapedropdown-menu.tsxhad before #5930, including the same submenu recursion:The four authored names live in
examples/schema-catalog/src/schemas/components-overlay-context-menu/basic-context-menu.json—copy,scissors,clipboard,trash. All four are liveiconskeys today, so nothing renders wrong; they simply render nothing.Why this one is different from #5931's other three
For
button-group/breadcrumb/commandthe open question is whether the key should exist at all. Forcontext-menuit is not open: its twin was answered three weeks ago. #5930 decided the shape (route throughresolveIcon, i.e. the RECORD surface;LazyIconexplicitly ruled out because it degrades an unknown name to theDatabaseglyph, trading a no-icon failure for a wrong-icon one) and decided that repairing only the leaf arm and not the submenu-trigger arm would be a narrower version of the same bug. Acontext-menurepair is that diff again, in a file next door.Note on what will and will not catch it
#5992/PR #6277 makes the gate judge icon names on untyped child items of a container that declares it reads them.
context-menuwill correctly not declare that while its renderer does not read the key — so the gate stays silent here by construction, and correctly so. When this card is repaired, the census entry should be added in the same PR: one line,'context-menu': { paths: [], descendants: true, min: 1, resolver: … }, and the fixture's four names come under judgement.References
packages/components/src/renderers/overlay/context-menu.tsx— the rendererpackages/components/src/renderers/overlay/dropdown-menu.tsx— the repaired twinexamples/schema-catalog/src/schemas/components-overlay-context-menu/basic-context-menu.json— the four namesui:dropdown-menurenders an item's authorediconas raw TEXT — the catalog fixture named with-icons.json draws the words "edit", "copy", "trash" beside its labels #5930 — the twin's repair, and the resolver-surface decision it recordsiconkeys that button-group, breadcrumb and command never read — two of them are named with-icons.json and render none #5931 — the parent classGenerated by Claude Code