| ✓ | Prod: cafe.product_template.track_inventory column exists, default false, NOT NULL (direct Supabase information_schema query) |
| ✓ | SSO login on lumiere-coffee.nixtech.app |
| ✓ | /cafe/products renders + "+ New ▾" dropdown trigger visible |
| ✓ | "+ New ▾" dropdown opens with 4 items: New record, Import records, Export All (disabled), Spreadsheet (disabled) |
| ✓ | Click "Import records" → routes to /cafe/products/import; Upload stage + template download link + drop zone render |
| ✓ | setInputFiles → mapping stage renders with 9 mapping rows; first column auto-maps to sku |
| ✓ | Click Test → green validation-ok banner ("3 rows ready to import") |
| ✓ | Click Import → result stage renders + summary tiles: 1 template / 3 variants / 0 skipped / 1 category / 1 attribute / 3 values |
| ✓ | DB verify on prod Supabase: 1 template (track_inventory=false, is_hidden=false from show_on_pos=TRUE) + 3 variants (prices "1.25" / "1.75" / "2.00") + 1 category (id matches template.category_id) + 1 attribute + 3 values (HOT / ICE / FRAPPE) |
| ✓ | Re-upload same XLSX → result stage shows 0 templates created, 0 variants added, 3 variantsSkipped — skip-existing dedup confirmed end-to-end |
| ✓ | No 5xx during the suite |