All experiments cited in the manuscript follow the same FHOPS CLI pipeline so readers can replay each stage without bespoke tooling:

  1. Validate or snapshot scenarios. Run fhops validate <scenario.yaml> for each bundle (e.g., examples/tiny7 and examples/med42) and, when needed, snapshot synthetic tiers via fhops synth generate out/synthetic_<tier> --tier <tier> --seed <seed> (one call per tier, fixed RNG seeds).

  2. Benchmark solvers. Invoke fhops bench suite with explicit --scenario and --out-dir arguments (for the manuscript: docs/softwarex/assets/data/benchmarks/<slug>/) plus the desired heuristics (--include-ils, --include-tabu) and iteration budgets.

  3. Run the tuning harness. Launch python docs/softwarex/manuscript/scripts/run_tuner.py (which calls scripts/run_tuning_benchmarks.py; wrapped by docs/softwarex/manuscript/scripts/generate_assets.sh) to produce leaderboard/comparison tables in docs/softwarex/assets/data/tuning/.

  4. Replay schedules. Call fhops eval-playback on the best SA/ILS assignments (deterministic and stochastic modes) so utilisation and downtime metrics land under docs/softwarex/assets/data/playback/<scenario>/<solver>/<mode>/.

  5. Estimate costs. Execute fhops dataset estimate-cost for each machine bundle to capture owning/operating/repair totals in docs/softwarex/assets/data/costing/.

  6. Synthetic scaling sweep. Use python docs/softwarex/manuscript/scripts/run_synthetic_sweep.py to regenerate runtime-vs-size CSV/JSON + plots under docs/softwarex/assets/data/scaling/.

docs/softwarex/manuscript/scripts/generate_assets.sh runs all six steps with the published budgets and writes repository-relative paths into the assets. Run through make manuscript-benchmarks (run_manuscript_benchmarks.sh), it appends the commit, asset mode, runtime, and an SHA-256 hash of the committed asset files to docs/softwarex/assets/benchmark_runs.log, a single provenance log for all artefacts; make verify-assets-hash recomputes the hash.