1# WP37 — The Hidden Architecture of Grocery Prices: Promotions, Retail Competition, and the Cost of Living in Quebec23**UQO Working Paper No. 37** — Simon-Pierre Boucher, Département des sciences administratives, Université du Québec en Outaouais. Version 1.0, November 2026.45Reproducible research pipeline built on a **read-only snapshot** of the Food-Ka database (owner export, 2026-11-01). Nothing in production was modified; the raw snapshot is not committed (`data/raw/README.md` documents provenance and checksum).67## Layout8```9CLAUDE.md mandate (verbatim)10config/settings.yaml paths, seed (20261101), snapshot identity, scope11config/basket.yaml preregistered 30-item basket (frozen)12research/preregistration.md frozen hypotheses H1–H6, estimands, analysis plan (sha256 in research/decisions.md)13research/decisions.md decision log and amendments A-001 … A-00314src/ingestion snapshot → parquet; Statistics Canada WDS benchmarks15src/cleaning unit normalisation, retailer hierarchy, daily/weekly panel reconstruction, coverage16src/matching tiered cross-banner matching, UPC calibration, LLM second annotation, validation17src/econometrics matched panels, Model A (dispersion), B (promotions), C (spillovers), robustness18src/indices Model D (indices), Model E (basket MIP), QGPAI19src/forecasting Model F (rolling-origin forecasts)20src/reports Phase 1 audit, LaTeX tables, figures21literature/ seed references, Crossref-verified metadata, evidence matrix22experiments/ JSON summaries of every model23paper/ main.tex, sections/, tables/, figures/, references.bib, main.pdf24reports/ phase0_feasibility, phase1_data_audit, referee_1, referee_2, limitations, reproducibility25logs/ run ledger (md + jsonl), manifests with SHA-256 of outputs, pipeline log26tests/ pytest (units, panel invariants, matching rules, output consistency)27```2829## Reproduce30```31make env # uv venv (Python 3.12) + pinned deps (requirements-lock.txt)32make ingest panel match validate phase4 phase5 robust tables figures paper33make test34```35The LLM second annotation (`src/matching/llm_annotate.py`) needs `ANTHROPIC_API_KEY` in `.env`; its labels are stored in `data/processed/match_validation_sample.csv` so the rest of the pipeline runs without API access. Total LLM cost of the project: 1.21 USD (three annotation runs, logged in `logs/run_ledger.jsonl`).3637## Key design decisions (see reports/phase0_feasibility.md and reports/phase1_data_audit.md)38- Posted price = weekly duration-weighted modal price (store-mixture noise in anti-bot storefront feeds).39- Primary matching tiers A (UPC) + B (brand + package + identical token set); C and D in sensitivity only.40- No store geography, no regular-price history, no quantities: H4 geography and QGPAI component 5 are explicitly not computed.41