Release Checklist
v3.8.1Last updated: 2026-05-13
Was this page helpful?
Loading OmniRoute...
Last updated: 2026-05-13 β v3.8.0 Streamlined release flow that leverages Claude Code skills for automation.
# 1. Bump version + generate CHANGELOG (skill) /version-bump-cc patch # or minor/major # 2. Run quality gate locally npm run check # lint + tests npm run test:coverage # full coverage gate (75/75/75/70) # 3. Build & smoke npm run build npm run test:e2e # optional but recommended # 4. Generate release (skill) /generate-release-cc # 5. Deploy (skill) /deploy-vps-both-cc # or akamai-cc / local-cc # 6. Capture release evidences (skill) /capture-release-evidences-cc
- All open Linear/issue items for this version are closed or pushed to next milestone
- CI green on
branch
- No
markers in code:
- Docker base image up to date (currently
)
(Claude Code skill),
- from git commits since last tag
-
- Manually review CHANGELOG.md and clean up commit messages if needed
- Ensure the latest semver section in
equals version
- Keep
as the first changelog section for upcoming work
- Update
β must equal version
β 0 errors (warnings are pre-existing)
-
β clean
-
β clean (strict)
-
β no circular deps
-
β within budget
-
β clean
-
β supported floor met (, , )
β pass
-
β pass (MCP server, autoCombo, cache)
-
β gate 75/75/75/70 satisfied (statements/lines/functions/branches)
-
β pass (if changes touch DB / handlers)
-
β pass (UI changes)
-
β pass (MCP/A2A changes)
-
β pass
and run automatically on git operations.
- pre-push: currently disabled (commented out). When re-enabled, runs
. manually before pushing release branches.
.
format.
Valid types: , , , , , , , ,
Valid scopes: , , , , , , , , , , , , , , , , , , , , ,
footer or after the scope (e.g. ).
passes (auto-run by pre-commit)
-
passes (umbrella: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links)
-
exits 0 β code β β env contract is intact
-
exits 0 β no broken internal markdown references after restructuring
-
reviewed for storage/runtime drift
-
reviewed for env var and operational drift
- If
changed: updated
- If new feature has a UI:
mentions it
- If new feature has API:
+ updated
- If new feature is a module: dedicated
exists
- If breaking change:
has migration note
exits 0 β translation state () in sync with source docs (no drifted sources in strict mode; warn-mode advisory is acceptable for last-minute doc touch-ups, but should be 0 before tagging)
-
exits 0 β every UI locale at or above the 80% coverage floor
-
reports 0 missing keys across all 40 locales
- If source English docs changed, run
(requires in ) before tagging
- Translation contributions can be deferred to next release if minor (track in CHANGELOG)
has new files: Each migration is idempotent (, etc.)
- Migrations wrapped in transactions
- Numbered correctly (no gaps in sequence)
- Test on fresh install: delete
and run
- Test on existing install: backup DB, run migration, verify schema
- WAL files (
, ) handled correctly if migration rewrites tables
Zod schema valid at load time All providers have required fields (, , , etc.)
-
provided for new free providers
- OAuth providers have
registered in
- If new provider added: corresponding executor in
- If non-OpenAI format: translator in
- Models registered in
- Unit tests in
cover provider classification and routing
changed:
passes
- Builds tested for at least one of
, ,
- Code signing certs not expired (if signing)
-
version matches root
- Auto-update channel pointer updated if releasing to
succeeds
-
clean β no , , , or other local residue
-
produces a working standalone Next.js bundle
(Claude Code skill):
-
-
-
- Or manually:
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin vX.Y.Z
gh release create vX.Y.Z --notes-from-tag
circuit breakers SSE) (Claude Code skill)
-
- Update GitHub Discussions / Discord with release announcement
- Open milestone for next version
- If critical: pin discussion or post in
for in-app banner
boots on macOS (systray2 installed into )
-
boots on Linux (requires DISPLAY; graceful error if not set)
-
boots on Windows (PowerShell NotifyIcon, no extra binaries)
-
creates autostart entry; disable removes it
-
runs postinstall without fatal exit
-
works with no (CLI token path, loopback only)
-
returns 401 (always-protected route)
-
returns 401 (loopback guard)
- SQLite runtime resolves to
on first run (bundled binary valid for platform)
- SQLite runtime falls back to
when is deleted
- Smart MCP filter compresses real
output (β₯50% reduction)
- All 10
files are publicly fetchable via raw GitHub URL
- Onboarding wizard shows "How It Works" tier tour step on fresh setup
- Home dashboard tier coverage widget shows configured/active counts
or branches, , or
npm run check:docs-sync
(lint job).