This document defines the release process, versioning policy, ship/no-ship criteria, and known-issues management for the supported RootStream product.
RootStream uses Semantic Versioning (MAJOR.MINOR.PATCH):
| Component | When it increments |
|---|---|
MAJOR |
Breaking change to wire protocol, key format, or CLI interface |
MINOR |
New supported feature on the canonical path; new platform support |
PATCH |
Bug fix, documentation improvement, dependency update |
The current version is defined in:
CMakeLists.txt:project(rootstream VERSION ...)include/rootstream.h:#define ROOTSTREAM_VERSION "..."Makefile:VERSION ?= ...(if defined)
Both must be updated together for a release.
| Branch | Purpose |
|---|---|
main |
Stable, releasable. Every commit here should pass CI. |
develop |
Integration branch for ongoing work |
feature/* |
Individual feature branches; merged via PR |
release/vX.Y.Z |
Release preparation (version bump, release notes, tag) |
Before tagging a release:
- All CI jobs pass on
main(build, unit-tests, integration-tests, format-check, sanitizer) -
./rootstream --versionoutputs the correct version string -
./rootstream --helpoutput is accurate and reflects current commands -
docs/CORE_PATH.mdvalidation steps pass on a clean machine -
scripts/demo.shexits with code 0 -
make test-build && ./tests/unit/test_crypto && ./tests/unit/test_encodingpass
-
README.mdreflects current supported product definition -
docs/SUPPORT_MATRIX.mdmaturity labels are up to date -
docs/ROADMAP.mdfuture items are accurate (no current-release items left as future) -
CHANGELOG.mdentry added for the release -
docs/KNOWN_ISSUES.mdis up to date
-
CMakeLists.txtversion updated -
include/rootstream.hROOTSTREAM_VERSIONupdated - Git tag created:
git tag -a vX.Y.Z -m "Release vX.Y.Z"
- Linux binary built and verified:
file rootstream && ldd rootstream - PKGBUILD updated if packaging for Arch Linux
- GitHub Release created with changelog excerpt and binary
- All unit tests pass (crypto, encoding)
- Integration test script passes (
tests/integration/test_stream.sh) - The canonical demo (
scripts/demo.sh) exits successfully - No known regressions from the previous release
- Security-relevant changes have been reviewed
- Any CI job is red on
main - A regression in the supported path (host startup, QR, identity generation) is known
- A security-relevant issue has been discovered and is unpatched
- The version string in code and tag do not match
| Level | Description | Example |
|---|---|---|
| P0 Blocker | Prevents the supported path from working | Host crashes on startup |
| P1 High | Significantly degrades supported path | Audio desync on first connection |
| P2 Medium | Workaround exists; not blocking | mDNS doesn't work without Avahi |
| P3 Low | Minor inconvenience | Minor doc typo |
Known issues are tracked in docs/KNOWN_ISSUES.md.
New issues discovered during release validation are added before tagging.
- Push the release tag to GitHub:
git push origin vX.Y.Z - Create a GitHub Release using the tag
- Announce in relevant channels (if applicable)
- Update
developbranch version to nextPATCH+1-devpre-release marker
For urgent P0 fixes:
- Branch from the release tag:
git checkout -b hotfix/vX.Y.Z+1 vX.Y.Z - Apply the minimal fix
- Run the pre-release validation checklist
- Tag as
vX.Y.(Z+1) - Merge back to
mainanddevelop