fix(grocery-index): canola oil, tighter caps, outlier gate, sticky col, wow badge (#2234)

* fix(grocery-index): switch oil to canola, tighten caps, fix scroll + wow badge

- Change oil item query from "sunflower cooking oil" to "canola oil 1L"
  and lower ITEM_USD_MAX.oil from 15 to 10 (canola tops ~$7 globally)
- Evict all *:oil learned routes on seed startup since product changed
- Tighten ITEM_USD_MAX caps: sugar 8->3.5, pasta 4->3.5, milk 8->5,
  flour 8->4.5, bread 8->6, salt 5->2.5 to prevent organic/bulk mismatches
- Add 4x median cross-country outlier gate with Redis learned route
  eviction (catches France sugar $6.94 which was 4.75x median $1.46)
- Strengthen validateFn: reject seed if <5 countries have >=40% coverage
- Fix sticky first column in gb-scroll so item names don't scroll under prices
- Add missing .gb-wow CSS rule so WoW badges render in total row

* fix(grocery-index): one-time oil migration guard, WoW version gate, main.css dedupe

P1: Gate oil route eviction behind a Redis migration sentinel (_migration:canola-oil-v1)
so it only fires once and learned canola routes persist across subsequent weekly runs.

P1: Add BASKET_VERSION=2 constant; suppress WoW when prevSnapshot.basketVersion differs
to prevent bogus deltas on the first canola seed run comparing against a sunflower baseline.

P2: Update main.css gb-item-col, gb-item-name, and gb-wow rules to match panels.css intent.
The more-specific .gb-table selectors and later cascade position caused main.css to override
sticky positioning, min-width: 110px, and gb-wow sizing back to old values.
This commit is contained in:
Elie Habib
2026-03-25 15:47:52 +04:00
committed by GitHub
parent 01f6057389
commit 3085e154b1
5 changed files with 83 additions and 17 deletions

View File

@@ -32,8 +32,8 @@
},
{
"id": "oil",
"name": "Cooking Oil",
"query": "sunflower cooking oil 1L",
"name": "Canola Oil",
"query": "canola oil 1L",
"unit": "1L"
},
{