← Docs hub

Release process

Audience: whoever is cutting the next tag. This is the step-by-step checklist. Run the /release <version> slash command for a guided walkthrough that follows the same steps.

llmwiki uses semantic versioning with a pre-1.0.0 caveat: every 0.x.y release can break compatibility freely. 1.0.0 will be the first stable release.

Minor-version bumps (0.X.0) ship when a coherent feature batch lands (heatmap + tool chart + token usage = v0.8). Patch bumps (0.X.y) ship when a critical fix can't wait for the next minor.

Pre-flight

Bump version

The single source of truth is llmwiki/__init__.py. Every other place that mentions the version is derivative and must match.

Update CHANGELOG

Commit + tag

git add llmwiki/__init__.py pyproject.toml README.md CHANGELOG.md
git commit -m "release(vX.Y.Z): bump version + CHANGELOG"
git tag vX.Y.Z
git push origin master vX.Y.Z

GitHub Release + PyPI publish

The tag push triggers .github/workflows/release.yml which automatically: 1. Builds sdist + wheel via python -m build 2. Publishes to PyPI via OIDC trusted publisher (no API tokens needed) 3. Signs artifacts with Sigstore 4. Creates a GitHub Release with build artifacts + signature bundles

Manual fallback (if automation is broken):

gh release create vX.Y.Z --title "vX.Y.Z" --generate-notes --prerelease

Verify Pages deploy

Announce (optional)

Rollback

If a release is broken, don't delete the tag. Do:

  1. Cut a patch release (vX.Y.Z+1) that reverts the bad PR
  2. Mark the broken release as "Pre-release" and edit the notes to say "superseded by vX.Y.Z+1"
  3. Never delete tags — downstream packages may pin to them