← All tasks
T2 — Top-bar ⋮ menu refactor (Odoo POS pattern) PROD · GATE 2
Secondary navbar actions (Cash In/Out, Daily Sale, Session History) collapsed
into a "⋮" dropdown next to the navbar, matching Odoo 17's POS pattern.
Pro + Starter shells unified. The Starter in-app Cash button — broken since
Slice E1 — is now functional.
8/8 prod · 51/51 regression = 59/59 total.
nix-cafe commit de9c575. 4 files modified + 1 new (PosMoreMenu) · ~280 LOC · no migration.
Per-step verification — 8/8
- ✓ SSO-login lumiere owner
- ✓ Navigate to
/cafe/pos?config=1000000024 (Starter in-app shell)
- ✓ Regression — orphaned
register-cash-btn and pos-cash-btn are GONE from prod DOM
- ✓ ⋮ trigger visible + clickable; dropdown reveals 3 items (
pos-more-cash, pos-more-daily-sale, pos-more-session-history)
- ✓ ⋮ → Cash In/Out opens CashMovementDialog — the T1-surfaced gap is closed; the in-app Starter Cash dialog mounts for the first time since Slice E1
- ✓ Close Cash dialog via Escape
- ✓ ⋮ → Daily Sale fires Playwright download event with filename
daily-sale-…csv
- ✓ ⋮ → Session History navigates to
/cafe/pos/sessions
51/51 regression green — no regressions from this push.
| test-phase1-prod.mjs | 11/11 |
| test-phase2-sso-outdoor-prod.mjs | 6/6 |
| test-phase2-cafe-multishop-prod.mjs | 6/6 * |
| test-m1-prod.mjs | 10/10 |
| test-r7-prod.mjs | 14/14 |
| test-r8-prod.mjs | 4/4 |
* Same R8.2-rotation race that's bit every regression sweep today
(5/6 first parallel run, 6/6 solo retry). Not a regression — the change
is pure UI plumbing.
Screenshots from prod test

1. ⋮ dropdown openLumière in-app Starter shell — 3 menu items visible (Cash, Daily Sale, Session History)

2. ⋮ → Cash In/OutCashMovementDialog mounted for the first time on the in-app Starter shell — the T1-surfaced Slice E1 gap is closed

3. ⋮ → Daily Sale (Downloaded state)Playwright captured the download event; menu item transitions to "Downloaded" then closes the dropdown after 1.5s

4. ⋮ → Session HistoryNavigated to /cafe/pos/sessions via Next Link (basePath auto-prepended)
What this closes
- ✅ Odoo POS pattern — secondary actions in a ⋮ dropdown next to the navbar
- ✅ Pro + Starter unified UI — both shells render the same ⋮ component
- ✅ Cash In/Out on Starter in-app — T1-surfaced gap closed; the dialog now mounts from the in-app shell (Slice E1 only wired the lockable shell)
- ✅ Daily Sale accessible from top-bar — was previously only inside close-shift dialog
- ✅ Session History one click away — was previously sidebar-only
What's next
- T3 — Close-shift dialog UI polish (font sizing, indent, eliminate Expected row, Diff for non-cash, $0 Cash In/Out row) + QA the ❌ "Test Cash Payment with Difference" scenarios
- T4 — POS Open Orders restructure (NIX-OS-81's 7 todos)
- Parked pending Narong: H2.3 banking-flow diagram (payment-method↔register linkage); Session History filter spec