Resolves #16119
The body-mounted tab overflow control now carries its source toolbar's live theme, and its generated menu exposes one app-neutral skin identity while remaining outside the draggable tab collection. Workstation projects that themed menu into its own palette and density tokens, so the real overflow list follows dark/light switches without stale classes while preserving the existing hidden-tab and activeIndex path.
Evidence: L3 (headed current-dev Chromium witness, live browser receipts, runtime theme inspection, and computed visual/contrast assertions) → L3 required (real floating-menu theme and Workstation visual behavior in both modes). No residuals.
Deltas from ticket
The existing live menu is updated in place through menuList.items rather than being recreated whenever the hidden partition changes. This preserves the same menu instance and live theme subscription while refreshing the exact hidden-tab projection.
Retained visual receipts
Test Evidence
- Generic tab overflow:
NEO_TEST_SKIP_CI=true npm run test-unit -- test/playwright/unit/tab/plugin/Overflow.spec.mjs — 18 passed after the final origin/dev rebase.
- Workstation headed witness:
NEO_E2E_PORT=8129 npx playwright test workstation/WorkstationNL -c test/playwright/playwright.config.e2e.mjs --workers=1 -g "body-mounted overflow menu" — GPU probe plus focused regression, 2 passed after the final rebase.
- Theme compilation:
npm run build-themes -- -n -e dev -t all — passed.
- Repository gates: semantic
agent-preflight for restoration passed; commit hooks passed whitespace, shorthand, JSDoc types, derived-domain, ticket-archaeology, alignment, and parse checks.
- Static hygiene:
node --check passed for all three changed .mjs files; git diff --check passed.
- Live visual receipt: both body-mounted menus carried the expected
neo-theme-* class; dark resolved to rgb(26, 33, 44), light to rgb(247, 249, 252).
Post-Merge Validation
Authored by Euclid (GPT-5.6 Sol, Codex Desktop). Session f632ad08-def6-447d-af96-0dc58d45a370.
Resolves #16119
The body-mounted tab overflow control now carries its source toolbar's live theme, and its generated menu exposes one app-neutral skin identity while remaining outside the draggable tab collection. Workstation projects that themed menu into its own palette and density tokens, so the real overflow list follows dark/light switches without stale classes while preserving the existing hidden-tab and
activeIndexpath.Evidence: L3 (headed current-
devChromium witness, live browser receipts, runtime theme inspection, and computed visual/contrast assertions) → L3 required (real floating-menu theme and Workstation visual behavior in both modes). No residuals.Deltas from ticket
The existing live menu is updated in place through
menuList.itemsrather than being recreated whenever the hidden partition changes. This preserves the same menu instance and live theme subscription while refreshing the exact hidden-tab projection.Retained visual receipts
Test Evidence
NEO_TEST_SKIP_CI=true npm run test-unit -- test/playwright/unit/tab/plugin/Overflow.spec.mjs— 18 passed after the finalorigin/devrebase.NEO_E2E_PORT=8129 npx playwright test workstation/WorkstationNL -c test/playwright/playwright.config.e2e.mjs --workers=1 -g "body-mounted overflow menu"— GPU probe plus focused regression, 2 passed after the final rebase.npm run build-themes -- -n -e dev -t all— passed.agent-preflightforrestorationpassed; commit hooks passed whitespace, shorthand, JSDoc types, derived-domain, ticket-archaeology, alignment, and parse checks.node --checkpassed for all three changed.mjsfiles;git diff --checkpassed.neo-theme-*class; dark resolved torgb(26, 33, 44), light torgb(247, 249, 252).Post-Merge Validation
devbuild, reopen the overflow menu after repeated dark/light toggles and confirm the visible menu retains exactly one current theme class.Authored by Euclid (GPT-5.6 Sol, Codex Desktop). Session f632ad08-def6-447d-af96-0dc58d45a370.