Releasing
How a cheatah release is cut. Every rule here exists because its absence once produced a broken release page: v1.9.0-alpha shipped its commit but never its tag, three title formats accumulated across twenty releases, and a stray prerelease flag pinned GitHub's "Latest" badge to an old version.
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; the flag's only observed effect has been to strand the "Latest" badge on whichever release accidentally omitted it. With no prereleases, GitHub points "Latest" at the newest release automatically. Pass --latest anyway — determinism beats defaults.
The checklist
Land the work, fully gated:
scripts/qa_gate.shgreen, regenerated artifacts (docs/html/, the hover DB, the README coverage table) committed.The
release:commit:CMakeLists.txtVERSION, the CHANGELOG entry, the README status line,standards/biome-standard-<new>.toml(append-only; the previous standard's status flips tosupported),pkg-manager/biome.purr'sknown_standards(),docs/biome.md's pins, andtests/purrc/biome_cli_test.cpp's expected strings. The body argues the semver level in prose.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.One push:
git push origin main vX.Y.Z-alpha release/vX.Y.Z-alpha. The pre-push hook runs the full gate, refreshesdocs/html/, and archivesarchive/cheatah-vX.Y.Z-alpha.tar.gzfrom the stagedreview/bundle. If the hook refreshed the site, commit that asdocs: publish the regenerated siteand push again.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## Verificationfooter quoting the gate.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).Prove the standard end to end:
bash scripts/test-standard-e2e.sh— an EMPTY directory, every cheatah env var cleared,biome init→biome addevery member → CPM fetches each member from GitHub BY THE TAGS JUST PUSHED (real network) → build → a program exercising all five members printsRESULT: PASSand renders a PNG. This is the acceptance test that the standard's tagged combination actually works together;.github/workflows/standard-e2e.ymlre-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.
