1# Reproducibility report — WP3823- **Pipeline:** `Makefile` targets `ingest clean match validate features models robust tables figures paper`; `WP38_LABEL=model` reruns the label-dependent targets into `data/processed_model/`, `experiments_model/`, `paper/tables_model/`, `paper/figures_model/`.4- **Determinism:** seed 20261101 for every permutation, bootstrap and sample; outputs hashed in `logs/manifest.json`; every step appends to `logs/run_ledger.jsonl`.5- **Snapshot identity:** `config/settings.yaml` holds the sha256 of the raw snapshot; `src/ingest/load_snapshot.py` asserts it before reading.6- **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.7- **External data:** `src/ingest/external.py` rebuilds `data/external/regions_external.csv` from the manifest URLs with checksums; large GeoPackages and downloads are not committed (`data/external/dl/`, `data/external/geo/`).8- **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).9- **Paper:** `cd paper && latexmk -pdf main.tex`; tables and figures are generated files and are never edited by hand.10