ADR 0009: Single-branch rollout for v0.1.0¶
Status: Accepted (2026-04-29)
Context¶
The original packaging plan envisioned 18 phases as 18 individual PRs landing incrementally on main. The user's preferred workflow is a single PR with all phases as commits, so a release can be tested end-to-end against TestPyPI before any merge to main.
Decision¶
The v0.1.0 release lands as a single PR (antikythera-spectral-pypi-plan branch). Each implementation phase is a commit on that branch. The PR is opened in draft while phases land. When all phases are complete:
- Dispatch the publish workflow with
target=testpypiagainst the branch. - Verify
pip install --index-url https://test.pypi.org/simple/ antikythera-spectral==0.1.0rcNworks (iteratercNif needed). - Bump
python/pyproject.tomlfrom0.1.0rcNto0.1.0, commit, mark PR ready. - Get final review, merge to main.
- Autotag fires on main, pushes
antikythera-spectral-v0.1.0, publish workflow lands real PyPI release.
Pre-release versions (0.1.0rc1, 0.1.0.dev0, …) are intentionally excluded from autotag — they're test-only.
Consequences¶
- Reviewer sees a coherent v0.1.0 release rather than 18 incremental drafts.
- Zero version-burn on real PyPI during development (the production version slot is used exactly once).
git logon main has 1 merge commit for v0.1.0; subsequent versions follow the same pattern.- Single-PR review is harder than 18 small PRs, but the per-phase commits give reviewers a logical reading order.
Alternatives considered¶
- 18 individual PRs. Rejected per the user's "single PR" decision. Plan §10 originally said "each phase is its own PR"; ADR supersedes that.
- Squash to a single commit at merge time. Rejected — the per-phase commit history is useful for
git bisectand post-merge audit.