Instance B's compose file is not in the repo — the drill's only reproducible half is the pinned refs #140
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:apply
scope:capture
scope:coolify-api
scope:fleet
scope:manifest
scope:secrets
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/cast#140
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
CONTRIBUTING tells an operator that instance B is easy to stand up, and points at a file that is not here:
drills/README.mdleans on the same fact to justify why cast needs no harness to be drillable. Butgrep -r composefinds nothing in-tree, andscripts/holds exactly one file —restore-db.sh, an operator tool for streaming a backup into a target container, not a way to create an instance.So the sentence describes a real thing that happened, using an artifact that lives on somebody's machine.
Why it matters more than a missing convenience
The whole argument for cast's drill being cheap rests on this file. Take it away and the first leg of a release drill is "obtain a second Coolify instance", which is not a documented step, has no stated version, and will be solved differently by whoever hits it — meaning instance B is a different machine every drill. A promotion drill whose target is not reproducible cannot produce comparable records:
applyagainst a hand-rolled B tells you about that B.It also makes the pinning story incoherent. The family's release safety comes from every drill exercising a fixed set of candidate refs — that argument is set out at length in
.github/scripts/drill-recorded.sh. Cast's drill pins box, rig and cast SHAs and then runs them against a Coolify instance of unrecorded version and unrecorded provenance. The pinned half is the half that was already reproducible.And the July drill is the only run this repo has ever done.
drills/says "None yet." — the record was never committed, so the compose file is now the only surviving artifact of it, and it is outside the repo.Proposed
Bring it in-tree —
drill/compose/ordrill/instance-b/, wherever the harness ends up living (heavy-duty/cast#141) — with:latest. An unpinned target makes the drill test a moving instance, which is the same defect as an unpinned candidate ref and is whyAUTOUPDATE=falseshows up in rig's coolify leg.wipe.shdoes rather than trustingdocker compose down's exit code.Worth checking whether the same file (or a sibling) can stand up instance A too. If both instances come from the same pinned definition, then "A→B reproduces" is a claim about cast rather than a claim about two hand-built machines that happened to differ — which is what the promotion drill is supposed to be asserting in the first place.
This is the natural first commit toward heavy-duty/cast#141: the harness has nothing to run against until instance B is reproducible.
Triage — normalization (2026-08-17)
Accepted as
ready. One reading settled up front: the July artifact never left the operator's machine, so the deliverable is a fresh pinned definition, not a recovery — authoring it from Coolify's published compose install, parameterised as proposed above, satisfies this issue.Acceptance criteria
drill/instance-b/), with the Coolify version pinned to an exact tag — neverlatest— and auto-update disableddocker compose down's exit codeTest plan
docker compose configrenders the definition cleanly with A-parameters and with B-parameters (mechanical, CI-safe)Dependencies
Blocks #141 (the harness has nothing reproducible to run against until this lands).
Triage: accepted as
ready— acceptance criteria, test plan and dependencies appended to the body. This is the first commit of the drill chain (#140 → #141 → #142).Starting work as codex-bot-andresmgsl. I will author the fresh pinned, parameterised Coolify drill compose definition, document setup/teardown and invariants, add the required tests and changelog entry, and open an early draft PR from an isolated worktree.