# Referee responses — WP38 (2026-11-01) Three independent adversarial reviews were run on the first compiled draft (v1.0-draft, 48 p.): `referee_1_econometrics.md`, `referee_2_geography.md`, `referee_3_data_engineering.md`. Every must-fix item was implemented and the full pipeline was re-run under both labellings (decision D-009). Items are listed with the action taken and the effect on the conclusions. ## Referee 1 — econometrics | # | Finding | Action | Effect | |---|---|---|---| | 1 | Wild cluster bootstrap for H5 never re-projected the bootstrap disturbance `e_r·w` off the 1 064 match-group fixed effects (clusters = stores cut across groups) | `src/models/h5_hedonic.py`: disturbance group-demeaned before refitting (`gdemean`); leave-one-region-out Wald and per-region Wald contributions added | **H5-T1 p: 0.0045 → 0.0975 (not supported)**; Outaouais contributes 65.5 of 164.2; without it Wald 51.4 (13 df). H5-T2 unchanged (p 0.0041, Holm 0.016) | | 2 | H3 "power law favoured" used untruncated log-normal moments | `src/models/h3_longtail.py`: truncated discrete log-normal by MLE on the same tail; Vuong on same support | z = −1.98 with a degenerate log-normal (σ ≈ 6): families not meaningfully distinguishable; the claim is withdrawn in text; Gini/top-share thresholds unchanged → H3 still supported | | 3 | Cell-level RAA "significant" counts are bootstrap artefacts without multiplicity control | `src/models/h1_raa.py`: expected counts under 20 merchant reshuffles × 300 bootstraps added (`null_cells_sig_*`) | observed 12 cells > 1 vs null mean 2.9 (max 8); observed 66 cells < 1 vs null mean 55.5 (max 69) → "absences are more robust" sentence inverted and corrected | | 4 | "Partially supported" is not a preregistered status; abstract's "every variant / 2 000 reshuffles" inaccurate; L/T null is a power statement; S_R0-L significant; confusion matrix mismatch under model labels | `summary.py`: status follows the preregistered rule only (**H1 not supported**); text rewritten (power, 1 000 permutations for variants, S_R0-L p = 0.024 acknowledged); `robustness.py` uses the classifier's audit confusion under `WP38_LABEL=model` | H1 reported as not supported by the joint criterion; merchant-equal dependence reported descriptively | | 5 | H2 CI ignored rarefaction draws; power claim loose; unrarefied ρ ≈ 0.5 omitted; Table 2 note wrong | `diversity.py` saves the 2 000 draws, `h2_scale.py` combines them; power statement (|ρ| ≥ 0.66 at n = 16); unrarefied correlations reported in §6.3; note fixed | H2 still inconclusive for the preregistered outcome; total-variety scaling reported | ## Referee 2 — economic geography | # | Finding | Action | Effect | |---|---|---|---| | 1 | Specialization cells coincide with region-specific directories (Charlevoix, Créateurs de saveurs); the "certification-only" variant included those directories | `robustness.py`: `province_wide_sources_only` variant (1 012 stores) added; cell-directory overlap stated in §6.2 | merchant-equal V 0.120 vs null 0.098, p 0.001 → aggregate dependence survives; individual cells flagged | | 2 | H2 "no association" manufactured by rarefaction; unrarefied entropy scales with size | §6.3 rewritten as two questions (per-merchant breadth vs total variety); abstract/conclusion/§8.1 reworded; "does not reproduce" deleted | — | | 3 | Estrie/Montérégie 2021 transfer unresolved; `region_conflict` compared label with final, not polygon | `clean/stores.py`: MRC point-in-polygon (`mrc_s_raw`), platform labels "Montérégie" with centroid in Brome-Missisquoi / La Haute-Yamaska overridden to Estrie (16 stores, source `pip_transfer2021`); `region_conflict` = label ≠ polygon (124); `region_final_vs_polygon` flag (112); explicit MERN-only layer (no silent fallback) | Montérégie 179, Estrie 167 stores; H1/H2 numbers moved marginally | | 4 | H5-T1 joint test is one store (Outaouais, laboiteagrains.com); matched-sample composition | LOO decomposition and composition (26 % beauty, 24 % grocery, 15 % coffee; 64 % of groups with a reseller; 3 stores = 38 %) reported in §6.4; wording "structured by channel, not demonstrably by geography" | consistent with referee 1 | | 5 | Title says "Production"; QDACI keeps "Complexity"; LQ and rarefaction uncited; intro listed rule-label cells; number inconsistencies | Title → "Digital Retail Supply" (D-008; the mandate's title was provisional); QDACI name kept with an explicit statement; Isserman (1977) and Hurlbert (1971) verified via Crossref and cited; intro lists classifier cells; 0.73–0.89, 226/229 fixed | — | | 6–9 | S_R0-L acknowledgement; MRC-level MAUP check; straddling-FSA variant; S_R0 misnomer | all added: MRC-level V 0.185 vs 0.156 (p < 0.001, 56 MRCs); `excl_straddling_fsa_stores` (924 stores, p 0.001); `S_R0_platform_label_only` and `pip_first_regions` variants | — | ## Referee 3 — data engineering and reproducibility | # | Finding | Action | Effect | |---|---|---|---| | 1 | Match-validation precision divided "yes" by all pairs, not consensus pairs | `match_validation.py`: shares among consensus pairs + lower bounds | A 0.98, B 1.00, C 0.89, D 0.21 (lower bounds 0.92/0.90/0.77/0.17); text, abstract, phase-2 audit, limitations updated | | 2 | Audit sample drawn before the sibling rule (1 uid outside the assortment sample); label CSVs not hashed; no merchant holdout | disclosed in L-17; label CSVs committed and registered in `logs/manifest.json` | — | | 3 | H4 built on surviving listings only | `h4_dynamics.py`: all published listings from `listings_raw` (461 011 incl. 71 722 inactive) | model: coef 0.102 (SE 0.031), placebo p 0.005; rule: 0.093 (0.054), p 0.055 — still exploratory | | 4 | Text/repo inconsistencies (reproducibility statement, README numbers, `.gitignore` asymmetry, Makefile targets, stale dictionary/source audit) | reproducibility statement rewritten; README numbers regenerated; `data/processed_model/` ignored, ledger/manifest/label CSVs committed; `categories` target and `summary` added to Makefile; dictionary regenerated; source audit updated | — | | 5 | `region_dbfirst` misnomer (was PIP-first); silent layer fallback; ledger without label | renamed `region_pipfirst`; S_R0 = platform-label-only; MERN layer only; `ledger()` records `WP38_LABEL` | — | ## Net effect on the conclusions - H1: "partially supported" → **not supported by the preregistered joint criterion**; the merchant-equal dependence is robust (all variants, MRC level, province-wide sources) and reported descriptively. - H3: supported; the power-law-vs-log-normal claim withdrawn. - H5-T1: supported → **not supported**; H5-T2 unchanged (supported). - H2, H4, H6, H7, QDACI: statuses unchanged; H2 text now distinguishes per-merchant breadth from total variety. - Matching precision revised upward (0.98–1.00); H4 re-estimated on the complete listing history.