H5.5 — Cash In/Out promoted from Pro-only to all tiers, verified end-to-end on
lumiere-coffee (Starter) by actually recording a Cash In through the dialog and
confirming the row landed in cafe.cash_movements + appeared in the dialog's ledger.
H3.4 (close-shift Odoo-style + Daily Sale download) was split out as Slice E2 — its own cycle.
8b4f75e.
4 files + 1 new shared module, no migration.
The CashMovementDialog (was Pro-only) is now a shared module both lockable shells
import. On Starter, the top-bar Cash button no longer renders tier-locked — clicking it opens
the dialog, the cashier records the movement, the row lands in cafe.cash_movements,
and the dialog's right-pane ledger refreshes via router.refresh(). Verified on
lumiere-coffee with a real $5 Cash In ("Slice E1 test float"). Pro path unchanged — just
imports the dialog from the shared module now instead of defining it inline.

CashMovementDialog opens on Starter (was tier-locked / greyed)

router.refresh()) — new "Slice E1 test float" row appears alongside the pre-existing movementsTwo test-scaffolding bugs surfaced + fixed during this Gate 2: (1) initial polling SQL used
nix_session_id but the column is session_id; (2) one-shot ledger read raced
router.refresh() — switched to polling the ledger DOM for up to 15s. Both fixes are in
test-v0-2-slice-e1-prod.mjs and logged in the scoping memo. The shipped
H5.5 functionality worked correctly on the first deploy — these were just test-side issues.
| 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 |
| + test-v0-2-slice-e1-prod.mjs | 7/7 |
| Total | 58/58 |
app/(authed)/pos/_components/cash-movement-dialog.tsx (new — shared)
app/(pos-fullscreen)/pos/register/[configId]/lockable-shell.tsx (local def removed, imports from shared)
app/(authed)/pos/_components/starter-lockable-shell.tsx (Cash button un-greyed, props extended, dialog mounted)
app/(pos-fullscreen)/pos/register/[configId]/page.tsx (Starter path gains the three sum fetches)