Release checklist

This page is intended for maintainers preparing a tagged release (PyPI + Read the Docs).

What this project can and cannot claim

For a tagged release, dkx can claim the following only when the corresponding release artifacts are regenerated from the tagged commit:

  • full CPU and GPU parity for the vendored 39-case example suite, including the compact release-audit extra input recorded in the tracked suite roots,

  • no jax_error or max_attempts in the release-facing suite artifacts,

  • matching sfincsOutput.h5 common numeric datasets, zero missing Fortran top-level output keys in JAX, and the required terminal-output signals for the supported examples.

  • transport-worker GPU parallelism for independent RHS/case throughput on the checked two-GPU benchmark lane.

The authoritative release-facing artifacts for this state are:

  • tests/scaled_example_suite_release_cpu_2026-05-08_production_tokamak

  • tests/scaled_example_suite_gpu_bounded_default_2026-05-08_lu3000_pas

What should still be stated carefully:

  • the CLI defaults are explicit and performance-oriented, not differentiable by default,

  • differentiable solve paths are available from Python when requested,

  • production-resolution QI CPU/GPU seed ladders remain bounded-proxy evidence,

  • true differentiable device-QI closure is deferred research, not a release blocker,

  • single-case multi-GPU strong scaling remains experimental and must not be presented as the release scaling story,

  • and remaining work is concentrated on runtime and memory optimization of the heaviest PAS and geometry-rich cases.

Before shipping a release, make sure README.md, docs/fortran_comparison.rst, and the performance/parallelism pages accurately reflect the supported behavior of the code.

Bounded artifact refreshes

These commands refresh release-facing plots and tables without launching new full-suite solves:

python examples/publication_figures/generate_fortran_suite_benchmark_summary.py

# Canonical-stack README figures (recorded measured values):
python tools/benchmarks/readme_figures.py

python examples/publication_figures/generate_w7x_high_nu_performance.py

# Historical PAS fallback campaign scripts live on the research branch.
# Stable releases should rely on checked solver-policy artifacts unless a
# promoted default route is added with residual/runtime/RSS gates.

The manual GitHub workflow Production Benchmark Inputs should also pass before a release. It validates that the generated DKX-owned benchmark manifest still has 39 cases, uses the documented 25 x 51 x 4 x 100 3D floor and 33 x 1 x 12 x 140 tokamak floor, applies the calibrated 89 x 1 x 24 x 300 RHSMode=1 PAS/no-E_r tokamak floor, and does not include downstream project decks.

Packaging sanity check

Before tagging:

  • update pyproject.toml and dkx.__version__ together,

  • verify pytest -q tests/test_package_metadata.py passes,

  • ensure the intended tag is exactly v<package-version>,

  • ensure GitHub CI and Docs are green on the commit being tagged.

The PyPI workflow validates tag/version consistency and runs twine check on the built distributions before publishing.

CI uses an isolated build environment. Locally, if you are in an offline/sandboxed environment, an isolated build may fail due to missing network access. In that case, use:

python -m build --no-isolation

Fixture generation note (Fortran v3)

Many parity tests rely on frozen Fortran v3 fixtures (PETSc binaries and/or sfincsOutput.h5). Generating new fixtures requires a working v3 executable and an MPI/PETSc runtime environment that can complete MPI_Init. Some sandboxed CI environments can block network endpoints and cause the Fortran executable to fail at startup; generate fixtures on a normal workstation/HPC environment and commit the resulting reference files under tests/ref/.