← All tests

Dashboard + Reports ShopSelector cleanup PROD

2026-05-08 on prod. Carryforward from launchpad-fix-prod follow-ups. app/(authed)/dashboard/page.tsx and app/(authed)/reports/page.tsx were each rendering their own <ShopSelector> redundantly with the layout-level one (which already has the proper shops.length > 1 || isStarter gate). Effects: on Pro+1-shop tenants (demo) the page-level selector showed even with no second shop to switch to — failing test-phase2-cafe-multishop-prod at 5/6. On Pro+>1-shops or Starter the user saw two selectors stacked. Fix: remove the page-level renders entirely; the layout is now the single source of truth.

1 cafe commit shipped + 28/28 prod test green.

Regression sweep

SuiteResultNotes
test-phase2-cafe-multishop-prod.mjs6/6↑ from 5/6 — canonical proof of this fix
test-r7-prod.mjs14/14Dashboard h1 + ranking-of-pos + Live drawer all still render
test-launchpad-fix-prod.mjs8/8Prior Outdoor SSO bridge fix sanity

Run sequentially (not parallel) per the new workflow rule from this session — R8.2 single-session-per-user rotation kicks parallel tests sharing creds out.

Diff (cafe)

app/(authed)/dashboard/page.tsx
  - import { ShopSelector } from "@/components/shop-selector";
  - the <ShopSelector .../> block + flex wrapper that hosted h1 + selector
  + plain page header div with just h1 + subtitle

app/(authed)/reports/page.tsx
  - import { ShopSelector } from "@/components/shop-selector";
  - the <ShopSelector .../> block from the action-button row
  (the row keeps the Daily Report link + Export buttons)

shopCtx is still resolved on each page (used by query helpers for shop scoping).
The selector widget itself just no longer doubles up — layout owns rendering.