# Referee report 2 — WP37 (internal, skeptical: data provenance, integrity, reproducibility, citations) Role: data and integrity referee. Checks whether every statement in the manuscript is traceable to an authorised, logged artefact and whether the integrity rules of the mandate were respected. ## Provenance and authorisation - Raw data: owner export (`.backup` through a read-only connection) of a database owned by the PI; SHA-256 recorded and re-verified at every ingestion (`src/common.verify_snapshot`). Production untouched (no write path exists in the pipeline). **Pass.** - `robots.txt` disallows `/api/`; the public API was hit exactly once (homepage cross-check), logged in `reports/phase0_feasibility.md`. **Pass.** - No credentials in logs: `logs/phase0_api_credentials.txt` shows only key length/prefix. `.env` is git-ignored. **Pass.** - External data: Statistics Canada WDS, public, raw JSON kept with timestamps. **Pass.** ## Integrity rules of the mandate | Rule | Check | |---|---| | No fabricated observations | all tables generated by code from the snapshot; `tests/test_outputs.py` ties counts to source | | Listed ≠ paid prices; disappearance ≠ sale; tag ≠ discount | stated in §1, §3, §9; promotions "inferred" throughout | | Do not assume history/stores/IDs/API | Phase 0 report documents each; stores: unavailable; IDs: UPC for 2 feeds only | | 54 banners ≠ 54 chains | retailers table: 61 feeds → 52 banners → 37 companies; channel split; same-company flag | | Matched counted separately | attrition table: 13 088 matched of 124 579 | | Exploratory vs causal | Model C explicitly descriptive; lead placebo reported as failed | | Preregistration before results | `research/preregistration.md` hashed; three amendments logged with rationale | | Null results reported | H5 market-level null; H3 economically null; Model F naive beats ML on MAE | | No production change | prospective design described, not implemented | ## Reproducibility - Full pipeline re-run from the raw snapshot after the manuscript was written (`logs/rerun/full_rerun.log`); JSON summaries compared by hash before/after — see `reports/reproducibility.md` for the outcome. - Independent recomputation of the weekly modal price, H1 median gap, AR(1), banner effects (pairwise within-estimator), promotion share, volatility ratio and chained Jevons with a different code path (DuckDB SQL + statsmodels) — `reports/audit_recompute.json`. - Seeds fixed; LLM annotation stored so the pipeline is API-independent. ## Citations - 75 references; 73 resolved through Crossref DOIs, 2 (Varian 1980, Feenstra 1994) documented as DOI-less with JSTOR stable URLs, 1 report (Competition Bureau 2023) with URL. Three references first resolved to SSRN preprints were re-resolved to the journal versions (Chevalier–Kashyap–Rossi 2003 AER; Hottman–Redding–Weinstein 2016 QJE) or marked as a working paper (Gourville–Koehler 2004). `references.bib` is generated from the verified CSV; no hand-typed entries. **Pass.** - Every claim in the literature section is linked to a verified key in `literature/evidence_matrix.csv`. ## Concerns 1. The LLM annotator and the reviewer share the same prompt context in effect (the operator read the pairs after seeing the LLM labels); independence is not established. The manuscript now says "PI adjudication pending". 2. Company attributions for affiliated banners (Richelieu, Marché Ami, Axep, Inter-Marché, Club Entrepôt, Rachelle-Béry) come from the Food-Ka registry text; they affect only the same-/cross-company split and are marked `ownership_basis = registry`. Should be verified against corporate sources before publication. 3. Three post-registration amendments were needed. Each is defensible and logged, but A-001 changes the basket sample materially (7 → 15–18 items); the preregistered version's result (7 items) is not reported in the paper — it should be mentioned in §8. (The decision log has it.) 4. The `Autres` category (19 % of active listings) is a residual bucket; category-level results exclude it implicitly where n < 50 but the index results include it. ## Recommendation Provenance, integrity and citation gates pass. Reproducibility gate conditional on the re-run comparison in `reports/reproducibility.md`.