Skip to content

Make targets

The repository splits its targets into two families: solver-* drives the Rust optimiser, research-* drives the Python validation and analysis tooling.

TargetExpands to
solver-buildcargo build
solver-testcargo test
solver-clippycargo clippy
solver-lintcargo clippy -- -D warnings && cargo fmt --check
solver-fmtcargo fmt
solver-homelabplan against the bundled homelab dataset
solver-irinaplan against the hyperscale irina dataset
solver-irina-pareto-80as solver-irina, with --pareto 80

All of them run from the solver/ directory.

Terminal window
cd solver && cargo run --release -- plan \
--infra testdata/homelab_infra.yaml \
--workloads testdata/homelab_workloads.yaml

Small dataset, near-instant. The right target for a first run or a quick sanity check after a change.

Terminal window
cd solver && cargo run --release -- plan \
--infra testdata/irina_infra.yaml \
--workloads testdata/irina_workloads.yaml

The datacenter-scale benchmark — 186 nodes, 2,714 pods. Triggers the large-tier GA configuration.

The same as above with --pareto 80, solving against 80% of node capacity to leave operational headroom.

These use uv to manage dependencies, so uv must be installed.

TargetPurpose
research-generate-testdataGenerate the irina 8-dimensional test dataset
research-homelabDelegate to research/Makefile’s immediate_run
research-irinaDelegate to research/Makefile’s irina_stress
research-inspectValidate a solution and render the heatmap dashboard
research-full-pipelineGenerate → solve → inspect → prove, end to end
Terminal window
uv run --with pyyaml python research/inspector.py \
--infra solver/testdata/irina_infra.yaml \
--workloads solver/testdata/irina_workloads.yaml \
--solution solver/kuberina_solution.yaml \
--output kuberina_dashboard.html

Produces kuberina_dashboard.html, an interactive cluster heatmap.

The complete validation chain, in four announced stages:

  1. Generate 8D test data — research/gen_irina_testdata.py
  2. Solve against it — plan with --pareto 80
  3. Inspect and validate — research/inspector.py
  4. Formal mathematical proof — research/mathematical_proof.py

This is the target that reproduces the claims in the paper. Run it after any change to the solver’s optimisation logic.

Note that this target reads its test data from research/testdata/ rather than solver/testdata/, because it generates the data itself as step one.