Filed unassigned by the os-dev seat while implementing #6521. Grading and domain:* are the triage seat's.
⛔ Deliberately not folded into #6521's PR. That card's dispatch ruled split, on the ground that this face spans three fixture families — two of which are not menubar.mdx's face at all — and that catalog fixtures are a different verification population from a docs page. #6521 corrected the producer (the page that taught the key); this card is the consumer half.
The defect
21 catalog menu items author "value", a key no arm of the shipped MenuItem union declares and no menu renderer reads.
Re-measured on origin/main592acafbeed97c5aed81a18f4d848b6179d3c044 (the card that reported these figures measured them at 50f987f9a; they have not moved):
| fixture | items carrying value |
|---|
components-overlay-menubar/application-menubar.json | 11 |
components-overlay-context-menu/basic-context-menu.json | 4 |
components-overlay-dropdown-menu/basic-dropdown-menu.json | 3 |
components-overlay-dropdown-menu/with-icons.json | 3 |
| 21 |
All 21 are menu-item objects (spot-checked: { "label": "New Tab", "value": "new" }), not a value on some other node type.
The authority
packages/types/src/overlay.ts — since #6523, MenuItem is a discriminated union:
MenuCommandItem (overlay.ts:363-400) declares label, icon, disabled, onClick, shortcut, children, separator?: false, type?: never. No value.MenuDividerItem (overlay.ts:409-421) declares separator: true, type?: never. No value.
Read sites, all three menu renderers under packages/components/src/renderers/overlay/: menubar.tsx, dropdown-menu.tsx, context-menu.tsx contain zero occurrences of a .value read.
Why nothing red covers it
MenuItemSchema (packages/types/src/zod/overlay.zod.ts:147-168) builds its union from bare, non-strict z.objects, so zod stripsvalue and reports success. That is the #5250 blindness exactly: no gate parses these JSON fixtures against a strict shape, so the key has been inert and invisible since it was authored.
Nothing is bleeding while this waits — an inert authored key renders nothing wrong. This is cleanup, not a user-visible defect, and should be graded as such.
Same class, different key — the cards that do not cover this
If #6810 is ruled toward a family-wide sweep, this card is one of the rows that sweep would have found, and can be closed by it rather than fixed by hand.
Suggested repair
Delete the 21 "value" keys. ⛔ Not "declare value on MenuCommandItem" — nothing reads it, and #6523 deliberately narrowed this union rather than widening it.
Refs: #6521 (producer, corrected) · #6810 · #6902 · #6939 · #6326 · #5250 · #6523 · #6249.
Generated by Claude Code
Filed unassigned by the
os-devseat while implementing #6521. Grading anddomain:*are the triage seat's.⛔ Deliberately not folded into #6521's PR. That card's dispatch ruled split, on the ground that this face spans three fixture families — two of which are not
menubar.mdx's face at all — and that catalog fixtures are a different verification population from a docs page. #6521 corrected the producer (the page that taught the key); this card is the consumer half.The defect
21 catalog menu items author
"value", a key no arm of the shippedMenuItemunion declares and no menu renderer reads.Re-measured on
origin/main592acafbeed97c5aed81a18f4d848b6179d3c044(the card that reported these figures measured them at50f987f9a; they have not moved):valuecomponents-overlay-menubar/application-menubar.jsoncomponents-overlay-context-menu/basic-context-menu.jsoncomponents-overlay-dropdown-menu/basic-dropdown-menu.jsoncomponents-overlay-dropdown-menu/with-icons.jsonAll 21 are menu-item objects (spot-checked:
{ "label": "New Tab", "value": "new" }), not avalueon some other node type.The authority
packages/types/src/overlay.ts— since #6523,MenuItemis a discriminated union:MenuCommandItem(overlay.ts:363-400) declareslabel,icon,disabled,onClick,shortcut,children,separator?: false,type?: never. Novalue.MenuDividerItem(overlay.ts:409-421) declaresseparator: true,type?: never. Novalue.Read sites, all three menu renderers under
packages/components/src/renderers/overlay/:menubar.tsx,dropdown-menu.tsx,context-menu.tsxcontain zero occurrences of a.valueread.Why nothing red covers it
MenuItemSchema(packages/types/src/zod/overlay.zod.ts:147-168) builds its union from bare, non-strictz.objects, so zod stripsvalueand reports success. That is the #5250 blindness exactly: no gate parses these JSON fixtures against a strict shape, so the key has been inert and invisible since it was authored.Nothing is bleeding while this waits — an inert authored key renders nothing wrong. This is cleanup, not a user-visible defect, and should be graded as such.
Same class, different key — the cards that do not cover this
contentkey only.selectoption authors its text undertype, a keyui:selectnever reads #6902 — the same class onui:select, keytype. Its own scope note is the precedent for filing this separately: "a different key and a different family, so none of those cards touch it".safeValidateSchemabecause the Zod mirror names a key its renderer never reads (8 components) #6939 — the inverse direction (the zod mirror demands a key the renderer never reads).valueis not in its 24.ui:menubarnever reads an item'siconeither — the thirdMenuItem-shaped container, and the one no census can see #6326 —ui:menubarnever reads a declaredicon.valueis not declared at all, so it is the other half.If #6810 is ruled toward a family-wide sweep, this card is one of the rows that sweep would have found, and can be closed by it rather than fixed by hand.
Suggested repair
Delete the 21
"value"keys. ⛔ Not "declarevalueonMenuCommandItem" — nothing reads it, and #6523 deliberately narrowed this union rather than widening it.Refs: #6521 (producer, corrected) · #6810 · #6902 · #6939 · #6326 · #5250 · #6523 · #6249.
Generated by Claude Code