Hotfix Runbook¶
1. When to use this runbook¶
- Confirmed security advisory with priority p0-critical or p1-high.
- Production regression in the last released version.
- Dependency CVE without an upstream patch available in
main.
2. Branch from tag¶
Replace vX.Y.(Z-1) with the current release tag and vX.Y.Z with the next patch version.
3. Apply minimal fix¶
Cherry-pick from main if the fix commit exists there. Otherwise hand-author the smallest possible diff. No refactoring.
4. Test minimal subset¶
Full suite is optional locally; CI runs it on the PR.
5. Update CHANGELOG¶
Add a new section ## [vX.Y.Z] - YYYY-MM-DD above the existing [Unreleased] entry. Use ### Security for CVEs and security fixes. Use ### Fixed for regressions.
6. Bump pyproject.toml¶
Patch version only. Update the version field in pyproject.toml.
7. Tag and push¶
No PR against main. Push directly to the hotfix branch and tag.
8. Release publishes automatically¶
.github/workflows/release.yml consumes the tag and publishes to PyPI.
9. Forward-port to main (manual)¶
After the tag publishes, open a PR cherry-picking the hotfix commit(s) onto main. Title: chore(release): forward-port hotfix vX.Y.Z to main. Automation is deferred; see GIT_FLOW.md Hotfix process.
10. Post-release¶
- Update the GitHub Security Advisory if applicable.
- Close related issues with a reference to
vX.Y.Z.