cast/test
dan-claude-bot 2578a570ca feat: CI refuses a release PR with no drill record
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>
2026-07-21 15:24:08 +00:00
..
fixtures feat(service): set and diff per-container service hostnames via urls (#72) 2026-07-16 15:14:29 +00:00
helpers fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
apply.test.ts style: biome formatting for the basic-auth completion tests 2026-07-21 12:56:00 +00:00
backup-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
basic-auth-cli.test.ts fix: route the #124/#125 test files through tmp() 2026-07-21 13:47:29 +00:00
bindings.test.ts fix: smoke resolves its target inside the project it was declared under (#29) 2026-07-13 20:08:35 +00:00
capture-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
capture.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
config.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
coolify.test.ts fix(draft): read backup schedules and emit backup blocks (#75) 2026-07-16 18:25:34 +00:00
destroy.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
diff.test.ts feat: an application can declare HTTP basic auth, and apply sets it 2026-07-21 12:38:03 +00:00
domain-preflight.test.ts feat(service): set and diff per-container service hostnames via urls (#72) 2026-07-16 15:14:29 +00:00
draft-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
draft.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
envtemplate.test.ts feat(resolve): derive base-URL env vars from manifest domains via ${domain:...} (#66) 2026-07-15 12:02:33 +00:00
fleet-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
fleet.test.ts feat: --all — every project in an environment, and a report that says so (#26) 2026-07-13 20:23:23 +00:00
github-app-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
github-app-register-cli.test.ts fix: route the #124/#125 test files through tmp() 2026-07-21 13:47:29 +00:00
github-app.test.ts fix: route the #124/#125 test files through tmp() 2026-07-21 13:47:29 +00:00
greenfield-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
install-sh.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
inventory.test.ts feat: read-side coordinates (#17, #18) + cast inventory (#19) 2026-07-13 18:20:53 +00:00
labels-reconcile.sh fix(labels): a missing state label skips the edit, not the whole PR 2026-07-20 18:09:16 +00:00
layout-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
live-lookup.test.ts feat(draft): capture service hostnames via per-service GET (#83) 2026-07-16 18:30:49 +00:00
manifest.test.ts feat: an application can declare HTTP basic auth, and apply sets it 2026-07-21 12:38:03 +00:00
placement-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
read-side-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
release.test.ts feat: CI refuses a release PR with no drill record 2026-07-21 15:24:08 +00:00
reserved.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
resolve.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
secrets.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
smoke-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
smoke.test.ts feat: cast — the Coolify executor, extracted from the infra state repo 2026-07-11 12:25:44 +00:00
sweep-cli.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
team.test.ts feat: assert the token's team before touching Coolify (fail-closed) 2026-07-12 20:55:04 +00:00
tmp-guard.test.ts fix: reap temp dirs — a runtime clone leak in resolveCheckout, and 68 uncleaned test sites 2026-07-21 12:58:14 +00:00
version-cli.test.ts refactor: rescope to versioned installations — the release flow moves out 2026-07-18 21:17:59 +00:00
wire.test.ts fix: complete the basic-auth triple on username-only drift, at both guards 2026-07-21 12:43:04 +00:00