# Reproducing Dataset revision `7f423ac4cb6ab146f7ea7a37872eb4dfc3c9705c`; place the train split in `data/raw/train/`. The artifact wraps a byte-preserved base model (`63d71091d7f46e8fb11798b7c2be936cc7e0022954824a4eb98c07dc1bf9b0b3`) and differs from it only in planner policy constants. `scripts/build_hierarchical_fpt_submission.py` rebuilds it and asserts the embedded base hash. ```bash docker build -t batteryswap . docker run --rm -v "$(pwd)":/work -w /work -e PYTHONPATH=/work/src \ batteryswap /app/env/bin/python3 scripts/build_hierarchical_fpt_submission.py \ --output submission_artifacts/weekly99_planner.joblib \ --manifest submission_artifacts/weekly99_planner.json ``` Run and test: ```bash docker run --rm --network none -e BATTERYSWAP_SPLITS=train \ -e BATTERYSWAP_SUBMISSION_PATH=/out/submission.csv \ -v "$(pwd)/data/raw":/tmp/data:ro -v "$(pwd)/artifacts":/out \ batteryswap /app/env/bin/python3 script.py docker run --rm -v "$(pwd)":/work -w /work -e PYTHONPATH=/work/src \ batteryswap /app/env/bin/python3 -m pytest -q ``` Expected: 19,890 rows, byte-identical across repeated runs, inside the 30-minute and 32 GB limits. Re-pickling is not guaranteed byte-reproducible; determinism is checked on the emitted CSV.