Every item traces to a finding in the audit report. The ordering is by severity: clear the blockers, then the should-fixes, then the polish. Items are written so they can be checked off literally.
🚀 Slice D — the pre-flip / pre-tag punch list (maintainer executes)¶
Added 2026-07-11 at the close of the pre-public improvement program (Slices A–C).
These are the concrete actions between “repo goes public” and “tag v0.1.0”, in
order. Every claim below was re-verified against the repo on 2026-07-11.
Before or at the public flip:
Re-enable the 3 GitHub Actions workflows. All three are
disabled_manuallyin the repo settings (the YAML itself is current):tests.yml(PR gate),physics-validation.yml(slow lane),docs.yml(docs gate). Re-enable in Settings → Actions, then confirm one green run on a real PR before trusting them.Fix the stale Python-3.10 matrix leg first.
pyproject.tomldeclaresrequires-python = ">=3.11", but.github/workflows/physics-validation.ymlline 62 still runs a"3.10"matrix leg (and the comment above it, line 54, still says>=3.10). Change the matrix to["3.11", "3.13"]and fix the comment — otherwise the first CI run after re-enable fails on an unsupported interpreter, not on physics.Add
CONTRIBUTING.md. Minimum useful content: uv-based setup (uv pip install -e ".[dev]"with the side-by-sidejaxstrocheckout), the two-tier local gate (FAST-m "not slow"/ FULL), the JAX-native ground rules (no numpy/scipy on core paths, differentiability non-negotiable), and that PRs must passmake -C docs/website gatewhen they touch docs.
At the v0.1.0 tag:
Add
CITATION.cff+ mint the Zenodo DOI. File does not exist yet. Enable the GitHub–Zenodo integration before pushing the tag (Zenodo archives on tag-push), then backfill the minted DOI intoCITATION.cffand the README. Template details in release strategy.Add an sdist include/exclude. The build backend is hatchling and only a
[tool.hatch.build.targets.wheel]table exists — the sdist currently bundles ~20 MB ofdocs/(built figures included) and internal files. Add a[tool.hatch.build.targets.sdist]table withexclude(at minimumdocs/,laboratory/,audits/,papers/,.brain-drafts/,tests/experimental/) or an explicitincludeallowlist, then verify withuv build --sdist+tar -tzf dist/*.tar.gz | head -50.Fix the hardcoded path in
scripts/check.sh(line 77). The clean-venv wheel smoke installs/Users/anna/projects/jaxstro-dev/jaxstroverbatim. Replace with a repo-relative resolution, e.g."$(cd "$(dirname "$0")/../../jaxstro" && pwd)", so the gate script survives on any checkout (CI included).
After the tag — get it on PyPI:
Publish
progenaxto PyPI (added to scope 2026-07-11). This is gated on the dependency story: the wheel depends on the siblingjaxstro, which is also unpublished, sojaxstromust reach PyPI first (or the strategy in release strategy — namespace package / vendor / git-URL — must be decided instead). Concrete steps once decided:Publish
jaxstro(its own gate + tag).Replace the
[tool.uv.sources]local-path dependency with a versioned PyPI pin (jaxstro>=X.Y).uv build→twine check dist/*→ upload to TestPyPI and verifypip install progenaxin a clean venv resolves end-to-end.Upload to PyPI (
twine uploador a trusted-publisher GitHub Action on the tag). A GitHub source release does NOT wait on this — flip/tag first, PyPI after.
❌ Blockers — must resolve to claim “released”¶
Resolve the
jaxstrodependency story (R2). An outsider cannotpip install progenaxwhile the runtime depends on the unpublishedjaxstro. Decision deferred to the maintainer (PyPI-first / namespace package / vendor / git-URL) — see release strategy. Not a blocker for a GitHub source tag; a hard blocker for PyPI.Re-enable CI (D8). Three GitHub Actions workflows are
disabled_manually. Re-enabletests.yml(PR gate),physics-validation.yml(release-tag slow lane), anddocs.yml(the docs gate — 0 broken.mdlinks + 0 MyST content warnings, viamake -C docs/website gate; added + validated locally 2026-06-20, including negative tests, but never run on GitHub). Confirm a green run on a real PR before tagging.
⚠️ Should fix before a polished public launch¶
Fix the stale
validate_king.py(D2/T11). (done 2026-06-18) Dropped the removedr_t=kwarg at both call sites; script exits 0 and writes all 5 figures.Document
MichieProfile(D4). (done 2026-06-18) Full docstrings added tofrom_W0_rc,__init__,.sample_positions,.density.Fill
TruncatedIMF.ppfand the IMF mass-ratiopdf/cdf/ppfReturns docstrings (D4). (done 2026-06-18)Decide the units-policy split (D4/A2). (done 2026-06-18 — breaking sweep) Chose the explicit- sweep: the five
*VelocityDF.sample_velocities,MultiComponentCluster.sample_cluster, andsample_velocities_pipelinenow require explicit (noG=Nonedefault);VelocityDFprotocol contract aligned; CHANGELOG breaking entry added.Resolve the
40-howto/stubs (D6). (done 2026-06-18) Authored the 4 progenax-only how-tos (each code block run-verified);interface-with-gravaxbacklogged out of the TOC until gravax matures.Fix the internal-doc links (D6). (done 2026-06-18; re-verified in the docs-hardening pass) Rewrote/removed the
../../plans/and../../notes/links in the real-source pages. The docs-hardening pass added a dedicated link-integrity gate (scripts/check_links_and_counts.py) — MyST silently passes bad.mdtargets, so this catches what the build does not — and drove the broken-link count to 0 (the 7 broken.mdlinks it first surfaced, including the 6 expecting a99-bibliography/index.mdlanding, are all fixed).Fetch or downgrade two cited-but-not-held references (D6). (done 2026-06-18 — held + verified) B&M82, Baumgardt&Makino 2003, and Strigari+2007 PDFs ingested; per-paper notes written;
project_dispersion/tidal.pycitations corrected to the verified primaries (σ_los→B&M82 Eq.7; σ_pmR/σ_pmT→Strigari+2007 Eqs.2/3;jacobi_radius_isothermal→BM03 Eq.1; fill-factor BM03 mis-attribution removed). All formulas verified correct against the PDFs.Reconcile the repository URL (D7). (done 2026-06-18)
myst.yml+ generated API pages now usegithub.com/jaxstro/progenax.Hold the OED demos out of v0.1.0 (D10). (executed in the docs-hardening pass) The OED code is still held for the planned informax package. The docs were trimmed to a single public overview (
60-science-demos/optimal-design/index.md), which states plainly that the OED tooling is prototyped and not part of v0.1.0; the five worked-example detail pages were sethidden: true(built and URL-reachable, kept out of the public nav, linked from the unlisted-pages index).
ℹ️ Minor / polish (non-blocking)¶
Re-verify the scanned-PDF anchors for the methods paper (D6). EFF (1987), Plummer (1911), Michie (1963), Kroupa (2001) are scanned images; verify their load-bearing values visually before publication. (Demircan & Kahraman 1991 was re-verified during this audit.)
Reconcile the experimental test count. Docs say 322; the suite collects 351 (343 non-slow). Prefer “see CI for the live count” over a pinned number.
Trim the sdist (~20 MB). It bundles
docs/including built figures; optionally exclude_build/figures from the sdist.Scrub the public dev-log. (done in the docs-hardening pass) The
90-development-log/section was curated and modernised, its absolute home paths and internal-archive pointers were scrubbed, and the whole section was sethidden: true(kept out of the public nav; linked from the unlisted-pages index). The companion absolute-path and internal-pointer leaks in the validation pages were scrubbed in the same pass.Optionally auto-execute
docs/code blocks the way the README blocks are, to machine-protect the tutorials.
✅ Verified green — no action needed¶
Full test gate: 1561 passed / 2 skipped / 0 xfailed, exit 0; coverage 95.98%. (Audit-time was 1553 / 3 skip / 1 xfail / 95.96%; the OM-Plummer oracle closed the skip and the follow-on #4 arc closed the Michie- xfail — C¹ PCHIP back-interp, ADR 0016. The remaining skip is the env-gated strict-refs guard.)
Physics anchors reproduce (Plummer/King/EFF , King , Engine-B, Kepler).
Gradient integrity: 97 AD-vs-FD cases, 0 hazards; all 4 registries full.
JAX-native discipline: no hardcoded , no numpy/scipy on core paths,
while_loopcorrectly fenced.myst build: 178 pages, 0 content warnings; no fabricated literature content. (172 at the 2026-06-17 audit; the docs-hardening pass added a bibliography landing, missing per-paper notes, and the unlisted-pages index while consolidating the gravoturbulence subsection.)Packaging: wheel clean,
twinepasses, LICENSE + metadata present, clean-venv import works.README examples execute (9 blocks) in CI.
Nine of ten prior-audit blockers (R1, R3–R10) verified fixed.
📚 v0.1.0 documentation-hardening pass — release provenance¶
A dedicated pass made the docs site correct, honest, and warning-clean for the v0.1.0 public source release. It ran in two phases:
A hybrid adversarial audit — a serial reviewer plus parallel reviewers over the theory, validation, and demos sections — to surface every drift, fabricated claim, stale count, and broken link as leads.
A section-by-section hardening in which each lead was verified against the actual
src/symbol or the source PDF before any edit, then fixed:Correctness: corrected API snippets (signatures, required
G, return shapes, the Kingr_tdifferentiability statement) and citations against the primary sources.Test-count drift → dashboard: replaced hardcoded current-tense counts with pointers to the test dashboard / “see CI for the live count”; dated changelog/audit counts were left frozen and annotated.
Link integrity: added a link/count gate (
scripts/check_links_and_counts.py) and drove broken.mdlinks to 0.Scope & navigation: consolidated the gravoturbulence theory 10 → 5 pages and moved it to
hidden: true; trimmed OED to one public overview with five hidden detail pages; curated, modernised, path-scrubbed, and hid the development log; added a99-bibliography/index.mdlanding and the missing per-paper notes.
This entry records the pass itself as release provenance; the specific outcomes are
checked off above. The genuine remaining blockers (CI re-enable, the jaxstro/PyPI
dependency story) are unaffected and still pending.