This document defines the release process for Friday.
- Maintainer access to
main - GitHub Actions enabled
- Optional repository variable:
RELEASE_PUBLISH_NPM(true,false, or unset for auto) - Clean working tree
Run both of these from the repository root before tagging:
npm run release:verify:repo
npm run release:verifyrelease:verify:repo verifies deterministic repo health:
- typecheck
- lint
- build (API + UI)
- full test suite
- migration/adversarial/SSD quality checks
- install smoke test (
npm pack+ isolated install/run) - release artifact validation (
release:check)
release:verify verifies live proof only:
- real green gate against a live Friday runtime
- no-mock leak scan over proof inputs
- current truth-audit artifacts
Do not tag a release if release:verify is green but the truth artifacts still conclude shipable with explicit de-scope or not shipable and the release notes do not carry that boundary forward.
Before tagging, confirm these release surfaces are complete:
package.jsonversion equals target tagCHANGELOG.mdcontains the target version section- release notes are prepared (use
docs/RELEASE_NOTES_TEMPLATE.md) LICENSEis present (MIT).github/SECURITY.mdis current- latest
CIworkflow run formainis green - current runtime snapshot is captured
- current claim matrix is present
- current defect ledger is present
- current isolated review result is present
- no-mock contamination check for the proof inputs passes
- release verdict is explicitly recorded as
shipable as-is,shipable with explicit de-scope, ornot shipable
- Update
CHANGELOG.mdwith release notes under the target version. - Bump version:
npm version <patch|minor|major> --no-git-tag-version- Run
npm run release:verify:repoagain. - Run
npm run release:verifyagain. - Link the current runtime snapshot, claim matrix, defect ledger, isolated review result, and ship verdict in the release notes.
- Commit release metadata:
git add package.json package-lock.json CHANGELOG.md
git commit -m "chore(release): vX.Y.Z"- Create and push a tag:
git tag vX.Y.Z
git push origin main
git push origin vX.Y.Zrelease.ymlruns on the tag:- re-runs release verification
- verifies
tag == package.json version - publishes to npm when mode allows and credentials are available
- creates GitHub Release
If NPM_TOKEN is not configured, release.yml automatically skips npm publish and still creates the GitHub Release.
You can force behavior with repository variable RELEASE_PUBLISH_NPM:
true: always attempt npm publishfalse: never publish to npm (GitHub-only release)- unset: auto (publish only when
NPM_TOKENexists)
- Follow steps 1-5 above.
- Confirm workflow log includes "npm publish: skipped (NPM_TOKEN missing)".
- Mark release notes as GitHub source-only (no npm package).
- npm package issues: publish a patch version and deprecate the broken version.
- GitHub tag issues: create a follow-up patch tag; do not force-move existing release tags.
- Security incidents: follow
.github/SECURITY.md, patch forward, and publish advisory notes in release changelog.