Files
worldmonitor/shared
Elie Habib 3085e154b1 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.
2026-03-25 15:47:52 +04:00
..