forked from heavy-duty/ceremony
drill 0.6.0: probes 1, 3 and 4 recorded from their runs
This commit is contained in:
parent
24b69aea8e
commit
6f30989e2a
1 changed files with 76 additions and 3 deletions
|
|
@ -81,13 +81,86 @@ One row per probe, written from its run. Runs are in
|
||||||
|
|
||||||
| # | probe | run | result |
|
| # | probe | run | result |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 1 | merge-door ceremony | — | — |
|
| 1 | merge-door ceremony | 30992108742 (attempt 1) | ✅ exactly one `0.6.0` release; tag equals the merge commit; main re-armed to `0.6.1-dev` |
|
||||||
| 2 | mislabeled ordinary PR | 30991634654 | ✅ green NOTICE no-op; no tag, no release |
|
| 2 | mislabeled ordinary PR | 30991634654 | ✅ green NOTICE no-op; no tag, no release |
|
||||||
| 3 | bare-version PR without `release` | — | — |
|
| 3 | bare-version PR without `release` | 30991832001 | ✅ refused at decide; no tag, no release |
|
||||||
| 4 | re-run completed ceremony | — | — |
|
| 4 | re-run completed ceremony | 30992108742 (attempt 2) | ✅ refused at the nothing-exists assert; the release count stayed one |
|
||||||
| 5 | manual matching tag | — | — |
|
| 5 | manual matching tag | — | — |
|
||||||
| 6 | mismatched tag | — | — |
|
| 6 | mismatched tag | — | — |
|
||||||
|
|
||||||
|
### Probe 1 — the merge-door ceremony
|
||||||
|
|
||||||
|
PR #4 (`probe1-ceremony`) bumped `0.6.0-dev` to bare `0.6.0` and stamped
|
||||||
|
`## 0.6.0 — 2026-08-05`, assembled from the three fixture fragments by the
|
||||||
|
candidate's own `bin/changelog-assemble` and committed with the deletions
|
||||||
|
in one commit. The `release` label was applied and confirmed before the
|
||||||
|
merge. Facts and verdict:
|
||||||
|
|
||||||
|
```text
|
||||||
|
VER: 0.6.0
|
||||||
|
BASE_VER: 0.6.0-dev
|
||||||
|
RELEASED:
|
||||||
|
LABELED: yes
|
||||||
|
ceremony=yes
|
||||||
|
```
|
||||||
|
|
||||||
|
Observed after the run:
|
||||||
|
|
||||||
|
- **Exactly one** release: `GET /releases` returned `0.6.0` alone, not a
|
||||||
|
draft, not a pre-release, zero assets (no artifact hook in the fixture —
|
||||||
|
the hook step skipped).
|
||||||
|
- `GET /tags` returned `0.6.0` alone, pointing at
|
||||||
|
`64d02539f4a20286afc08b9997f0f8a7d1dbfccd`, which is PR #4's merge commit
|
||||||
|
— the tag names the tree that was reviewed.
|
||||||
|
- The release body was byte-for-byte the assembled section's bullets:
|
||||||
|
|
||||||
|
```text
|
||||||
|
- A second ordinary fragment, written by probe 2 of the 0.6.0 drill (#249).
|
||||||
|
- An ordinary behavior change, landing under the release label (#249).
|
||||||
|
- Fragment mode is exercised by the ceremony 0.6.0 drill (#249).
|
||||||
|
```
|
||||||
|
|
||||||
|
- Main re-armed itself: commit `2d0e19a` ("bump main to 0.6.1-dev — a dev
|
||||||
|
install must not impersonate 0.6.0"), pushed by the job's own token. Main
|
||||||
|
reads `0.6.1-dev` and `changelog.d/` holds only `README.md`.
|
||||||
|
- **The anti-recursion property held.** Neither the tag create nor the bump
|
||||||
|
push started a workflow run — the run list after the ceremony ends at
|
||||||
|
30992108742. That is what makes the merge door the release's only chance
|
||||||
|
to publish, and it is the reason probe 4 below is the door's own guard
|
||||||
|
rather than a second run's.
|
||||||
|
|
||||||
|
### Probe 4 — a re-run of the completed ceremony
|
||||||
|
|
||||||
|
Re-running 30992108742 as attempt 2 re-decided `ceremony=yes` — the facts
|
||||||
|
at that merge commit have not changed — and then died at the assert:
|
||||||
|
|
||||||
|
```text
|
||||||
|
tag '0.6.0' already exists — this release already happened, or a manual tag won the race; refusing to re-release, creating nothing.
|
||||||
|
```
|
||||||
|
|
||||||
|
Tag, publish and bump all skipped. `GET /releases` still returned exactly
|
||||||
|
one `0.6.0`. The refusal is loud (the job is red) and creates nothing, which
|
||||||
|
is the required shape: the assert is what covers a manual tag racing the
|
||||||
|
merge, not only an operator's stray re-run.
|
||||||
|
|
||||||
|
### Probe 3 — a bare-version PR without the `release` label
|
||||||
|
|
||||||
|
PR #3 (`probe3-bare`) bumped `VERSION` to bare `0.6.0` and carried no label;
|
||||||
|
the label list was read as empty before merging. The merge run refused at
|
||||||
|
decide, row 5 of the table:
|
||||||
|
|
||||||
|
```text
|
||||||
|
VER: 0.6.0
|
||||||
|
BASE_VER: 0.6.0-dev
|
||||||
|
RELEASED:
|
||||||
|
LABELED: no
|
||||||
|
the version transitioned ('0.6.0-dev' -> '0.6.0') but no merged, release-labeled PR is behind this commit — a release is a labeled ceremony PR, not a bare push — creating nothing.
|
||||||
|
```
|
||||||
|
|
||||||
|
Notes, the assert, tag, hook, publish and bump all skipped; tags and
|
||||||
|
releases were both still empty afterwards. The merge was then undone and
|
||||||
|
main re-armed to `0.6.0-dev` before the ceremony probe ran (see Setup).
|
||||||
|
|
||||||
### Probe 2 — a mislabeled ordinary PR
|
### Probe 2 — a mislabeled ordinary PR
|
||||||
|
|
||||||
PR #2 (`probe2b-mislabeled`) added one changelog fragment and touched no
|
PR #2 (`probe2b-mislabeled`) added one changelog fragment and touched no
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue