Patch bumps are cheap. Prefer frequent small releases over feature-batching. Contract changes (§10.1/§10.2/§10.3 — see contracts.md) are the one exception: they demand a deliberate ceremony.
Versioning follows Semantic Versioning:
- Patch — bug fixes, doc clarifications, additive internal refactors.
- Minor — new features, additive contract changes (new CSL field, new policy,
schema_versionadditive). - Major — contract breaks (renamed/removed CSL field, renamed
GenerationResultfield, changed citation marker shape, dropped policy).
- Land all PRs for the release into
main. - Run
/bump [patch|minor|major](or invoke therelease-bumpskill) — updatessrc/citeformer/_version.pyand moves[Unreleased]into a numberedCHANGELOG.mdentry. - Commit, push, open a "release vX.Y.Z" PR. Merge after CI is green.
- Tag on main:
git tag vX.Y.Z && git push --tags. - GitHub Actions
release.ymlpicks up the tag, builds sdist + wheel, publishes to PyPI via OIDC trusted publishing, and attaches artifacts to a GitHub Release with a CHANGELOG-link note.
Before pushing the tag:
-
make lint && make test && make docs-buildall green locally - CI green on
main -
CHANGELOG.mdhas the new version section (not[Unreleased]) -
/contract-checkclean if any §10 files were touched -
src/citeformer/_version.pymatches the tag - Any new deps reflected in the right
pyproject.tomlextra
The .readthedocs.yaml in the repo root is wired up; what's left is the
one-time import on readthedocs.org.
- Sign in at https://app.readthedocs.org/ with the GitHub account that
owns
random-walks/citeformer. - Import a project → import manually (or use the GitHub integration
if
random-walksis connected).- Repository URL:
https://github.com/random-walks/citeformer - Default branch:
main - Documentation type: Sphinx
- Repository URL:
- After the first build succeeds, enable the Automation rule that
activates new tags (so
v0.1.1,v0.1.2, … appear under the version picker without manual intervention). - Confirm the URL resolves: https://citeformer.readthedocs.io/en/latest/.
Once live, the RTD badge in the README (which currently points at an unimported slug) will start rendering the real build status.