Reproducibility report — WP38
- Pipeline:
Makefiletargetsingest clean match validate features models robust tables figures paper;WP38_LABEL=modelreruns the label-dependent targets intodata/processed_model/,experiments_model/,paper/tables_model/,paper/figures_model/. - Determinism: seed 20261101 for every permutation, bootstrap and sample; outputs hashed in
logs/manifest.json; every step appends tologs/run_ledger.jsonl. - Snapshot identity:
config/settings.yamlholds the sha256 of the raw snapshot;src/ingest/load_snapshot.pyasserts it before reading. - LLM dependence: category audit (claude-opus-5-5 + gpt-5.5), match validation (same), classifier training labels (claude-sonnet-5-5), embeddings (text-embedding-3-small). All labels/embeddings are cached (
data/processed/*.csv,data/interim/listing_embeddings.npy); the pipeline runs without API keys once they exist. Costs and token counts per run are in the ledger. - External data:
src/ingest/external.pyrebuildsdata/external/regions_external.csvfrom the manifest URLs with checksums; large GeoPackages and downloads are not committed (data/external/dl/,data/external/geo/). - Tests:
make test(7 invariants: monotone sample flow, price-sample subset, one representative per (store, title), no sibling duplicates, canonical regions, store/listing count consistency, cross-store matches only). - Paper:
cd paper && latexmk -pdf main.tex; tables and figures are generated files and are never edited by hand.