Files
magnus919_agent-skills/release-engineering/assets/versioning-decision-table.md
T
github-actions[bot]GitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Magnus Hedemark
22ee6494b1 chore(main): release 0.6.0 (#163)
* chore(main): release 0.6.0

* fix(release-engineering): align validators with release tooling

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Magnus Hedemark <magnus919@pm.me>
2026-08-02 21:59:20 -04:00

3.4 KiB

Versioning Decision Table

Choose a versioning scheme, then encode the rules in your release tooling. Canonical definitions: SemVer 2.0.0, CalVer, and Conventional Commits.

Scheme Selection

Question If yes →
Do you have a public API or installable library where consumers depend on compatibility guarantees? SemVer — each version carries semantic meaning
Is the product time-bound (releases must be date-identifiable) or driven by external events (regulatory, compliance)? CalVer — date-based
Do multiple components ship on the same train with a shared promise (product suite, mobile app)? Fixed / one-version — a single version for the product
Do components evolve independently and integrate via registries? Independent versioning — per-component SemVer
Scheme Format Best for Example
SemVer MAJOR.MINOR.PATCH[-prerelease][+build] Libraries, APIs, anything with consumers 2.4.0, 2.4.0-rc.1
CalVer Date segments + optional modifier Products with time-based releases Ubuntu 24.04, pip 24.3
Fixed / one-version One version across all components Release trains, product suites, mobile apps 2026.08.1
Independent Per-component versions Microservices, monorepo packages api 3.2.1, web 1.9.0

SemVer Rules

Component Rule
MAJOR Incompatible API change
MINOR Backward-compatible new functionality
PATCH Backward-compatible bug fix
0.y.z Initial development: anything may change; consumers should pin
Prerelease -alpha.1, -beta.2, -rc.1 — lower precedence than the final release
Build metadata +build.123, +exp.sha.5114f85 — ignored in precedence, useful for provenance

Bump Rules from Conventional Commits

Commit type Bump Example
BREAKING CHANGE: footer, or feat! / fix! MAJOR feat!: drop v1 API
feat MINOR feat(auth): add refresh tokens
fix PATCH fix(api): retry on 429
perf, refactor, docs, test, chore, ci, build, style PATCH in this skill docs: update readme

For 0.y.z, this skill's Release Please-compatible policy maps both feat and breaking changes to MINOR (0.5.0 -> 0.6.0), while fixes and other changes remain PATCH. At 1.0.0 and later, normal SemVer priority applies.

Gotcha — the bump is decided by the highest-priority type in the release range: one BREAKING CHANGE forces a MAJOR at 1.0.0+, or a MINOR bump in 0.x, even if the rest are fixes. Automate with the version_bump.py script.

Prerelease and Build Metadata Rules

  • Prerelease identifiers: dot-separated alphanumerics + hyphens; numeric identifiers have no leading zeros (rc.1, not rc.01).
  • Prerelease precedence: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta < 1.0.0-rc.1 < 1.0.0.
  • Build metadata (+...) does not affect precedence: 1.0.0+001 == 1.0.0+002.
  • Promotion pattern: build once, record the digest, tag with SemVer, promote the same immutable artifact through environments — never rebuild for promotion.

Sources and Further Reading