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.
b1782bd (cafe) — fix(cafe): remove redundant page-level ShopSelector from dashboard + reports — layout selector is single source of truth (4 insertions, 20 deletions across 2 files)| Suite | Result | Notes |
|---|---|---|
| test-phase2-cafe-multishop-prod.mjs | 6/6 | ↑ from 5/6 — canonical proof of this fix |
| test-r7-prod.mjs | 14/14 | Dashboard h1 + ranking-of-pos + Live drawer all still render |
| test-launchpad-fix-prod.mjs | 8/8 | Prior 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.
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.