Every .md under docs/{architecture,guides,reference,frameworks,routing,
security,compression,ops,diagrams} plus docs/README.md now opens with:
---
title: "<inferred from first H1>"
version: 3.8.0
lastUpdated: 2026-05-13
---
46 files updated (no docs were skipped — none had pre-existing
frontmatter). [slug]/page.tsx already reads frontmatter.version and
frontmatter.lastUpdated via gray-matter and renders a "v3.8.0" pill
plus a "Last updated" caption, so the UI picks these up automatically.
Helper: scripts/docs/add-frontmatter.mjs — idempotent (skips files that
already start with `---`), falls back to a humanized basename when no
leading H1 exists. Excludes docs/i18n/, docs/screenshots/,
docs/superpowers/, docs/diagrams/exported/. Re-runnable safely.
Also regenerated src/app/docs/lib/docs-auto-generated.ts: 44 docs across
8 sections (Architecture / Guides / Reference / Frameworks / Routing /
Security / Compression / Ops), which now includes the 14 docs that were
missing from the v3.7 sidebar (Cloud Agents, Guardrails, Memory, Skills,
Webhooks, Evals, Authz, Agent Protocols, Repository Map, Provider
Reference, Reasoning Replay, Stealth Guide, Tunnels Guide, Electron
Guide).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.1 KiB
title, version, lastUpdated
| title | version | lastUpdated |
|---|---|---|
| Release Checklist | 3.8.0 | 2026-05-13 |
Release Checklist
Last updated: 2026-05-13 — v3.8.0 Streamlined release flow that leverages Claude Code skills for automation.
TL;DR
# 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
Detailed Checklist
Pre-release
- All PRs targeted to this release are merged to
release/vX.Y.0 - All open Linear/issue items for this version are closed or pushed to next milestone
- CI green on
release/vX.Y.0branch - No
TODO(release)markers in code:grep -r "TODO(release)" src/ open-sse/ - Docker base image up to date (currently
node:24.15.0-trixie-slim)
Version & Changelog
- Run
/version-bump-cc <patch|minor|major>(Claude Code skill)- Bumps
package.json,electron/package.json - Regenerates
CHANGELOG.mdfrom git commits since last tag - Updates README.md badges
- Bumps
- Manually review CHANGELOG.md and clean up commit messages if needed
- Ensure the latest semver section in
CHANGELOG.mdequalspackage.jsonversion - Keep
## [Unreleased]as the first changelog section for upcoming work - Update
docs/reference/openapi.yaml→info.versionmust equalpackage.jsonversion
Code Quality
npm run lint— 0 errors (warnings are pre-existing)npm run typecheck:core— cleannpm run typecheck:noimplicit:core— clean (strict)npm run check:cycles— no circular depsnpm run check:any-budget:t11— within budgetnpm run check:route-validation:t06— cleannpm run check:node-runtime— supported floor met (>=20.20.2 <21,>=22.22.2 <23,>=24.0.0 <25)
Testing
npm run test:unit— passnpm run test:vitest— pass (MCP server, autoCombo, cache)npm run test:coverage— gate 75/75/75/70 satisfied (statements/lines/functions/branches)npm run test:integration— pass (if changes touch DB / handlers)npm run test:e2e— pass (UI changes)npm run test:protocols:e2e— pass (MCP/A2A changes)npm run test:ecosystem— pass
Hooks (Husky validated)
Husky hooks live in .husky/ and run automatically on git operations.
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: currently disabled (commented out). When re-enabled, runs
npm run test:unit.- Run
npm run test:unitmanually before pushing release branches.
- Run
If a hook fails: fix the underlying issue, don't bypass with --no-verify.
Conventional Commits
All release-bound commits must follow type(scope): subject format.
Valid types: feat, fix, refactor, docs, test, chore, perf, style, ci
Valid scopes: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authz
Breaking changes: add BREAKING CHANGE: footer or ! after the scope (e.g. feat(api)!: drop /v0).
Documentation
npm run check:docs-syncpasses (auto-run by pre-commit)docs/architecture/ARCHITECTURE.mdreviewed for storage/runtime driftdocs/guides/TROUBLESHOOTING.mdreviewed for env var and operational drift- If
.env.examplechanged:docs/reference/ENVIRONMENT.mdupdated - If new feature has a UI:
docs/guides/USER_GUIDE.mdmentions it - If new feature has API:
docs/reference/API_REFERENCE.md+docs/reference/openapi.yamlupdated - If new feature is a module: dedicated
docs/<MODULE>.mdexists - If breaking change:
docs/guides/TROUBLESHOOTING.mdhas migration note
i18n
- Check
docs/i18n/for major language drift against source docs - Run
scripts/i18n-check.mjsif present in repo - Translation contributions can be deferred to next release if minor (track in CHANGELOG)
Database Migrations
- If
src/lib/db/migrations/has new files:- Each migration is idempotent (
CREATE TABLE IF NOT EXISTS, etc.) - Migrations wrapped in transactions
- Numbered correctly (no gaps in sequence)
- Each migration is idempotent (
- Test on fresh install: delete
~/.omniroute/omniroute.dband runnpm run dev - Test on existing install: backup DB, run migration, verify schema
- WAL files (
-wal,-shm) handled correctly if migration rewrites tables
Provider Catalog (Zod-validated)
src/shared/constants/providers.tsZod schema valid at load time- All providers have required fields (
id,label,kind, etc.) freeNoteprovided for new free providers- OAuth providers have
oauthConfigregistered insrc/lib/oauth/constants/oauth.ts
- All providers have required fields (
- If new provider added: corresponding executor in
open-sse/executors/ - If non-OpenAI format: translator in
open-sse/translator/ - Models registered in
open-sse/config/providerRegistry.ts - Unit tests in
tests/unit/cover provider classification and routing
Desktop (Electron)
If electron/ changed:
npm run electron:smoke:packagedpasses- Builds tested for at least one of
:win,:mac,:linux - Code signing certs not expired (if signing)
electron/package.jsonversion matches rootpackage.json- Auto-update channel pointer updated if releasing to
stable
Artifact Validation
npm run build:clisucceedsnpm run check:pack-artifactclean — noapp.__qa_backup,scripts/scratch,package-lock.json, or other local residuenpm run buildproduces a working standalone Next.js bundle
Tagging & Release
- Run
/generate-release-cc(Claude Code skill):- Creates tag
vX.Y.Z - Pushes tag and branch
- Opens GitHub Release with changelog body
- Attaches Electron installers (if built)
- Creates tag
- 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
Deploy
- Use deploy skill that matches target:
/deploy-vps-local-cc— local VPS (192.168.0.15)/deploy-vps-akamai-cc— Akamai VPS (69.164.221.35)/deploy-vps-both-cc— both
- Smoke test deployed instance:
- Open
/dashboard/health→ check version string matches release - Run a
/v1/chat/completionsrequest against a known provider - Verify
/api/monitoring/healthreturnsCLOSEDcircuit breakers - Confirm MCP transports respond (
/mcpHTTP,/mcp-sseSSE)
- Open
Post-release
- Run
/capture-release-evidences-cc(Claude Code skill)- Captures WebP screenshots/recordings of new features
- Attaches to release notes / blog post
- Update GitHub Discussions / Discord with release announcement
- Open milestone for next version
- If critical: pin discussion or post in
news.jsonfor in-app banner
Rollback
If release has critical issue:
gh release edit vX.Y.Z --prerelease(marks as not latest)git tag -d vX.Y.Z && git push --delete origin vX.Y.Z(only if not yet adopted by users)- Or: hotfix on
release/vX.Y.0→ patch releasevX.Y.(Z+1) - Communicate in GitHub Discussions and Discord immediately
Hard Rules
- Never commit directly to
main - Never use
git push --forcetomainorrelease/*branches - Never skip Husky hooks (
--no-verify) - Never commit secrets, credentials, or
.envfiles - Coverage must stay ≥75/75/75/70 (statements/lines/functions/branches)
- Always include or update tests when changing production code in
src/,open-sse/,electron/, orbin/
Automated Sync Check
Run the docs sync guard locally before opening a PR:
npm run check:docs-sync
CI also runs this check in .github/workflows/ci.yml (lint job).