Release¶
AnyTensor follows Semantic Versioning
(MAJOR.MINOR.PATCH):
| Bump | When |
|---|---|
| MAJOR | Breaking changes to the public API or documented semantics (signatures, promote defaults, empty-segment identities, …) |
| MINOR | Backward-compatible features |
| PATCH | Bug fixes, docs, tests |
We do not ship breaking changes in minor or patch releases. Prefer a deprecation + changelog note when behavior must evolve; remove or flip it on the next major.
Package version comes from git tags
(hatch-vcs), not a static version in
pyproject.toml. Do not bump a version field. Do not run towncrier build
locally for a real release (hatch-vcs would write a .devN version into
CHANGELOG.md).
During development¶
User-facing changes need a towncrier fragment in changelog.d/ in the same
unit of work:
Types: added | changed | fixed | removed | deprecated | security.
Skip fragments for internal tests, refactors, and tooling.
Cut a release¶
On main, with fragments committed:
Pushing v* runs .github/workflows/release.yml:
- Test matrix (3.11–3.13) with the coverage gate (
fail_under=100, non-fuzz) and bounded fuzz uv build(sdist + wheel)- Towncrier compiles
CHANGELOG.mdonto the default branch - GitHub Release with the dist artifacts
- PyPI via Trusted Publishing (OIDC, environment
pypi)