Versioning#
Pain001 is pre-1.0 (0.0.x). Within that range, releases are frequent and may include breaking changes; every breaking change is documented in the release notes. Companion packages (pain001-mcp, pain001-lsp, the loaders) version independently and declare their compatible core range in their dependency metadata — the resolver, not the version number, is the compatibility contract.
What "supported" means#
The honest pre-1.0 statement: the latest release is the supported release. Bug and security fixes ship as new releases rather than backports. If you need a frozen version, pin it (pain001==0.0.56) — pinned installs keep working because releases are never deleted or mutated on PyPI.
Security reports against older versions are still triaged: if the flaw exists in the latest release, it is fixed there with an advisory noting affected versions.
Verifying a release#
- Integrity — install from PyPI with hash-checking (
pip install --require-hashesagainst your lockfile). - Provenance — from v0.0.57 onward, releases carry a SLSA Build L3 attestation (
multiple.intoto.jsonlon the GitHub release), verifiable withslsa-verifieragainstgithub.com/sebastienrousseau/pain001. - Inventory — each core release build generates a CycloneDX SBOM for dependency review.
Pinning and rollback#
Deployments should pin exact versions in a lockfile and treat upgrades as changes: run your own regression (a --dry-run over a representative batch is the natural smoke test) before promoting. Rollback is pip install pain001== — no migrations, no state, no server-side coupling; generated files from any version remain valid against the schemas they targeted.
Cadence and deprecation#
There is no fixed calendar cadence; releases ship when tested work is ready — historically multiple times per month (release history). Deprecations appear in release notes at least one release before removal. The 1.0 commitment, when made, will bring semantic-versioning guarantees: no breaking changes within a major version and a documented support window per major — that promise is deliberately not being made before it can be kept.