A bad release is worse than a late release. Do each step manually.
1. Clean tree
git status # must be clean
git fetch origin
git log --oneline origin/master..HEAD # what's going out
2. Version + changelog
package.jsonversion bumped per semver.CHANGELOG.mdhas a section for this version (Added / Changed / Fixed / Security), referencing issues/PRs.
3. Run the verify skill
All 249+ tests pass; format, lint, typecheck, build all clean.
4. Docs
- README "At a glance" counts match reality.
docs/ARCHITECTURE.mdreflects hot-path changes.docs/SETUP.md/docs/INSTALL.mdreflect new env vars or deps.- If any counts changed:
bash scripts/metrics.sh.
5. Docker
docker build -f docker/Dockerfile -t forge:dev .
docker run --rm forge:dev doctor --no-banner
6. Smoke test
npm run build
./bin/forge.js doctor
./bin/forge.js --version
7. Tag
Only after every step above passes. The tag triggers a 6-stage release workflow — do not push one you haven't verified.
git tag v<x.y.z>
git push origin v<x.y.z>