$ R=$PWD; D=data/interstationary; for n in 1 2; do
>   O=/tmp/run/$n/output; mkdir -p $O
>   python3 packs/variance-bridge/skills/revenue-bridge/scripts/bridge.py --input $D/customers_fy24_fy25.csv --output $O/bridge.json
>   python3 packs/variance-bridge/skills/budget-vs-actual/scripts/bva.py --input $D/pnl_fy2025.csv --output $O/bva.json
>   python3 packs/variance-bridge/skills/price-volume-mix/scripts/pvm.py --input $D/products_fy24_fy25.csv --output $O/pvm.json
>   python3 packs/variance-bridge/skills/forecast-accuracy/scripts/accuracy.py --forecasts $D/forecast_versions_fy2025.csv --actuals $D/pnl_fy2025.csv --output $O/accuracy.json
>   python3 packs/management-reporting/skills/kpi-scorecard/scripts/scorecard.py --kpis $D/kpis_fy2025.csv --pnl $D/pnl_fy2025.csv --output $O/scorecard.json
>   python3 packs/management-reporting/skills/mbr-narrative/scripts/mbr.py --pnl $D/pnl_fy2025.csv --kpis $D/kpis_fy2025.csv --output $O/mbr.json
>   python3 packs/management-reporting/skills/exec-summary/scripts/summary.py --pnl $D/pnl_fy2025.csv --kpis $D/kpis_fy2025.csv --output $O/summary.json
>   cp packs/management-reporting/tests/fixtures/good-deck-assembly.json $O/slide-map.json
>   (cd $O/.. && python3 $R/packs/management-reporting/skills/deck-assembly/scripts/build_deck.py --slide-map output/slide-map.json --output output/deck.json)
>   python3 packs/close-reconciliation/skills/flux-analysis/scripts/flux.py --input $D/trial_balance_2025.csv --output $O/flux.json
>   python3 packs/close-reconciliation/skills/account-rec-review/scripts/rec_review.py --recs $D/account_recs_2025-12.csv --items $D/rec_items_2025-12.csv --tb $D/trial_balance_2025.csv --output $O/recs.json
>   python3 packs/close-reconciliation/skills/accrual-review/scripts/accruals.py --accruals $D/accruals_2025-12.csv --tb $D/trial_balance_2025.csv --output $O/accruals.json
>   python3 packs/close-reconciliation/skills/close-checklist/scripts/checklist.py --input $D/close_checklist_2025-12.csv --output $O/checklist.json
>   python3 packs/forecast-planning/skills/driver-forecast-review/scripts/drivers.py --input $D/drivers_fy2026.csv --output $O/drivers.json
>   python3 packs/forecast-planning/skills/scenario-memo/scripts/scenarios.py --input $D/scenarios_fy2026.csv --output $O/scenarios.json
>   python3 packs/forecast-planning/skills/cash-forecast-13wk/scripts/cash13.py --input $D/cash_13wk_2026.csv --output $O/cash13.json
>   python3 packs/forecast-planning/skills/assumption-register/scripts/register.py --input $D/assumptions_fy2026.csv --output $O/register.json
> done > /dev/null
$ cd /tmp/run && for f in $(ls 1/output); do sha256sum 1/output/$f 2/output/$f; done
acc98a688b2ce8791fd3c0d00758118c146ccfb4d3f54b7b297cd425ad5fd2e0  1/output/IS_MBR_2025-12.pptx
acc98a688b2ce8791fd3c0d00758118c146ccfb4d3f54b7b297cd425ad5fd2e0  2/output/IS_MBR_2025-12.pptx
e0c84e42ef80fea20066767bd2632a3515f2c65a73538c3c4bffc19e23dcf04c  1/output/accruals.json
e0c84e42ef80fea20066767bd2632a3515f2c65a73538c3c4bffc19e23dcf04c  2/output/accruals.json
1e2f674f9d4dad4d6570247e7425193f077ecf46e46092cd21fd75a71653bec2  1/output/accuracy.json
1e2f674f9d4dad4d6570247e7425193f077ecf46e46092cd21fd75a71653bec2  2/output/accuracy.json
1e2d769cc258aa81854a5bb6de8e665adaed117cac68d1ce0c836ec1876b8e94  1/output/bridge.json
1e2d769cc258aa81854a5bb6de8e665adaed117cac68d1ce0c836ec1876b8e94  2/output/bridge.json
72d3f669f0a98746197702e67cc3c3ecc589e41d55be09f478c845ea4ab1f85e  1/output/bva.json
72d3f669f0a98746197702e67cc3c3ecc589e41d55be09f478c845ea4ab1f85e  2/output/bva.json
a28b451b58aebf6bc317e6fc8b3482a71867cee62923db3405a5e25a09c14acc  1/output/cash13.json
a28b451b58aebf6bc317e6fc8b3482a71867cee62923db3405a5e25a09c14acc  2/output/cash13.json
1767583d6a5340fa78959938c1d975f4adbd1d0b890988304d9ec28e24abec6b  1/output/checklist.json
1767583d6a5340fa78959938c1d975f4adbd1d0b890988304d9ec28e24abec6b  2/output/checklist.json
a8e3fa496107e55da0e65b5993d69445b40fe6347bc52f42de71a25a1a30c1ee  1/output/deck.json
a8e3fa496107e55da0e65b5993d69445b40fe6347bc52f42de71a25a1a30c1ee  2/output/deck.json
aa6e6b99a86c4c1f7ab5e67e284595e76f10c37fac7240c291abc4db26d08ea4  1/output/drivers.json
aa6e6b99a86c4c1f7ab5e67e284595e76f10c37fac7240c291abc4db26d08ea4  2/output/drivers.json
12faf246c822a574ab215f3075a61f768cc219084e5c9dabcf01cf0dc8cfd613  1/output/flux.json
12faf246c822a574ab215f3075a61f768cc219084e5c9dabcf01cf0dc8cfd613  2/output/flux.json
6c376af2543d274e548b23b6821a3bb6e285dec7361d37cda0db05e16fa5a65b  1/output/mbr.json
6c376af2543d274e548b23b6821a3bb6e285dec7361d37cda0db05e16fa5a65b  2/output/mbr.json
2f345342632e2935d7f3c54a482e554f96e12ce4dbba76187fcce4755d01bf01  1/output/pvm.json
2f345342632e2935d7f3c54a482e554f96e12ce4dbba76187fcce4755d01bf01  2/output/pvm.json
d837b286104bd6227e926498932148ee6769464e2a2be81d16d38302ae7a2ab5  1/output/recs.json
d837b286104bd6227e926498932148ee6769464e2a2be81d16d38302ae7a2ab5  2/output/recs.json
9b066c4c6f03e27713daf71fc26df8430361909018507c9f6b7f2e75601d5128  1/output/register.json
9b066c4c6f03e27713daf71fc26df8430361909018507c9f6b7f2e75601d5128  2/output/register.json
a2e3665ec9d0c5a9940487013bd85401f20f3b4f52e70301b70b418ad10c158d  1/output/scenarios.json
a2e3665ec9d0c5a9940487013bd85401f20f3b4f52e70301b70b418ad10c158d  2/output/scenarios.json
36f4fb0f2831b7b4b920ab6e5079fb11dd53d6f67344ce3fa12eea91aee2c048  1/output/scorecard.json
36f4fb0f2831b7b4b920ab6e5079fb11dd53d6f67344ce3fa12eea91aee2c048  2/output/scorecard.json
b1914081667445f79aa1c64390cff11ac4952571dc15856fbbee24781e28aefd  1/output/slide-map.json
b1914081667445f79aa1c64390cff11ac4952571dc15856fbbee24781e28aefd  2/output/slide-map.json
28b7f7351b20ac6c82cdbba732828e59c869cfbaf6e38e16da5101ddf4333378  1/output/summary.json
28b7f7351b20ac6c82cdbba732828e59c869cfbaf6e38e16da5101ddf4333378  2/output/summary.json
$ diff -r /tmp/run/1 /tmp/run/2 && echo 'run 1 and run 2: every file byte-identical'
run 1 and run 2: every file byte-identical
$ for g in variance-bridge/revenue-bridge:bridge variance-bridge/budget-vs-actual:bva \
>     variance-bridge/price-volume-mix:pvm variance-bridge/forecast-accuracy:accuracy \
>     management-reporting/kpi-scorecard:scorecard management-reporting/mbr-narrative:mbr \
>     management-reporting/exec-summary:summary management-reporting/deck-assembly:deck \
>     close-reconciliation/flux-analysis:flux close-reconciliation/account-rec-review:recs \
>     close-reconciliation/accrual-review:accruals close-reconciliation/close-checklist:checklist \
>     forecast-planning/driver-forecast-review:drivers forecast-planning/scenario-memo:scenarios \
>     forecast-planning/cash-forecast-13wk:cash13 forecast-planning/assumption-register:register; do
>   p=${g%%/*} leaf=${g#*/}; leaf=${leaf%%:*} out=${g##*:}
>   cmp -s /tmp/run/1/output/$out.json packs/$p/tests/golden/$leaf.json \
>     && echo "same bytes as the golden file: $out.json" || echo "DIFFERS from packs/$p/tests/golden/$leaf.json"
> done
same bytes as the golden file: bridge.json
same bytes as the golden file: bva.json
same bytes as the golden file: pvm.json
same bytes as the golden file: accuracy.json
same bytes as the golden file: scorecard.json
same bytes as the golden file: mbr.json
same bytes as the golden file: summary.json
same bytes as the golden file: deck.json
same bytes as the golden file: flux.json
same bytes as the golden file: recs.json
same bytes as the golden file: accruals.json
same bytes as the golden file: checklist.json
same bytes as the golden file: drivers.json
same bytes as the golden file: scenarios.json
same bytes as the golden file: cash13.json
same bytes as the golden file: register.json
