CONTRIBUTING has always asked for the full real-hardware drill on a release. Nothing asserted it, so it was performed exactly as often as a reviewer remembered to ask — which is never, across every release in the family, until a reviewer bot finally blocked on it. The gate moves out of memory and into the tree. drill/RUNS.md is cast's own run log, starting empty: no fabricated history, and an honest note that cast has no drill harness script yet — its legs are run by the documented procedure. The file is the record, not the instrument. .github/scripts/drill-recorded.sh reads package.json and asserts that a bare version has a non-empty '## Release drill — X.Y.Z' section. A -dev tree has no ship claim and passes trivially. The version is matched WHOLE via awk field equality, release-notes.sh's fix for the same trap: 0.2.0 is not satisfied by 0.2.0-rc1, or the reverse. It requires a RECORD, not a PASS. A maintainer waiver is legal and is itself a section in drill/RUNS.md, so skipping the drill stays possible and stays a deliberate, reviewable commit rather than an oversight. The drill itself is ONE orchestrated run over the whole stack: rig bootstraps a bare host and installs box, box new mints a seed, the seed calls rig back to converge, and cast's legs run on the result. rig sits below box and above it, so the repos are mutually recursive rather than linearly ordered and their releases are not published in a fixed sequence. The run pins candidate refs (RIG_REPO/RIG_REF at mint time), so no repo must ship before another can be drilled, and drilling the candidate is drilling the release — a release diff is the version file and CHANGELOG.md, nothing executable. Each repo records its own legs from that run, citing the shared run ID and the other repos' SHAs. cast never reads box's or rig's drill log to decide whether cast may ship: a cross-repo lookup degrades to "pass" the moment it fails to resolve — the unreadable-rollup class. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Changelog
History before 0.1.0 lives in git — cast has said 0.1.0 in package.json
since its first commit, but grew its release surface (this file,
cast --version, tagged releases with a prebuilt asset) on the way to
actually cutting it, and this file starts there.
Unreleased
Added
- CI refuses a release PR with no drill record in
drill/RUNS.md - An application can declare HTTP basic auth, and
applysets it (#76) cast github-app create/cast github-app registerrun the App Manifest flow (#7)
Changed
state:needs-humanis set at handoff, not by the cron (#131)- PR labels split into two axes:
state:*(whose ball) andblocker:*(what is in the way);state:needs-rebaseis retired (heavy-duty/box#138) - The
NO_API_COVERAGErow for Basic Auth now says services (#76) - Changelog entries are one line each, and the whole file now follows the rule (#136)
Removed
- BREAKING:
scripts/register-github-app.shis gone; usecast github-app register(#7)
Fixed
- Three test files from #124/#125 allocate through
tmp(), not rawmkdtempSync(#135) - A PR that deletes a shipped release heading is now CI-red (#133, heavy-duty/box#122)
- A duplicate release heading is caught even where the guard cannot see the base (#133, heavy-duty/box#143)
- A label the repo does not have no longer takes the whole label edit down with it
- An unreadable check rollup no longer reads as "nothing is failing"
state:needs-humanno longer appears on PRs a human cannot merge (#127, heavy-duty/box#136)- CI lints every tracked shell script, and proves the set is complete (#118)
- The shellcheck sweep covers extensionless scripts such as
bin/cast(#121) castno longer leaves a full repo clone in the temp dir on every run (#117)- The test suite reaps its temp directories (#117)
0.1.1 — 2026-07-19
Fixed
- The release ceremony re-arms
## Unreleased, and CI is red when it does not (#113)
0.1.0 — 2026-07-19
Fixed
- The release suite accepts the ceremony's own tree (#108)
applyno longer demands a GitHub App for a manifest that declares no applications (#103)- A manifest with no
${…}refs applies without a secret store (#104) CAST_AGE_KEY_FILE_<ENV>is settable for every environment name (#102)
Added
- Merging a release-labeled PR is the release, and the release re-arms main itself (#111)
- Tagged releases with a prebuilt dist asset, and an installer that installs them (#96)