- search.ts: score on the core name (brand/size stripped): exact or query+base suffix
(kipdij+filet), head-final compounds, prefix, inside; penalties per extra word and per
flavour/processing word (search-words.ts, editable); bonuses for store brands, the
query's dominant category, store count, favourites; trigram tiebreak
- groceries.synonyms table (seeded: kipdij/kippendij, pasta → spaghetti, …) expands queries
- list rows show all pack sizes of a group; group picker uses the same ranking
- scripts/groceries-search-eval.ts prints top results + latency; preflight now 8 tables