How AskRITA versions are managed, where version numbers live, and how to cut a release.
AskRITA follows Semantic Versioning 2.0.0:
MAJOR.MINOR.PATCH (e.g. 0.13.7)
| Increment | When | Example |
|---|---|---|
| Patch | Bug fixes, docs, dependency updates (backwards-compatible) | 0.13.7 → 0.13.8 |
| Minor | New features, config options, new DB/LLM support (backwards-compatible) | 0.13.7 → 0.14.0 |
| Major | Breaking API changes, removed features, config format changes | 0.13.7 → 1.0.0 |
The version string must stay in sync across three files:
| File | Line | Format |
|---|---|---|
pyproject.toml |
version = "X.Y.Z" |
Poetry source of truth |
setup.py |
version="X.Y.Z" |
CI/CD compatibility shim |
askrita/__init__.py |
__version__ = "X.Y.Z" |
Runtime askrita.__version__ |
The version management script (scripts/manage_version.py) updates all three automatically.
# Show current version
poetry run version-show
# Bump patch (0.13.7 → 0.13.8)
poetry run version-bump patch
# Bump minor (0.13.7 → 0.14.0)
poetry run version-bump minor
# Bump major (0.13.7 → 1.0.0)
poetry run version-bump major
# Set an exact version
poetry run version-bump set 1.0.0python scripts/manage_version.py show
python scripts/manage_version.py patch
python scripts/manage_version.py minor
python scripts/manage_version.py major
python scripts/manage_version.py set 2.0.0bump2version is configured via .bumpversion.cfg and automatically creates a git commit and tag:
poetry run version-bump patch --tool bump2version.bumpversion.cfg defines which files are updated and the commit/tag format:
[bumpversion]
current_version = 0.13.7
commit = True
tag = True
tag_name = v{new_version}
message = Bump version: {current_version} → {new_version}!!! note
bump2version commits and tags automatically. The default Poetry flow does not — you commit manually (see release checklist below).
After bumping the version:
-
CHANGELOG.md— Move items from[Unreleased]to a new[X.Y.Z] - YYYY-MM-DDsection -
README.md— Update the "What's New" section if it's a minor/major release -
docs/— Update any guides affected by the changes
# Full test suite
poetry run pytest tests/ -v
# Coverage (must stay above 80%)
poetry run pytest tests/ --cov=askrita --cov-fail-under=80
# Formatting and lint
poetry run black --check askrita/ tests/
poetry run isort --check-only askrita/ tests/
poetry run flake8 askrita/ tests/
# Secret scanning
gitleaks detect --source . --config .gitleaks.toml -vgit add .
git commit -m "Release vX.Y.Z: brief description"
git tag -a vX.Y.Z -m "Release version X.Y.Z"git push origin main
git push origin vX.Y.Zpoetry build --clean
# poetry publish # when PyPI publishing is configuredTo confirm all files agree on the current version:
poetry run version-show
grep 'version' pyproject.toml | head -1
grep '__version__' askrita/__init__.py
grep 'version=' setup.pyAll four should report the same value.