Context
Live operator QA on 2026-07-29 exposed the dense Workstation tab overflow menu as a plain black, oversized stock list that is visually foreign to the surrounding cockpit. The overflow button itself carries Workstation treatment; the list it opens does not.
This is a new visual successor to #15098 / PR #15108. That predecessor established the generic tab-native projection, alignment, hidden-tab partition, and selection path. It did not prove the floating menu's theme or product skin, and it remains closed.
The Problem
Neo.tab.plugin.Overflow creates its control as a parentless floating direct child of document.body. button.Base#afterSetMenu() then creates the floating menu.List with the button's theme. The Overflow control does not pass the owning toolbar's nearest theme into that parentless button, so the menu can be created without a neo-theme-* carrier.
The structural menu SCSS consumes --menu-list-* variables. Their values are projected by the theme class. Without that carrier, the list falls back to inherited/document treatment instead of the active Workstation surface. Workstation currently skins only .neo-tab-overflow-control; it does not repair the menu instance spawned from that control.
The existing Workstation journey proves that the menu opens, contains the exact hidden partition, aligns to the toolbar, and selects through activeIndex. It does not assert the menu theme class or any computed visual treatment. A semantically correct menu can therefore look alien and still pass.
The Architectural Reality
Theme ownership must travel with a floating embodiment. Body mounting is intentional—the control must stay outside the draggable toolbar collection—but leaving the toolbar subtree must not discard the nearest active theme.
The app-neutral Overflow plugin should propagate the source owner's theme to the floating control, which in turn passes it through the existing button.Base menu seam. Workstation-specific selector reach is not an adequate substitute: Overflow is generic tab behavior and every consumer needs the same carrier rule.
The Fix
- Add a focused headed regression that opens a real Overflow menu from a body-mounted control in both Workstation themes.
- Propagate the owner toolbar's nearest active theme onto the parentless floating control and its menu list through the existing component theme contract.
- Retain the out-of-collection body mount, exact alignment, hidden-tab partition, ordinary
activeIndex selection, and theme-switch behavior.
- Add visual/computed evidence for the visible menu surface, item rhythm, hover/focus state, and text/icon contrast.
Contract Ledger
| Surface |
Authority |
Required behavior |
Failure fallback |
Evidence |
| Floating overflow control |
Neo.tab.plugin.Overflow + source toolbar |
Carries the nearest active owner theme while remaining outside owner.items |
No control when no overflow |
Parent/collection identity plus theme class |
| Floating menu list |
button.Base#afterSetMenu() |
Receives the control's theme and resolves the menu token family |
Never invent app-local hardcoded colors |
Root class + computed token-backed styles |
| Workstation skin |
Workstation palette/theme projection |
Menu reads as part of the cockpit in dark and light modes |
Generic semantic menu remains functional if an app supplies no custom palette |
Retained screenshots and contrast/style receipt |
| Overflow semantics |
#15098 / PR #15108 |
Exact visible+hidden partition; selection activates through activeIndex |
Teardown/reprojection stays fail-safe |
Existing semantic assertions remain green |
Acceptance Criteria
Out of Scope
Tab-header drag-proxy background · popup-over-popup conversion · dock preview geometry · changes to the hidden-tab packing algorithm · an app-specific hand-built menu.
Avoided Traps
- Do not reopen #15098; this is its post-merge visual successor.
- Do not move the control into
owner.items; that makes it draggable and corrupts the tab collection invariant.
- Do not hardcode Workstation colors inside the generic plugin or shared menu component.
- Do not accept menu-open/menu-select semantics as visual proof.
- Do not scope the fix only through
body:has(.workstation-workspace); the floating component must carry its own theme authority.
Decision Record impact
aligned-with the existing tab-subsystem ownership and floating-component theme model; no ADR amendment expected.
Related
Successor to #15098 / PR #15108 · historical precursor #14771 · QT-parity epic #13158 · sibling regression #16117.
Freshness evidence: live all-state GitHub searches for overflow menu, workstation overflow, and theme/skin variants; Knowledge Base ticket sweep; current source and current Workstation headed assertions; latest 20 open issues and latest 30 all-state A2A messages checked immediately before creation on 2026-07-29. No equivalent open defect or competing claim found.
Retrieval Hint: Workstation overflow menu body mounted control missing theme neo-menu-list alien black list
Context
Live operator QA on 2026-07-29 exposed the dense Workstation tab overflow menu as a plain black, oversized stock list that is visually foreign to the surrounding cockpit. The overflow button itself carries Workstation treatment; the list it opens does not.
This is a new visual successor to #15098 / PR #15108. That predecessor established the generic tab-native projection, alignment, hidden-tab partition, and selection path. It did not prove the floating menu's theme or product skin, and it remains closed.
The Problem
Neo.tab.plugin.Overflowcreates its control as a parentless floating direct child ofdocument.body.button.Base#afterSetMenu()then creates the floatingmenu.Listwith the button'stheme. The Overflow control does not pass the owning toolbar's nearest theme into that parentless button, so the menu can be created without aneo-theme-*carrier.The structural menu SCSS consumes
--menu-list-*variables. Their values are projected by the theme class. Without that carrier, the list falls back to inherited/document treatment instead of the active Workstation surface. Workstation currently skins only.neo-tab-overflow-control; it does not repair the menu instance spawned from that control.The existing Workstation journey proves that the menu opens, contains the exact hidden partition, aligns to the toolbar, and selects through
activeIndex. It does not assert the menu theme class or any computed visual treatment. A semantically correct menu can therefore look alien and still pass.The Architectural Reality
Theme ownership must travel with a floating embodiment. Body mounting is intentional—the control must stay outside the draggable toolbar collection—but leaving the toolbar subtree must not discard the nearest active theme.
The app-neutral Overflow plugin should propagate the source owner's theme to the floating control, which in turn passes it through the existing
button.Basemenu seam. Workstation-specific selector reach is not an adequate substitute: Overflow is generic tab behavior and every consumer needs the same carrier rule.The Fix
activeIndexselection, and theme-switch behavior.Contract Ledger
Neo.tab.plugin.Overflow+ source toolbarowner.itemsbutton.Base#afterSetMenu()activeIndexAcceptance Criteria
devheaded witness opens the real dense Workstation overflow menu and fails on the missing theme carrier / alien computed treatment..neo-menu-listcarry the nearest activeneo-theme-*identity in both Workstation modes.activeIndex, reprojection, and teardown assertions remain green.Out of Scope
Tab-header drag-proxy background · popup-over-popup conversion · dock preview geometry · changes to the hidden-tab packing algorithm · an app-specific hand-built menu.
Avoided Traps
owner.items; that makes it draggable and corrupts the tab collection invariant.body:has(.workstation-workspace); the floating component must carry its own theme authority.Decision Record impact
aligned-with the existing tab-subsystem ownership and floating-component theme model; no ADR amendment expected.
Related
Successor to #15098 / PR #15108 · historical precursor #14771 · QT-parity epic #13158 · sibling regression #16117.
Freshness evidence: live all-state GitHub searches for
overflow menu,workstation overflow, and theme/skin variants; Knowledge Base ticket sweep; current source and current Workstation headed assertions; latest 20 open issues and latest 30 all-state A2A messages checked immediately before creation on 2026-07-29. No equivalent open defect or competing claim found.Retrieval Hint:
Workstation overflow menu body mounted control missing theme neo-menu-list alien black list