Versioning
Switchbord uses deliberate semver release trains, not commit-count or one-PR-one-version numbering.Two version concepts
Release version
The rootpackage.json version is the repository release version.
Use it for:
- intentional releases
- matching semver tags
- human-readable release history
- the public changelog
- GitHub Releases
Build version
buildVersion is the runtime deployment identity.
Use it for:
/healthand/readyreporting- tracing a deployed artifact back to a commit
- distinguishing two deployments with the same semver release
Current policy
The current release line is0.12.x.
Until alpha, use release-train semver:
- patch for bug fixes, contract corrections, docs corrections, and release hygiene
- minor for coherent capability waves such as Campaigns v1, WhatsApp Flows runtime, alpha readiness, or a major integration slice
- major only when the project is stable enough for
1.0.0semantics
Release invariants
Every release must satisfy all of these:- Root
package.jsoncontains the intended semver version. - Root
CHANGELOG.mdcontains## vX.Y.Zfor that same version. - If a public web changelog entry exists at
apps/web/content/changelog/vX.Y.Z.mdx, its frontmatterversionequals the filename and its date is a real merge/commit date. - Git tag must match exactly at release time:
package.json0.12.1↔ tagv0.12.1. - GitHub Release notes are generated from the matching semver tag.
package.json unless they intentionally cut a new release train. They do need docs/changelog updates when behavior changes.
Back-minting tags
Current historical state is imperfect: early alpha moved faster than the release discipline. Onlyv0.0.1 was tagged while package.json later advanced to 0.12.1.
Before alpha there are two acceptable options:
- Preferred: start strict matching at the next coherent release train, e.g.
v0.13.0, and treat older changelog sections as historical reconstruction. - Optional: back-mint missing tags only when the exact release commit is known and stable. Do not create historical tags from guesswork.
Helper commands
release:hygiene checks that package.json, CHANGELOG.md, public web changelog entries, and any existing matching tag are coherent.
PR authoring rule
If a PR changes user-visible behavior, API contracts, operator docs, setup flows, or deployment/runtime behavior, it must update at least one of:CHANGELOG.mdapps/web/content/changelog/*.mdxapps/docs/**planning/**for intentionally internal/operator-only notes