← All tests

POS Section Rework — sidebar nav rework (prod)

2026-05-14 Gate 2 on prod. Follow-up after the arc: per user feedback on the shipped Slice 3, the POS submenu now lives in the dark sidebar, not as an in-page rail. The flat "Register" + "Orders" OPERATIONS rows are replaced by one expandable "Point of Sale" group; the in-page rail is deleted; the page header the old shell owned is re-added. No migration. This reverses Slice 3's in-page-rail decision — the user-approved choice at scoping time, changed after seeing it live.

12/12 prod test PASS on get-coffee (Pro) + lumiere-coffee (Starter). 59/59 regression green. 1 commit, no migration.
get-coffee — the "Point of Sale" group expanded in the dark sidebar, showing the 4 children (Registers / Sessions / Orders / Settings).
Point of Sale group expanded in the sidebar
/cafe/pos — the landing re-owns its "Point of Sale" header, the sidebar group auto-expands, and there is no in-page rail.
POS landing with its own header and no in-page rail
BEFORE — flat rows OPERATIONS Dashboard Register → /pos Orders → /orders Products Customers + an in-page rail inside /cafe/pos
AFTER — expandable group OPERATIONS Dashboard Point of Sale v · Registers → /pos · Sessions → /pos/sessions · Orders → /pos/orders · Settings → /pos/registers Products Customers no in-page rail — sidebar owns the nav

Prod test — 12/12

✓ get-coffee (Pro) — SSO login
✓ get-coffee (Pro) — sidebar shows the "Point of Sale" group; collapsed off-section, expands on click
✓ get-coffee (Pro) — old flat "Register" / "Orders" OPERATIONS rows are gone
✓ get-coffee (Pro) — children navigate (Sessions → /cafe/pos/sessions)
✓ get-coffee (Pro) — /cafe/pos: own header, group auto-expands, no in-page rail
✓ get-coffee (Pro) — ?config= register terminal still renders
✓ lumiere-coffee (Starter) — SSO login
✓ lumiere-coffee (Starter) — sidebar shows the "Point of Sale" group; collapsed off-section, expands on click
✓ lumiere-coffee (Starter) — old flat "Register" / "Orders" OPERATIONS rows are gone
✓ lumiere-coffee (Starter) — children navigate (Sessions → /cafe/pos/sessions)
✓ lumiere-coffee (Starter) — /cafe/pos: own header, group auto-expands, no in-page rail
✓ lumiere-coffee (Starter) — ?config= register terminal still renders

Regression sweep — 59/59

✓ phase1                  11/11   route sweep + subscription
✓ phase2-sso-outdoor        6/6    cross-product SSO
✓ phase2-cafe-multishop     6/6    POS shop picker
✓ m1-shop-scoping          10/10   reports / shop scoping
✓ r7                       14/14   dashboard + manager sidebar
✓ r8                        4/4    auth/security (per-tenant scope)
✓ r1-2-landing              8/8    landing flow, no 5xx
                          ─────
                          59/59   green — 71/71 effective with the 12/12 above

phase1 passed clean this sweep (no SSO-hop flake). The r7 + r1-2-landing
suites exercise the sidebar on every page they visit — the new NavGroupItem
rendered without regression across both tenants.

Files — 8 touched, no migration

new:
  components/layout/nav-model.ts               buildNav + filterNavForPermissions + nav types
deleted:
  app/(authed)/pos/_components/pos-nav.tsx     the in-page rail
  app/(authed)/pos/_components/pos-shell.tsx   the in-page master-detail wrapper
edited:
  components/layout/sidebar.tsx                + expandable NavGroup support (NavGroupItem),
                                               imports the model from nav-model.ts
  app/(authed)/pos/layout.tsx                  PosShell/Suspense → plain requirePermission passthrough
  app/(authed)/pos/pos-landing.tsx             re-added the "Point of Sale" header
  app/(authed)/pos/page.tsx                    re-added the header to the empty state
  app/(authed)/pos/loading.tsx                 re-added the header skeleton