← All tests

POS Section Rework — Slice 2 (prod)

2026-05-14 Gate 2 on Supabase prod. Second slice of the POS Section Rework arc (Narong spec item 8): the landing card UI rework SHIPPED. /cafe/pos's RegisterCard redesigned to the 4-slot adaptive layout that consumes Slice 1's session-scoped metrics, with a Continue Selling / Open Register CTA mirroring the Odoo dashboard. soldToday/bankToday renamed to sold/bank across the data layer. No migration.

7/7 prod visual test PASS on get-coffee (Pro) + lumiere-coffee (Starter). 1 commit, no migration.
get-coffee (Pro) — /cafe/pos. 4 registers on a closed latest session show the snapshot card (Closing + Cash/Bank/Sold + "Closed {date}" + Open Register); the open one shows the live layout + Continue Selling.
get-coffee /cafe/pos landing
get-coffee — manager-live drawer still renders after the soldToday→sold rename.
get-coffee manager-live drawer
lumiere-coffee (Starter) — /cafe/pos renders the same 4-slot cards through the buildStarterLanding path.
lumiere-coffee /cafe/pos landing

Prod visual test — 7/7

✓ get-coffee — SSO login
✓ get-coffee — /cafe/pos renders the new 4-slot cards (no 5xx)
✓ get-coffee — every card's CTA pairs with its session state
✓ get-coffee — closed-latest registers show the snapshot card + Open Register CTA
✓ get-coffee — manager-live drawer still renders (soldToday→sold rename consumer)
✓ lumiere-coffee — SSO login
✓ lumiere-coffee (Starter) — /cafe/pos renders the new cards (no 5xx)

State↔CTA pairing asserted per card: Open / Opening… / Closing… → "Continue
Selling"; Closed / No sessions yet → "Open Register".
59/59 regression green — no regressions from this push. 66/66 effective (7 Slice 2 prod + 59 regression).
test-phase1-prod.mjs — route/SSO smoke11/11
test-phase2-sso-outdoor-prod.mjs6/6
test-phase2-cafe-multishop-prod.mjs6/6
test-m1-prod.mjs — shop scoping10/10
test-r7-prod.mjs — dashboard + manager-live drawer14/14
test-r8-prod.mjs — auth/security4/4
test-r1-2-landing-prod.mjs — POS landing8/8
Two suites flagged on the first sweep, both resolved — neither a code regression: r1-2-landing failed on a stale assertion checking the removed "Cash opening" / "Sold today" columns — updated to the new 4-slot card structure (Opening/Closing · Cash Balance · Bank Balance · Sold + CTA), 8/8 on re-run. phase1 flaked on the SSO hop (URL landed on / not /cafe/dashboard) — green on solo retry; a known cold-start flake, not in Slice 2's blast radius (no routing/middleware/dashboard touched).

Files touched — commit 94324b9

nix-cafe (7 files, no migration):
  app/(authed)/pos/pos-landing.tsx   RegisterCard redesigned (4-slot adaptive
                                     + CTA); LandingConfig renamed + closedAt
  app/(authed)/pos/loading.tsx       skeleton updated to the 2x2 card shape
  components/manager-live-control.tsx  soldToday/bankToday → sold/bank
  lib/db/pos_configs.ts              MirrorPosConfigSummary rename + closedAt
  lib/db/manager_live.ts             cardFor rename + closedAt
  lib/db/starter_landing.ts          buildStarterLanding rename + closedAt
  lib/odoo/queries.ts                PosConfigSummary rename + closedAt

Arc progress — 2 of 6 slices shipped

Slice 1 ✅ session-scoped summary data layer
Slice 2 ✅ landing card UI rework  ← this
Slice 3 — master-detail "Point of Sale" submenu shell (Dashboard /
          Registers / Sessions / Orders)
Slice 4 — Sessions history page
Slice 5 — Registers + Orders relocation under POS

The manager-live drawer card keeps its compact 3-cell design — it's R7's
surface, out of Slice 2's scope; it only took the field rename. Reworking
it (or un-muting its now-real closed-session stats) is a possible
follow-up.