Composable Data Stack is in a pre-1.0 phase with a small core team, active documentation work, and a steady stream of correctness and release-engineering improvements. At this stage, the release process should optimize for stability, reviewability, and frequent delivery over broad feature batching.
- Ship small, well-validated releases on a predictable cadence.
- Keep the main branch green and releasable at all times.
- Prefer correctness, docs, and operational polish over large feature drops.
- Make release decisions from explicit evidence: tests, CI, and changelog entries.
- Use a weekly release train while the project is still stabilizing.
- Cut a release only when the main branch is green and the changelog is ready.
- If a week does not produce release-worthy changes, skip the tag rather than force a release.
- Keep feature work in short-lived branches.
- Merge to main only after review and validation.
- Create a release branch when you need to stage a weekly release candidate or include a small set of late-breaking fixes.
- Avoid long-lived release branches unless you are stabilizing a specific milestone.
- Do not use long-lived
development,test,acceptance, orproductionbranches for this project phase. - Use
mainas the single long-lived integration branch. - Use short-lived topic branches such as
docs/*,fix/*, andfeat/*for day-to-day work. - Use short-lived
release/*branches only when preparing a weekly release candidate. - Treat tagged releases as the production line instead of maintaining a separate production branch.
- If a hotfix is needed after a tag, use a short-lived
hotfix/*branch and merge it back through the normal review flow.
- Bug fixes and regressions with clear test coverage.
- Documentation improvements that unblock users or contributors.
- CI, lint, packaging, or release-process improvements.
- Small compatibility fixes that reduce friction across supported environments.
- Large refactors without user-facing value.
- Feature work that is not yet covered by tests.
- Changes that alter core behavior without a rollback plan.
- Anything that would require a broad stabilization cycle to verify.
Before tagging a release, verify:
- Main is green in CI.
- The changelog contains the release entry.
- The release branch has the intended fixes and documentation updates.
- Unit tests pass locally.
- Smoke tests pass when the required environment is available.
- No high-severity blockers remain open for the release window.
At minimum for this phase:
python3 -m unittest discover -s tests -p "*.py"CDS_RUN_DOCKER_SMOKE=1 python3 -m unittest tests.test_compose_runtime_smoke -vwhen Docker is available- Any focused regression tests for the change set being released
Treat a skipped smoke test as an environment limitation, not as release validation.
- Use semantic versioning, but expect mostly patch releases until the project is more stable.
- Record every user-facing change in
CHANGELOG.mdbefore tagging. - Keep changelog entries concise and grouped by outcome, not by implementation detail.
- Sync main.
- Confirm the release scope.
- Update version and changelog.
- Run the test suite.
- Cut a release branch if needed.
- Tag the release.
- Publish GitHub release notes from the changelog.
- Announce the release and link any included PRs.
- If a release breaks users, publish a hotfix quickly rather than waiting for the next weekly train.
- Backfill tests for the regression before or alongside the hotfix.
- Document the failure mode in the changelog and release notes.
For CDS right now, the best strategy is a weekly release train with strict quality gates and narrow scope. That gives contributors a clear rhythm, keeps main trustworthy, and makes it easier to absorb correctness fixes, docs, and CI improvements without slowing the project down.