Use semantic intent, anchored to the frozen package boundary.
Use a patch release for:
- in-boundary feature completion
- cert/evidence closure
- release-artifact repair
- docs/governance truth corrections
- operator-surface completion that does not widen the current product boundary
Example: 0.3.8 -> 0.3.9
Use a minor release when the public boundary expands, for example:
- new supported runtime family
- new app-interface family
- new RFC family added to the required boundary
- new product-layer capability intentionally adopted into T/P/A/D/R
Use a major release only for an intentional public break or a boundary reset.
Evidence tiers:
local_conformancesame_stack_replayindependent_certification
Promotion status is not a fourth evidence tier; it is the result of the release-gate and promotion evaluators.
- finish code/docs/tests
- refresh
.ssot/registry.json - refresh current-state docs
- run compileall
- run targeted/full pytest as needed
- run
evaluate_release_gates('.') - run strict target if applicable
- run
evaluate_promotion_target('.') - refresh release-root
manifest.json,bundle_index.json,bundle_summary.json - update
docs/release-notes/RELEASE_NOTES_*.md - update versioned release root
- freeze the new versioned root with
MUT.json - leave old promoted roots immutable
A release is closed only when:
- version metadata is aligned
.ssot/registry.jsonis aligned with the promoted state- the canonical release root exists
- the current-state chain points to the right root
- release notes are updated
- promotion evaluators are green
- the versioned root is immutable
The mutable tree now carries an automated release pipeline that builds selected Python and probe package artifacts, promotes selected artifacts through GitHub Release, TestPyPI/PyPI, and npmjs destinations, uses repository publication secrets, attaches generated release evidence, and deploys a release-evidence Pages bundle.
External publication and deployment are still operator-observed facts rather than repository-local assumptions. Repository promotion must not claim that TestPyPI, PyPI, npmjs, GitHub Releases, artifact attestations, or GitHub Pages publication actually happened until those external systems show the successful run and published outputs.