brainstack follows Semantic Versioning.
The current version lives in VERSION; the history lives in CHANGELOG.md.
- MAJOR — breaking changes to the skill contract, the vault layout, or the bin/ CLI surface. Example: renaming a folder the setup script scaffolds.
- MINOR — new capability that is backward compatible: a new skill, a new bin/ script, an additive change to a schema or template.
- PATCH — fixes and documentation that change no contract.
Pre-1.0 (0.x): MINOR = breaking, PATCH = additive. We are at 1.0.0.
Run these steps in order. Each one is a separate commit so the history tells the story.
# 1. Bump the version
echo "1.1.0" > VERSION
# 2. Update CHANGELOG.md: move [Unreleased] into a dated section
# ([1.1.0] - YYYY-MM-DD) following Keep a Changelog categories
# (Added / Changed / Deprecated / Removed / Fixed / Security).
# 3. Commit the version bump
git add VERSION CHANGELOG.md
git commit -m "chore(release): v1.1.0"
# 4. Tag and push
git tag -a v1.1.0 -m "v1.1.0"
git push origin main --tags
# 5. Publish release notes (requires GitHub CLI)
gh release create v1.1.0 --title "v1.1.0" --notes "See CHANGELOG.md"python3 - <<'EOF'… run the frontmatter check from CONTRIBUTING.md — every skill must parse.bash setup --dry-run— installer must complete without errors.python3 -m py_compile bin/*.py— every engine script compiles.grep -c "name:" skills/*/SKILL.md— skill count matches the README table.- If a template or schema changed, regenerate a scratch vault from
vault-template/and runbin/vault-health.pyagainst it.
- One concern per release. A docs fix is a PATCH; a new skill is a MINOR. Don't mix them in one tag.
- The tag is the contract. Anyone can
git checkout vX.Y.Zand get a coherent, working stack. If a tag doesn't reproduce, the release failed. - Every structural change gets a changelog entry. If it changes behavior, it is notable.
- Breaking change → ARCHITECTURE.md and an ADR. A new constraint the stack enforces deserves a decision record, not just a diff.