# Reproducibility

```bash
python -m pip install -r requirements.txt
python scripts/prepare_spectral_data.py
python scripts/analyze_transit.py
python scripts/analyze_multisector.py
python scripts/analyze_atmospheric_evidence.py
python scripts/analyze_methane_consistency.py
python -m pytest tests -q
```

The preparation command downloads the exact Nature workbook and rejects any
byte hash other than the recorded SHA-256. For offline work, pass the workbook
with `--input PATH`. The committed 113-channel CSV has a canonical-LF hash in
`data/spectra/provenance.json`.

The spectral CSV and JSON evidence is regenerated in CI on Python 3.10, 3.12,
and 3.13 and must leave no diff. The nonlinear TESS fit is checked against
frozen scientific tolerances because SciPy/BLAS implementations can differ in
the last few optimizer digits; its platform-rendered CSV and PNG are not used
as byte-identity gates. PNG rendering is semantically checked by the test suite
but is not required to be byte-identical across Matplotlib/FreeType versions.

The externally downloaded workbook is not required during ordinary CI because
the reviewed, hashed native derivative is committed. Re-running the ingestion
path is an explicit provenance audit rather than a mutable deployment step.
