You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while repairing #6278 (ui:context-menu's unread icon). Filed unassigned, out of that card's fence — #6278 is scoped to context-menu and its 裁决 explicitly forbids generalising the fix across containers.
Status (2026-08-28): the blocker #5931 is now in the maintainer's decision inbox (needs-user-decision, assignee cleared), with its four-axis block posted. Its fork — declare / retire / redesign the icon key for button-group — is what decides this card too. ⛔ Still blocked, correctly; nothing to do here until that is ruled.
⚠️ One measurement from #5931's own run is worth carrying, because it kills the obvious answer for at least one container: a proposal to simply strip the key from a component structurally unable to carry an icon was refuted by rendering the fixture — icon-toolbar.json produces 3 buttons with empty textContent and 0 svg, so stripping leaves it rendering nothing at all. Whatever is ruled, "just remove the key" is not automatically safe.
What was measured, at ad54f7587
packages/components/src/renderers/overlay/menubar.tsx contains 0 references to icon (case-insensitive 0 as well).
That is not a shrug about a key nobody declared. MenubarMenu.items is typed as MenuItem[] — the same interface dropdown-menu and context-menu items use, and it declares icon?: string:
So ui:menubar is the third and last member of the MenuItem-shaped family, alongside the two already answered: dropdown-menu (repaired by #5930) and context-menu (repaired by #6278).
Why this one was invisible, and why that is the interesting part
#6278's table was built by enumerating authoredicon strings in the schema catalog and grouping them by nearest typed ancestor. examples/schema-catalog/src/schemas/components-overlay-menubar/application-menubar.json authors zeroicon keys, so menubar could never appear in that table — not because the renderer is fine, but because no fixture exercises the key.
The same blind spot applies downstream: scripts/check-lucide-icon-record-names.mjs has no 'menubar' census entry, and even if one were added, its min non-vacuity precondition would (correctly) fail, because the descent reaches nothing. A gate that judges authored names cannot see a documented key that nothing authors.
That makes this a declared-but-unread key of the #4632 / #4652 / #4721 class, not the "fixture draws the wrong thing" class — the failure is silent in both directions: an author following the published MenubarItem shape gets no glyph and no error, and no gate reports anything.
Whichever way #5931 is decided for its containers probably decides this one too: either MenuItem.icon is honoured everywhere it is typed and documented (route through resolveIcon, the RECORD surface, as #5930 ruled and as #6644 has now done for two more containers), or the key is removed from the surfaces that do not read it. ⛔ This card should follow that answer, not pre-empt it.
Incidentally, the nested-child arm above also renders only one level deep and drops disabled, unlike the sibling renderers' recursion. Noted, not investigated. Per triage, that incidental rides the same fix if the answer is "honour".
Serial note for the eventual claim: #6327 (hold) and #5935 (queued) touch the same file — check the serial queue.
Blocked-by: #5931
Found while repairing #6278 (
ui:context-menu's unreadicon). Filed unassigned, out of that card's fence — #6278 is scoped tocontext-menuand its 裁决 explicitly forbids generalising the fix across containers.What was measured, at
ad54f7587packages/components/src/renderers/overlay/menubar.tsxcontains 0 references toicon(case-insensitive 0 as well).That is not a shrug about a key nobody declared.
MenubarMenu.itemsis typed asMenuItem[]— the same interfacedropdown-menuandcontext-menuitems use, and it declaresicon?: string:content/docs/components/overlay/menubar.mdxdocuments it too:The renderer has three places an item is drawn, and none of them reads the key:
So
ui:menubaris the third and last member of theMenuItem-shaped family, alongside the two already answered:dropdown-menu(repaired by #5930) andcontext-menu(repaired by #6278).Why this one was invisible, and why that is the interesting part
#6278's table was built by enumerating authored
iconstrings in the schema catalog and grouping them by nearest typed ancestor.examples/schema-catalog/src/schemas/components-overlay-menubar/application-menubar.jsonauthors zeroiconkeys, so menubar could never appear in that table — not because the renderer is fine, but because no fixture exercises the key.The same blind spot applies downstream:
scripts/check-lucide-icon-record-names.mjshas no'menubar'census entry, and even if one were added, itsminnon-vacuity precondition would (correctly) fail, because the descent reaches nothing. A gate that judges authored names cannot see a documented key that nothing authors.That makes this a declared-but-unread key of the #4632 / #4652 / #4721 class, not the "fixture draws the wrong thing" class — the failure is silent in both directions: an author following the published
MenubarItemshape gets no glyph and no error, and no gate reports anything.Not addressed here, and not addressed by
ui:context-menunever reads an item's authoredicon— dropdown-menu's identical twin, left behind by #5930 #6278 —context-menuonly; its ruling forbids generalising across containers.iconkeys that button-group, breadcrumb and command never read — two of them are named with-icons.json and render none #5931 — ownsbutton-group,breadcrumb,command; nowneeds-user-decisionon whether the key should exist at all for those. Menubar's question is the same one, which is why this card follows rather than pre-empts it. (breadcrumbandcommandhave since been repaired — PR fix(components): resolve ui:breadcrumb and ui:command child item icons through the record resolver #6644 wired both throughresolveIcon, the record surface, resolved once per item above the page/link split.button-groupis the half still open.)shortcutarray against astringslot, and its separator renders as a blank menu item #6249 — a different menubar defect (the demo'sshortcutarray against astringslot, and a blank separator item). Disjoint from the icon key.The open question, stated but not answered
Whichever way #5931 is decided for its containers probably decides this one too: either
MenuItem.iconis honoured everywhere it is typed and documented (route throughresolveIcon, the RECORD surface, as #5930 ruled and as #6644 has now done for two more containers), or the key is removed from the surfaces that do not read it. ⛔ This card should follow that answer, not pre-empt it.Incidentally, the nested-child arm above also renders only one level deep and drops
disabled, unlike the sibling renderers' recursion. Noted, not investigated. Per triage, that incidental rides the same fix if the answer is "honour".Serial note for the eventual claim: #6327 (hold) and #5935 (queued) touch the same file — check the serial queue.