2026-05-22 — Gate 1. Third slice of Narong's 5/22 test-run findings. Bundles the 5 close-shift-dialog UI polish items + Session History "Total Sales" column + Cash In/Out success overlay upgrade into one slice. ❌ in Narong's doc = "not yet tested" — T3.7 / T3.8 (Cash-with-Difference scenarios) folded into Gate 2 as QA probes, not bug fixes.
Close-Shift dialog (both shells — starter-close-shift-dialog.tsx + inline JSX in lockable-shell.tsx):
Cash in / Cash out rows render unconditionally (even at $0). Previously gated on cashIn > 0 / cashOut > 0.Expected row removed from the Cash section. The section-header amount (top-right of the Cash block) IS the expected total. A new Difference row replaces it inside the section, computed live as endingCash − expectedCash.space-y-1 text-[12px] pl-4). Cash and non-cash sections render at the same typography weight + indent.Payments / Counted / Difference $0.00 (parallel structure to Cash, no new input surface — terminal-reported amount IS the counted amount in v1).bg-[#FAFAFA] background and space-y-3 between sections. No inter-section card borders. The Cash count input sits below the container, separated by spacing instead of a forced divider rule. Dropped: Starter's inline "Diff: +$0" below the input + Pro's tinted Difference callout — the in-section Difference row covers both.Session History (/cafe/pos/sessions):
listSessions DAO now exposes totalSales = cashSales + bankTotal per row (both already aggregated by aggregateSessionMetricsBySessionIds; no new query). Threaded through page → client. Desktop table + mobile card both display it.Cash In / Cash Out dialog (cash-movement-dialog.tsx):
Cash In/Out recorded heading + amount + reason. Auto-dismisses after 1.5s, cash-success testid retained for regression continuity.From the Notion doc — Narong drew strikethroughs to indicate which rows need indenting and a thick red horizontal line to mark where the single divider belongs (between calculations and Cash count input).
Reference screenshot Narong attached under the "Indent the lines and keep them inside the same container" bullet (16:50).
cashIn > 0 · ✓cashOut > 0 · ✓cashIn > 0 · ✓cashOut > 0 · ✓close-shift-expected testid) · ✓text-[12px] pl-4) · ✓Counted + Difference $0.00 · ✓Counted + Difference $0.00 · ✓close-calculations container present, no per-section borders · ✓close-calculations container present, no per-section borders · ✓SessionListRow exposes totalSales · ✓totalSales threaded into SessionsClient props · ✓"Total Sales" column header + session-row-…-total-sales testid · ✓listSessions returns numeric totalSales ≥ 0 against local DB · ✓nix-cafe karouna-dev, wait ~90s for CF Pages deploy.test-t3-close-shift-polish-prod.mjs on lumiere-coffee Starter — load the close-shift dialog, assert the new shape end-to-end (sections in one container, Cash in/out rows present at $0, Difference rows in each section). Includes T3.7 / T3.8 QA probes: ring a cash sale + close shift with a Cash count over/short of expected (with and without an intervening Cash In/Out movement).test-r1-10-cash-movements-prod.mjs already adjusted to use close-section-cash-total (Expected testid is gone).Reply push to proceed to Gate 2, or flag corrections.