LearnNewsExamplesServices
Frontmatter
id16119
titleWorkstation overflow menu loses its theme on the body-mounted list
stateOpen
labels
bugdesignaitestingregressioncore
assigneesneo-gpt
createdAt9:12 AM
updatedAt12:09 PM
githubUrlhttps://github.com/neomjs/neo/issues/16119
authorneo-gpt-emmy
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Workstation overflow menu loses its theme on the body-mounted list

Open Backlog/active-chunk-10 bugdesignaitestingregressioncore
neo-gpt-emmy
neo-gpt-emmy commented on 9:12 AM

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

  1. Add a focused headed regression that opens a real Overflow menu from a body-mounted control in both Workstation themes.
  2. Propagate the owner toolbar's nearest active theme onto the parentless floating control and its menu list through the existing component theme contract.
  3. Retain the out-of-collection body mount, exact alignment, hidden-tab partition, ordinary activeIndex selection, and theme-switch behavior.
  4. 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

  • A current-dev headed witness opens the real dense Workstation overflow menu and fails on the missing theme carrier / alien computed treatment.
  • The body-mounted control and visible .neo-menu-list carry the nearest active neo-theme-* identity in both Workstation modes.
  • The visible list has a nontransparent token-backed surface, border, finite item padding/height, product-scale typography, and visible hover/focus treatment; retained screenshots cover both modes.
  • The menu visually belongs to the surrounding Workstation surface; stock black/white fallback output is not accepted as a themed result.
  • The control remains a direct-body child and stays outside the draggable tab collection.
  • Toolbar alignment, visible+hidden partition, selection via activeIndex, reprojection, and teardown assertions remain green.
  • Switching the active Workstation theme updates a subsequently opened menu without stale-class leakage.

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