Merge pull request #214 from dan-claude-bot/build/212-release-0-4-1

release: cut 0.4.1
This commit is contained in:
Daniel Marin 2026-08-01 19:15:42 +01:00 committed by GitHub
commit 2050b278f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 71 additions and 25 deletions

View file

@ -49,7 +49,7 @@ on:
env: env:
# A called workflow arrives without its repository. Keep this literal pin # A called workflow arrives without its repository. Keep this literal pin
# aligned with the ceremony release consumed by callers (issue #9 D3). # aligned with the ceremony release consumed by callers (issue #9 D3).
CEREMONY_SELF_REF: "0.4.0" CEREMONY_SELF_REF: "0.4.1"
jobs: jobs:
reconcile: reconcile:

View file

@ -48,7 +48,7 @@ on:
env: env:
# A called workflow arrives without its repository. Keep this literal pin # A called workflow arrives without its repository. Keep this literal pin
# aligned with the ceremony release consumed by callers (issue #9 D3). # aligned with the ceremony release consumed by callers (issue #9 D3).
CEREMONY_SELF_REF: "0.4.0" CEREMONY_SELF_REF: "0.4.1"
jobs: jobs:
scope: scope:

View file

@ -129,7 +129,7 @@ env:
# `ref:` accepts ${{ env }}; `uses:` strings do not — which is why the # `ref:` accepts ${{ env }}; `uses:` strings do not — which is why the
# shared logic arrives as script files via checkout, not as inner `uses:` # shared logic arrives as script files via checkout, not as inner `uses:`
# references. # references.
CEREMONY_SELF_REF: "0.4.0" CEREMONY_SELF_REF: "0.4.1"
VERSION_SOURCE: ${{ inputs.version-source }} VERSION_SOURCE: ${{ inputs.version-source }}
jobs: jobs:

View file

@ -9,6 +9,31 @@ Entries arrive as fragments — one `changelog.d/<issue>.md` per PR, never
an edit to this file — and the release PR assembles them into the next an edit to this file — and the release PR assembles them into the next
section here (`bin/changelog-assemble`, #112). section here (`bin/changelog-assemble`, #112).
## 0.4.1 — 2026-08-01
### Changed
- The reconcile sweep is detached from PR-triggered runs: a new reusable
`labels-sweep.yml` carries it, woken by `labels.yml`'s new `trigger` job, so
a queue-displaced sweep cancels on the Actions tab instead of landing a
cancelled `reconcile` check on a PR (#209).
- Labels consumers add a sweep caller (`labels-sweep.yml`, stub in
docs/CONSUMERS.md), relocate the hourly cron and manual bootstrap dispatch
to it, and grant the labels caller `actions: write`; a pin bump without the
sweep caller goes loudly red at the trigger job (#209).
### Fixed
- `checks_state` drops rollup entries belonging to the workflow it runs
inside — `SELF_WORKFLOW`, defaulting to the ambient `GITHUB_WORKFLOW`
before the newest-per-context collapse: the label machine never grades
its own runs, and an empty name filters nothing (#208).
- A sweep displaced from the shared concurrency queue attaches CANCELLED to
its PR while its successor attaches elsewhere, so the sweep set
`blocker:ci-red` off its own displaced run and re-affirmed it every
cadence (crew#227). A rollup of only self entries now honestly scores
NONE (#208).
## 0.4.0 — 2026-07-29 ## 0.4.0 — 2026-07-29
### Added ### Added

View file

@ -1 +1 @@
0.4.1-dev 0.4.1

View file

@ -1,11 +0,0 @@
### Fixed
- `checks_state` drops rollup entries belonging to the workflow it runs
inside — `SELF_WORKFLOW`, defaulting to the ambient `GITHUB_WORKFLOW`
before the newest-per-context collapse: the label machine never grades
its own runs, and an empty name filters nothing (#208).
- A sweep displaced from the shared concurrency queue attaches CANCELLED to
its PR while its successor attaches elsewhere, so the sweep set
`blocker:ci-red` off its own displaced run and re-affirmed it every
cadence (crew#227). A rollup of only self entries now honestly scores
NONE (#208).

View file

@ -1,10 +0,0 @@
### Changed
- The reconcile sweep is detached from PR-triggered runs: a new reusable
`labels-sweep.yml` carries it, woken by `labels.yml`'s new `trigger` job, so
a queue-displaced sweep cancels on the Actions tab instead of landing a
cancelled `reconcile` check on a PR (#209).
- Labels consumers add a sweep caller (`labels-sweep.yml`, stub in
docs/CONSUMERS.md), relocate the hourly cron and manual bootstrap dispatch
to it, and grant the labels caller `actions: write`; a pin bump without the
sweep caller goes loudly red at the trigger job (#209).

42
drills/0.4.1.md Normal file
View file

@ -0,0 +1,42 @@
# 0.4.1 — drill record
Run 2026-08-01 by `dan-claude-bot` against release PR (Refs #212), candidate
branch `build/212-release-0-4-1` on `heavy-duty/ceremony` main at `c2987fd`.
## Scope ruling — doors unchanged, no disposable-repo rehearsal
The 0.4.0 drill (drills/0.4.0.md) probed both release doors end-to-end in a
disposable repo, and the live 0.4.0 release then exercised the merge door for
real: one tag, one release, main re-armed to `0.4.1-dev`. Since that tag,
`release.yml`'s only delta is the `CEREMONY_SELF_REF` pin line — no door
logic, no decide table, no publish step changed. Re-running a full
disposable-repo drill would rehearse machinery this repo already proved both
in rehearsal and in production within the last three days. This record
therefore rests on the standing evidence below, and says so honestly rather
than staging a ceremony for a tree the doors cannot distinguish from the last
one. The panel reviews this claim like any other; if any reviewer rules a
full drill owed, that verdict wins.
## Standing evidence at the candidate head
| # | probe | where | result |
|---|---|---|---|
| 1 | decide + merge-door step-replay (dogfood) | `release-exercise / step-replay (dogfood)` on this PR | CI-gating; green required to merge |
| 2 | decide + merge-door step-replay (consumer) | `release-exercise / step-replay (consumer)` on this PR | CI-gating; green required to merge |
| 3 | fragment chain: armed → assemble → monotonic | `release-exercise / fixture-chain` on this PR | CI-gating; green required to merge |
| 4 | the real tree's own guards (armed, monotonic, drill-recorded, self-ref) | `self-guards` on this PR | CI-gating; green required to merge |
| 5 | the 0.4.1 payload live: split labels machinery dogfooding on this very PR | this PR's checks | `labels / scope` + `labels / trigger` green, and NO `labels / reconcile` check attached — the #209 acceptance shape, observed on the first post-split PR in this repo |
Probe 5 is the one piece 0.4.0's drill could not have covered: the sweep
split is 0.4.1's payload, and this repo adopted it on merge (#211 split
`self-labels.yml` / `self-labels-sweep.yml`). Every PR opened after that
merge — this one included — is a live consumer-shaped proof that PR checks
carry scope and trigger only, with sweeps dispatched to the detached
`self-labels-sweep` runs.
## Deviations
No candidate-ref deviation arises: this record stages no scratch caller, so
nothing needs to resolve `CEREMONY_SELF_REF: "0.4.1"` before the tag exists.
The sibling crew migration is the post-tag consumer proof, per #212's
acceptance criteria.