Staging-env fix. Verified on demo.staging 5/5 + staging smoke 5/5.
product_tmpl_id via a correlated subquery
((SELECT product_tmpl_id FROM cafe.product_product WHERE id = cafe.products.id)), which fails under the
Neon-backed staging Worker's Hyperdrive — the loader's unwrap() then swallowed the rejection into an empty
list. Prod (Supabase) tolerated it, so get-coffee was unaffected. Fix: read the column via a
LEFT JOIN on product_product.id = products.id (1:1) instead — equivalent and robust.
Proven equivalent (JOIN value ≡ subquery value, 0 mismatches) on staging AND read-only against prod
Supabase (get-coffee 121 rows, lumiere 25 rows). No schema/migration change.


| Register renders products (was empty) | pass |
| Add products → cart shows lines (full flow) | pass |
| No client page errors | pass |
| Equivalence (LEFT JOIN ≡ subquery): staging demo 6 / get-coffee 11 / lumiere 0 | 0 mismatch |
| Equivalence read-only on PROD: get-coffee 121 / lumiere 25 | 0 mismatch |
| Staging smoke | 5/5 |
nix-cafe staging 5752741
(Worker nix-cafe-staging 1a615a90). 1 file, no migration. On get-coffee's live prod POS path
when promoted, but proven behavior-identical on prod data. Parked for the scheduled prod promote.