Release Playbook¶
NON-NORMATIVE. Steps to publish npm packages and create GitHub releases.
When to bump¶
- Per-package semver: Each of
agentic-math,mcp-server,cli, andplugin-bundlehas its own version inpackages/<pkg>/package.json. Bump when that package has user-facing or fix changes (patch/minor/major). - Which packages: Bump only the packages that changed. Other packages keep
their current version; the release workflow publishes whatever version is in
each
package.json.
Tag strategy¶
- Single tag per release: Use one tag
vX.Y.Z(for examplev0.1.3) for the whole repo. The tag triggers .github/workflows/release.yml. The tag value is independent of individual package versions: for example, tagv0.1.3can shipcli0.1.3,mcp-server0.1.2, andagentic-math0.1.1. - Release notes: Document which package versions are included in the
release, either in the GitHub Release body or in
docs/release-notes/README.md.
Steps¶
- Bump versions in
packages/<pkg>/package.jsonfor each package you are releasing. - Add or update release notes in
docs/release-notes/<pkg>-<x-y-z>.md(for examplecli-0-1-3.md). Include frontmatter withlast-verified: YYYY-MM-DD. - Run release cadence check locally:
python scripts/governance/release_cadence_check.py --check
Fix any reported issues (missing release note, missing or stale last-verified).
4. Capture documentation evidence for the release:
- Update any authoritative docs whose runtime surface changed in the release
(for example
docs/architecture/overview.md,docs/integrations/platform-services.md,docs/runbooks/deployment.md, ordocs/security/security-posture.md). - Run
python scripts/docs_contract.py --check --working-tree. -
If a narrow exception is required, add it to
.morphism/policies/docs_contract_waivers.jsonand cite the waiver id in the PR. -
Run full CI by either pushing to a branch and opening a PR, or running
npx turbo typecheck lint testandpytest tests/locally. Merge when green. - Create and push the tag (from main):
git tag -a v0.1.3 -m "Release v0.1.3"
git push origin v0.1.3
- Release workflow runs: full CI, build TypeScript, publish npm, build Python, publish PyPI, and create the GitHub Release with auto-generated notes and Python artifacts.
Attaching human-written release notes to the GitHub Release¶
- The workflow uses
gh release create ... --generate-notes, so the release body is auto-generated from commits. To add human-written notes: - After the release is created, edit the release in the GitHub UI and paste or link content from
docs/release-notes/*.md, or - Extend the workflow to build a body from
docs/release-notes/(for example by concatenating the files for the versions being released) and pass it togh release create ... --notes-file. That requires mapping the tag to package versions in the workflow.
Version alignment¶
- Packages can be at different versions, for example
agentic-math0.1.1 whilecliis 0.1.2. There is no requirement to bump all packages together. Align when you want a single release train; otherwise bump only what changed.
Optional: validate before tag¶
Run the same checks CI runs:
python scripts/policy_check.py --mode ci --explain
python scripts/governance/release_cadence_check.py --check
python scripts/docs_contract.py --check --working-tree
If any check fails, fix before creating the tag.