# 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 ( |
ρ |
# 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.