How releases are managed across the Escalated platform.
All packages use Semantic Versioning:
- MAJOR (1.0.0 -> 2.0.0) -- Breaking changes to the public API
- MINOR (1.0.0 -> 1.1.0) -- New features, backward-compatible
- PATCH (1.0.0 -> 1.0.1) -- Bug fixes, backward-compatible
During the 0.x phase (current), minor versions may include breaking changes.
- Ensure all tests pass on the
mainbranch - Update
CHANGELOG.mdwith the new version and changes - Bump version in the package manifest:
- PHP:
composer.json - Python:
pyproject.toml - Ruby:
version.rbor*.gemspec - TypeScript:
package.json - Go: Git tag only
- Elixir:
mix.exs - Dart:
pubspec.yaml
- PHP:
git tag v0.5.0
git push origin v0.5.0GitHub Actions handles the rest:
- CI runs the full test suite against the tag
- Package is published to the appropriate registry (npm, Packagist, PyPI, RubyGems, Hex)
- GitHub Release is created with changelog notes
- Update
escalated-docsif the release includes new features or config changes - Update
escalated-developer-contextif architecture or conventions changed - Announce in the appropriate channels
| Package | Registry | Publish Trigger |
|---|---|---|
| escalated-laravel | Packagist | Git tag |
| escalated-django | PyPI | Git tag |
| escalated-rails | RubyGems | Git tag |
| escalated-adonis | npm | Git tag |
| escalated-plugin-sdk | npm | Git tag |
| escalated-plugin-runtime | npm | Git tag |
| escalated (frontend) | npm | Git tag |
| escalated-phoenix | Hex | Git tag |
| escalated-symfony | Packagist | Git tag |
| escalated-go | Go modules (proxy.golang.org) | Git tag |
| escalated-flutter | Git (pub.dev planned) | Git tag |
| escalated-wordpress | GitHub Releases (.zip) | Git tag |
| escalated-filament | Packagist | Git tag |
Follow Keep a Changelog:
## [0.5.0] - 2026-04-05
### Added
- Skill-based ticket routing
- Agent capacity tracking
- Side conversations
### Changed
- SLA engine now respects business schedules
### Fixed
- Business hours calculation across DST transitions
- Round-robin assignment skipping offline agents
### Deprecated
- `config.sla.business_hours_only` (use business schedules instead)Some changes span multiple repos. For example, a new plugin SDK feature may require updates to:
escalated-plugin-sdk(new API)escalated-plugin-runtime(handle new messages)escalated-laravel(bridge support)escalated-rails(bridge support)escalated-django(bridge support)escalated-docs(documentation)
For coordinated releases:
- Create feature branches in all affected repos
- Test end-to-end with linked local packages
- Release in dependency order:
- SDK first (lowest dependency)
- Runtime next (depends on SDK)
- Backend packages (depend on runtime)
- Docs last
For critical bugs in production:
- Branch from the latest tag:
git checkout -b fix/critical-bug v0.5.0 - Apply the fix
- Add tests
- Create a patch release:
v0.5.1 - Cherry-pick or merge the fix into
main
WordPress releases include additional steps:
- Build the
.zipdistribution package - Run Playwright screenshot tests
- Upload
escalated.zipto the GitHub Release - Screenshots are committed to the repo
The screenshots.yml workflow automates screenshot generation on every release.