cheatah
Guide

Releasing

How a cheatah release is cut: one headline in four places, no prerelease flag, one push, the page in the same session, the source bundle attached, and the standard proven end to end.

The one headline, four places

A release has exactly one headline — vX.Y.Z-alpha — <lowercase thesis clause> — and it appears verbatim in four places: the CHANGELOG heading (with the date), the release: commit subject, the annotated tag subject, and the GitHub release title. The CHANGELOG heading is the source of truth; everything else copies it. No cheatah prefix (the releases page already says whose releases these are), no (experimental) suffix (the -alpha in the version says it).

Flags

Every release is created without the prerelease flag. The maturity signal lives in the version string, and with no prereleases GitHub points "Latest" at the newest release on its own. Pass --latest anyway — determinism beats defaults.

The checklist

  1. Land the work, fully gated: scripts/qa_gate.sh green, regenerated artifacts (docs/html/, the hover DB, the README coverage table) committed.

  2. The release: commit: CMakeLists.txt VERSION, the CHANGELOG entry, the README status line, standards/biome-standard-<new>.toml (append-only; the previous standard's status flips to supported), pkg-manager/biome.purr's known_standards(), docs/biome.md's pins, and tests/purrc/biome_cli_test.cpp's expected strings. The body argues the semver level in prose.

  3. Tag the tip of main with an annotated tag: git tag -a vX.Y.Z-alpha — subject is the headline, body a prose digest of the notes — and park a release branch at the same commit: git branch release/vX.Y.Z-alpha vX.Y.Z-alpha^{commit}. Every release has one; it is where a hotfix for a supported Biome Standard would land without shipping main's in-flight work.

  4. One push: git push origin main vX.Y.Z-alpha release/vX.Y.Z-alpha. The pre-push hook runs the full gate, refreshes docs/html/, and archives archive/cheatah-vX.Y.Z-alpha.tar.gz from the staged review/ bundle. If the hook refreshed the site, commit that as docs: publish the regenerated site and push again.

  5. The page, in the same session as the push: gh release create vX.Y.Z-alpha --latest --title '<headline>' --notes-file <notes>. Notes follow the established shape: a short thesis, ## sections per area with the measured numbers inline, a hardening section when an audit ran, the Biome Standard pin with its semver argument, and a ## Verification footer quoting the gate.

  6. Attach the source bundle: bash scripts/archive_release.sh vX.Y.Z-alpha (it uploads the tarball once the release page exists — the Biome Standard's source-retention guarantee).

  7. Prove the standard end to end: bash scripts/test-standard-e2e.sh — an EMPTY directory, every cheatah env var cleared, biome init → biome add every member → CPM fetches each member from GitHub BY THE TAGS JUST PUSHED (real network) → build → a program exercising all five members prints RESULT: PASS and renders a PNG. This is the acceptance test that the standard's tagged combination actually works together; .github/workflows/standard-e2e.yml re-proves it on demand.

A release is not done until the tag resolves on the remote, the page exists, the tarball is attached, and the standard e2e passes — a release: commit alone is not a release.