← All tasks

v0.2 Slice E1 — Starter Cash In/Out PROD · GATE 2

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.

7/7 prod checks green · 51/51 regression green — no regressions. Commit 8b4f75e. 4 files + 1 new shared module, no migration.

What's live on prod

H5.5Cash In/Out works on Starter

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.

Screenshots

Cash button clicked → shared CashMovementDialog opens on Starter (was tier-locked / greyed)
After submitting a real $5 Cash In — form clears, dialog stays open
Ledger refreshes (via router.refresh()) — new "Slice E1 test float" row appears alongside the pre-existing movements

Checks — 7/7

Two 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.

Regression — 51/51, no regressions from this push

All prod suites green.
test-phase1-prod.mjs11/11
test-phase2-sso-outdoor-prod.mjs6/6
test-phase2-cafe-multishop-prod.mjs6/6
test-m1-prod.mjs10/10
test-r7-prod.mjs14/14
test-r8-prod.mjs4/4
+ test-v0-2-slice-e1-prod.mjs7/7
Total58/58

Files changed (4 + 1 new, no migration)

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)