# 0.4.0 — drill record Run 2026-07-29 by `codex-bot-andresmgsl` against release PR #207 head `7c755bcd402ba7f9a38ecd406a025c149c77aa57`. Where: disposable private repo `codex-bot-andresmgsl/ceremony-drill-0.4.0`, carrying the `docs/CONSUMERS.md` release caller and a fragment-mode fixture armed at `0.4.0-dev`. The fixture had `changelog.d/README.md`, one release fragment, and a non-blank drill record. The repository is archived, pending the operator's delete. ## Candidate-ref deviation The pure consumer path cannot resolve `CEREMONY_SELF_REF: "0.4.0"` before the candidate creates that tag. No `0.4.0` branch was created in `heavy-duty/ceremony`. The scratch caller instead used `codex-bot-andresmgsl/ceremony@drill/0.4.0`, whose parent is PR #207 head `7c755bcd402ba7f9a38ecd406a025c149c77aa57` and whose only additional commit rewrites both `CEREMONY_SELF_REF` carriers to that same canonical candidate SHA. All runtime machinery was therefore fetched from the 0.4.0 candidate tree. ## Probes | # | probe | run | result | |---|---|---|---| | 1 | merge-door ceremony | 30445585532 (attempt 1) | ✅ one `0.4.0` release; tag equals merge commit; main re-armed to `0.4.1-dev` with only `changelog.d/README.md` | | 2 | mislabeled ordinary PR | 30445473977 | ✅ green NOTICE no-op; no tag or release | | 3 | bare-version PR without `release` | 30445513860 | ✅ refused at decide; no tag or release | | 4 | re-run completed ceremony | 30445585532 (attempt 2) | ✅ refused because the tag/release already existed; release count stayed one | | 5 | manual matching tag | 30445658952 | ✅ `0.5.0` published with its changelog section; main untouched | | 6 | mismatched tag | 30445684268 | ✅ refused before publication; no `9.9.9` release, and the probe tag was removed afterward | The merge-door `0.4.0` tag and PR #3 merge commit were both `2b2d592ffcc5c376e55bd5fcf2dd5ffbdd692d64`. Its release body was exactly: ```text - Fragment mode is exercised by the 0.4.0 drill. ``` ## Setup The armed fixture was committed before the caller so the first workflow run had a real parent version to inspect. Installing the caller then produced green baseline run 30445432039. After the unlabeled bare-version refusal, its merge commit was reverted to restore the armed fixture. That setup correction produced green no-op run 30445544068 before the merge-door probe began.