PortOS uses semantic versioning: Major.Minor.Patch
| Component | Description | When Incremented |
|---|---|---|
| Major | Breaking changes | Via /do:release slash command |
| Minor | New features | Via /do:release slash command |
| Patch | Bug fixes, refactors | Via /do:release slash command |
Example progression: 0.22.0 → 0.22.1 (fix) → 0.23.0 (feature) → 1.0.0 (breaking)
| Branch | Purpose |
|---|---|
main |
Active development |
release |
Push main to release to trigger GitHub Release workflow |
Version is managed by the /do:release Claude Code slash command (provided by the slashdo skill). Do not bump package.json version manually during development.
CI runs tests and linting. No version changes.
- Release workflow triggers
- Creates git tag with current version (e.g.,
v1.31.0) - Generates GitHub release with changelog (priority: exact
.changelog/v{version}.md→ pattern.changelog/v{major}.{minor}.x.md→ fallback commit log) - If a pattern changelog file (
.changelog/v{major}.{minor}.x.md) was used, archives it by renaming to the exact version file onmain - If the archive step ran, fast-forwards
releaseto matchmain
# Work on main or feature branches
git checkout main
git pull
# Make changes, commit, push
git add [changed files]
git commit -m "fix: resolve issue"
git pull --rebase --autostash && git pushUse the /do:release slash command from main. It handles version bumping, changelog finalization, and pushing to the release branch.
Use [skip ci] in commit messages to prevent CI from running (used by automation for changelog archives).