Changelog and Versioning Policy¶
Versioning Scheme¶
All four packages (@cyber-eco/types, @cyber-eco/firebase, @cyber-eco/auth, @cyber-eco/services) share the same version number at all times. This is enforced by Changesets' fixed mode.
When any package changes, all packages get the same version bump.
Why Fixed Versioning¶
The four packages form a tight dependency chain. A change to @cyber-eco/types (e.g., adding a field to SharedUserProfile) may affect all downstream packages. Fixed versioning eliminates the compatibility matrix problem: consumers always install @cyber-eco/*@0.3.0 and know all packages work together.
Semantic Versioning¶
We follow SemVer 2.0:
- PATCH (
0.1.x): Bug fixes, documentation updates, internal refactoring with no API changes - MINOR (
0.x.0): New functions, new interfaces, new optional fields on existing interfaces, new exports - MAJOR (
x.0.0): Breaking changes — removed exports, changed function signatures, renamed interfaces, changed required fields
Pre-1.0 Policy¶
While the version is 0.x.y:
- Minor versions MAY contain breaking changes (with documentation)
- This signals that the API is still stabilizing
- Consumers should pin to exact versions or use ~ ranges
Post-1.0 Policy (future)¶
After 1.0.0:
- Breaking changes require a major version bump
- Deprecated features must be maintained for at least one minor version before removal
- Migration guides must accompany every major version
Release Workflow¶
Creating a Changeset¶
When you make a change that should appear in the changelog:
This interactive CLI asks: 1. Which packages changed? (Select one or more) 2. What kind of change? (patch / minor / major) 3. Summary of the change (this becomes the changelog entry)
The command creates a markdown file in .changeset/ (e.g., .changeset/happy-dogs-sleep.md).
Versioning¶
When changesets are merged to main, the GitHub Action creates a "Version Packages" PR that:
1. Bumps all package versions according to the accumulated changesets
2. Updates all CHANGELOG.md files
3. Updates all internal workspace:* dependency references
Publishing¶
When the "Version Packages" PR is merged: 1. The GitHub Action builds all packages 2. Runs all tests 3. Publishes to GitHub Packages 4. Creates a GitHub Release with the changelog
Pre-release Versions¶
For testing before a final release:
Consumers can test against the alpha:
Changelog Format¶
Each package maintains a CHANGELOG.md following Keep a Changelog format:
# @cyber-eco/types
## 0.2.0
### Minor Changes
- Added `Friendship` interface to shared types
- Added `PermissionCondition` for conditional access
- Enhanced `GroupMember.role` with 4-tier hierarchy (owner/admin/moderator/member)
### Patch Changes
- Fixed `HubUser.preferences.theme` type to use 'system' instead of 'auto'
Commit Convention¶
Commits should follow Conventional Commits:
feat(types): add Friendship interface
fix(firebase): handle lazy initialization in adapter
docs(architecture): add collection schema table
refactor(services): extract NotificationService from SharedDataService
test(services): add DataLayerService orchestration tests
chore: update turbo to 2.3.1
The scope should match the package name (types, firebase, auth, services) or be omitted for cross-cutting changes.