Release Checklist
Status: Current Last updated: 2026-09-06
This is the required checklist for a public batchalign3 release. The
supported distribution channel is a GitHub Release; BA3 is not published to
PyPI. A failed or unknown gate blocks the tag.
Review dependency changes and queued advisory remediation before building or pushing the candidate. Settle that scope before the final gates so a known cleanup does not force another candidate and release rehearsal.
Release artifact topology
flowchart LR
S["Reviewed main commit"] --> D["Prospective-tag dry run"]
D --> W["Five platform wheels"]
D --> SD["Source distribution"]
W --> SM["Clean wheel smoke<br/>Linux, macOS, Windows"]
SM --> T["Annotated vX.Y.Z tag"]
SD --> T
T --> R["GitHub Release"]
R --> I["Shell and PowerShell installers"]
R --> C["SHA-256 manifest"]
R --> V["Download and install verification"]
The dry run and tagged release use the same workflow. Dry run permits a
prospective version identity but never creates a release. A publishing run
requires the tag to exist and match pyproject.toml exactly.
Pre-release gates
1. Release identity
-
pyproject.toml,[workspace.package].version, andcrates/batchalign/Cargo.tomlmatch the target. -
batchalign/versionnames the same version. The Python regression test compares it with the installed wheel metadata. -
batchalign3 versionreports the target from the packaged Rust binary. - The release remains below 1.0 unless the release contract and versioning policy are promoted in the same reviewed change.
- Desktop metadata changes only if a desktop release is explicitly in scope; the normal BA3 release excludes it.
Internal crates do not all share the product version. Do not mechanically bump
batchalign-types, batchalign-fa-core, batchalign-core, or
batchalign-pyo3; their manifests intentionally retain independent internal
versions.
2. Source and CI
- The release commit is on
main, reviewed, and the worktree is clean. - All required GitHub checks for that exact commit pass.
-
make ci-fullpasses locally. It includesmake gateand writes its push receipt; do not run the same gate again if the source tree is unchanged. - The release wheel passes the Python pytest, Ruff, formatting, drift, and
mypy gates (
make batchalign-ci-python). -
make book-check,make lint-shell, andmake lint-actionlintpass. - Generated IPC, OpenAPI, dashboard, and book artifacts are current.
Regenerate and stage changed OpenAPI output before the final source gate:
its drift check compares generated bytes with the index. Shell, actionlint and
book checks run through ci-full’s gate. The optimized wheel and Python gate
remain the separate make batchalign-ci-python step.
3. Artifact dry run
- Dispatch
Batchalign Releasemanually for prospectivevX.Y.Zwithdry_run=trueagainst the release commit. - Preflight accepts the version identity.
- Five wheels build: macOS ARM and Intel, Linux x86_64 and ARM64, and Windows x86_64.
- The source distribution builds.
- Clean-wheel
--helpandversionsmoke tests pass on Linux, macOS, and Windows. - Packaged server health smoke passes on Linux and macOS.
- The assembly job stages both installers and computes
sha256.sumbut does not create a GitHub Release.
4. Product and documentation
- The README and installation guide describe GitHub Release installation, not PyPI.
- The release contract and platform matrix match the artifacts and tested behavior.
- User and developer documentation cover new commands, flags, cache and replay behavior, evidence formats, observability, and limitations without overclaiming empirical quality.
- Mermaid diagrams render and describe the implemented state boundaries.
- Generated release notes have been reviewed before they are sent to collaborators; GitHub may generate the initial notes at publication time.
5. Dependencies and security
- Cargo and uv lockfiles validate and are included when dependencies changed.
- Known advisories are reviewed and recorded. An advisory is a release blocker when it is reachable in the shipped product or violates a configured CI policy; the checklist does not make the false claim that every ecosystem scanner must report zero findings.
- GitHub Actions and installer changes receive focused security review.
- License and classifier metadata match the public-preview state.
Release procedure
- Complete the gates above on the reviewed
maincommit. - Run and verify the prospective-tag dry run.
- Create an annotated tag:
git tag -a vX.Y.Z -m "batchalign3 vX.Y.Z". - Push only that tag. The tag-triggered workflow builds, smokes, checksums, and creates the GitHub Release.
- Verify the release contains five wheels, one source distribution, both
installers, and
sha256.sum. - Download from the published release and perform a clean installer or wheel smoke outside the source checkout.
- Deploy the exact released identity where an operational deployment is in
scope, then verify
/healthand its build/runtime identities.
No release branch or immediate development-version bump is required. The next release receives its version when that release is prepared.
Failed publication and replacement
If a published release is defective:
- Mark the GitHub Release as a prerelease or remove it from public discovery, depending on severity, and record which artifacts are affected.
- Fix and review the defect on
main. - Choose a new patch version. Never move or reuse a published tag.
- Repeat the complete dry-run and release process.
There is no PyPI release to yank.
This page last changed: 2026-09-06 (commit 9bfd98f2). The whole book last changed: 2026-09-16 (commit 34d249d8).