This project uses Changesets for versioning and publishing packages.
Every merge to main = release.
No selective commit types, no manual changeset creation needed. The workflow is:
- Create PR with conventional commits when possible
- Tests pass, merge to main
- Version bumps automatically (patch, or minor for breaking changes)
- Packages published to GitHub Packages
- patch (0.7.1 → 0.7.2): All commits (feat, fix, chore, docs, refactor, etc.)
- minor (0.7.1 → 0.8.0): Breaking changes only (using
!orBREAKING CHANGE) - major (0.7.1 → 1.0.0): ❌ BLOCKED - Framework not ready for 1.0.0
Breaking changes bump minor version (not major) until 1.0.0:
# Breaking change example:
git commit -m "feat(core)!: rename method"
git commit -m "fix(agents): change signature
BREAKING CHANGE: method signature changed"Use conventional commits when possible:
type(scope): description
Examples:
feat(core): add new feature
fix(agents): fix bug
docs: update README
chore: update dependencies
refactor(svelte): reorganize components
feat(core)!: breaking change
Supported scopes (package names):
core,types,configaccounts,agents,assets,cli,contentevents,gnode,places,products,profilessvelte,tags,dev-mcp,docs-mcp
No scope = affects all packages
Squash-merge PR titles like smrt#1069: normalize video owned asset models (#1071)
or Follow up smrt#1063 owned asset helper refactor (#1072) also trigger a
patch release when they land on main.
- Tests run on main
- Build completes
- Changeset auto-generated from commits (
scripts/auto-changeset.ts) - Versions bumped across all packages (fixed group)
- Packages published to GitHub Packages
- Git tag created (e.g.,
v0.17.33) - GitHub release created with changelog
- Downstream repos notified (cascade)
You can still create manual changesets for more detailed changelogs:
pnpm changesetIf a changeset already exists, auto-generation is skipped.
# Create manual changeset
pnpm changeset
# Apply version bumps (with version check)
pnpm run version
# Build and publish packages
pnpm run release
# Check versions don't exceed 0.x.x
node scripts/check-version-limit.jsThe auto-changeset script prefers conventional commits, but squash-merge PR titles also count as releasable patch changes. If a merge still doesn't release, check that the commit subject isn't empty and that it landed after the latest release tag.
If version check fails with "exceeds 0.x.x limit":
- Check which package is at 1.0.0
- This shouldn't happen with normal operation
- Contact maintainers if it does
Common causes:
- GitHub registry authentication (
NODE_AUTH_TOKEN) - Package name conflicts
- Build failures
Check GitHub Actions logs for details.
All SMRT packages share the same version number. When one package bumps, all bump together.
This is configured in .changeset/config.json:
{
"fixed": [
["@happyvertical/smrt-*"]
]
}