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 is fenced to overlay/menubar.mdx; its dispatch asked me to measure the sibling pages (to settle whether localizing the interface name is a house convention) and I found this while doing so. Filed rather than fixed, per the same split ruling that produced #7072.
The defect
#6521 corrected overlay/menubar.mdx's ## Schema block to the surface MenuItem actually declares. The other two pages that document the same union have the same class of error, and more of it. All three menu pages publish a locally-named mirror of MenuItem; two of them are still wrong.
Measured on origin/main592acafbeed97c5aed81a18f4d848b6179d3c044.
content/docs/components/overlay/dropdown-menu.mdx — 4 wrong rows
| page today | authority | should be |
|---|
value?: string (:36) | declared on neither arm — not MenuCommandItem (overlay.ts:363-400), not MenuDividerItem (overlay.ts:409-421); dropdown-menu.tsx reads no .value | dropped |
variant?: 'default' or 'destructive' (:38) | not declared anywhere on the menu types; the only variant in dropdown-menu.tsx is :130, on a button node inside defaultProps.trigger — a different object, not a menu item | dropped |
| (absent) | shortcut?: string (overlay.ts:383, zod overlay.zod.ts:154), read at dropdown-menu.tsx:80 | added |
| (absent) | children?: MenuItem[] (overlay.ts:387, zod :155), read at dropdown-menu.tsx:58,66 — draws a real submenu | added |
content/docs/components/overlay/context-menu.mdx — 3 wrong rows
| page today | authority | should be |
|---|
value?: string (:33) | same as above — undeclared on both arms, no .value read in context-menu.tsx | dropped |
| (absent) | shortcut?: string, read at context-menu.tsx:78 | added |
| (absent) | children?: MenuItem[], read at context-menu.tsx:56,64 | added |
⭐ The renderers' own metadata already says the right thing
Both renderers register an items input whose description enumerates the command-item keys, and both enumerate them correctly:
dropdown-menu.tsx:125 — "a command item { label, icon, shortcut, disabled, onClick, children: [] } or a divider { separator: true }"context-menu.tsx:117 — "a command item { label, icon, shortcut, disabled, onClick, children } or a divider { separator: true }"
Neither names value. Neither names variant. Both name shortcut and children. ⇒ the shipped renderer metadata and the reference page beside it teach different key sets, and the metadata is the one that is right.
Why this matters more than a tidy-up
children and shortcut are not cosmetic omissions: both are declared capabilities with working runtime that these pages hide. An author reading overlay/dropdown-menu.mdx has no way to learn that dropdown menus draw nested submenus at all, or that an item can carry a keyboard shortcut. That is the reverse of the usual docs defect and strictly worse for an AI author, which will not emit a key the reference page does not list.
value is the forward direction, and #7072 measures what it cost: 21 catalog items author it, across exactly the three fixture families these three pages document. The pages are the producer (AGENTS.md #0.1).
Why nothing red covers it
Same reason as #6521: no gate parses a plaintext fence (#5250). check:doc-snippet-types only compiles ts/tsx/typescript fences (TS_FENCE_LANGUAGES, scripts/check-doc-snippet-types.mjs:317), and these blocks are plaintext — members of #5867's declared SHRINK-ONLY population.
Also seen on these pages, NOT measured further
Suggested repair
One docs-only PR over both pages, same shape as #6521's: drop the two undeclared rows, add the two hidden declared-and-read rows on each page. ⛔ Not "declare value/variant on MenuCommandItem" — #6523 narrowed this union deliberately.
Refs: #6521 (the same fix, on the third page) · #7072 (the fixtures these pages taught) · #6523 · #6326 · #5250 · #5867 · #6150.
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 is fenced to
overlay/menubar.mdx; its dispatch asked me to measure the sibling pages (to settle whether localizing the interface name is a house convention) and I found this while doing so. Filed rather than fixed, per the same split ruling that produced #7072.The defect
#6521 corrected
overlay/menubar.mdx's## Schemablock to the surfaceMenuItemactually declares. The other two pages that document the same union have the same class of error, and more of it. All three menu pages publish a locally-named mirror ofMenuItem; two of them are still wrong.Measured on
origin/main592acafbeed97c5aed81a18f4d848b6179d3c044.content/docs/components/overlay/dropdown-menu.mdx— 4 wrong rowsvalue?: string(:36)MenuCommandItem(overlay.ts:363-400), notMenuDividerItem(overlay.ts:409-421);dropdown-menu.tsxreads no.valuevariant?: 'default' or 'destructive'(:38)variantindropdown-menu.tsxis:130, on abuttonnode insidedefaultProps.trigger— a different object, not a menu itemshortcut?: string(overlay.ts:383, zodoverlay.zod.ts:154), read atdropdown-menu.tsx:80children?: MenuItem[](overlay.ts:387, zod:155), read atdropdown-menu.tsx:58,66— draws a real submenucontent/docs/components/overlay/context-menu.mdx— 3 wrong rowsvalue?: string(:33).valueread incontext-menu.tsxshortcut?: string, read atcontext-menu.tsx:78children?: MenuItem[], read atcontext-menu.tsx:56,64⭐ The renderers' own metadata already says the right thing
Both renderers register an
itemsinput whosedescriptionenumerates the command-item keys, and both enumerate them correctly:dropdown-menu.tsx:125— "a command item { label, icon, shortcut, disabled, onClick, children: [] } or a divider { separator: true }"context-menu.tsx:117— "a command item { label, icon, shortcut, disabled, onClick, children } or a divider { separator: true }"Neither names
value. Neither namesvariant. Both nameshortcutandchildren. ⇒ the shipped renderer metadata and the reference page beside it teach different key sets, and the metadata is the one that is right.Why this matters more than a tidy-up
childrenandshortcutare not cosmetic omissions: both are declared capabilities with working runtime that these pages hide. An author readingoverlay/dropdown-menu.mdxhas no way to learn that dropdown menus draw nested submenus at all, or that an item can carry a keyboard shortcut. That is the reverse of the usual docs defect and strictly worse for an AI author, which will not emit a key the reference page does not list.valueis the forward direction, and #7072 measures what it cost: 21 catalog items author it, across exactly the three fixture families these three pages document. The pages are the producer (AGENTS.md #0.1).Why nothing red covers it
Same reason as #6521: no gate parses a
plaintextfence (#5250).check:doc-snippet-typesonly compilests/tsx/typescriptfences (TS_FENCE_LANGUAGES,scripts/check-doc-snippet-types.mjs:317), and these blocks areplaintext— members of #5867's declared SHRINK-ONLY population.Also seen on these pages, NOT measured further
context-menu.mdxpublishestrigger: ComponentSchemaas required;ContextMenuSchema.triggeris declared optional, andoverlay.ts's own doc comment records that divergence in as many words ("Declared OPTIONAL although the docs page shows it required", finding(types): 13 top-level schema keys that component renderers genuinely READ are declared by no shipped type — measured across all 76content/docs/componentspages #6150). Someone may already own this — checked only far enough to say it is a known, recorded mismatch rather than a new one.context-menu.mdxdoes not publishContextMenuSchema.children, which is declared required and which the same doc comment says no read site consumes.Suggested repair
One docs-only PR over both pages, same shape as #6521's: drop the two undeclared rows, add the two hidden declared-and-read rows on each page. ⛔ Not "declare
value/variantonMenuCommandItem" — #6523 narrowed this union deliberately.Refs: #6521 (the same fix, on the third page) · #7072 (the fixtures these pages taught) · #6523 · #6326 · #5250 · #5867 · #6150.
Generated by Claude Code