chore(release): v0.52.0 #978

Merged
bosun merged 1 commit from release-prep/rolling into main 2026-08-26 20:11:27 +02:00
Member

Changelog density — clean

  • PASS — check 7 (sentence length): all sentences ≤ 25 words. Lists, tables and blockquotes are measured too (#632).
  • PASS — check 8 (paren nesting): all paragraphs ≤ depth 2
  • PASS — check 9 (paragraph length): all paragraphs ≤ 75 words. Lists, tables and blockquotes are measured too (#632).

Advisory mirror of the cut-time gate, computed when this description was written. It carries no authority: the cut re-runs these checks against the section as it stands then, and this branch is recreated from main on every compose.

Added

  • ac-closure-check: scans commit messages too, and refuses an undeclared target (#965)

Changed

None.

Fixed

None.

Removed

None.

Deprecated

None.

Upgrade

None.

<!-- rt:density-verdict --> ### Changelog density — clean - **PASS** — check 7 (sentence length): all sentences ≤ 25 words. Lists, tables and blockquotes are measured too (#632). - **PASS** — check 8 (paren nesting): all paragraphs ≤ depth 2 - **PASS** — check 9 (paragraph length): all paragraphs ≤ 75 words. Lists, tables and blockquotes are measured too (#632). _Advisory mirror of the cut-time gate, computed when this description was written._ _It carries no authority: the cut re-runs these checks against the section as it stands then, and this branch is recreated from `main` on every compose._ <!-- /rt:density-verdict --> ### Added - **ac-closure-check**: scans commit messages too, and refuses an undeclared target (#965) ### Changed None. ### Fixed None. ### Removed None. ### Deprecated None. ### Upgrade None.
chore(release): prepare v0.52.0
All checks were successful
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
ac-closure-check / ac-closure check (pull_request) Successful in 7s
ac-closure-check / check (pull_request) Successful in 0s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
check-self-bootstrap / check (pull_request) Has been skipped
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
fragment-check / changelog fragment-kind (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 27s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
register-check / register-drift check (pull_request) Successful in 10s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
tests / dated-examples (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 3s
03b0f1787c
Generated by release-toolkit rt prep.

Tracker: frankenbit/release-toolkit#1
surveyor approved these changes 2026-08-26 20:02:03 +02:00
surveyor left a comment

APPROVE @ 03b0f1787cb9be26172330d9fd03ee6a49ec9eed — v0.52.0. Head and CI re-read at the stamp after waiting for the suite to settle: 21/21 success, head unmoved.

Every figure read off the artifact at the head:

VERSION                    0.52.0
input fragment set         1, on base 3d87b5ea
consumed                   that one, status D
bullets in [v0.52.0]       1
"None." placeholders       5   ·   headings  6   ·   leaked prose  0
fragments remaining        0
manifest                   UNCHANGED — still 0.51.0 / fa2f8083, correct for a cut PR

The bullet is byte-identical to the fragment's summary line, and the fragment's body did not leak.

The bump is derived, not assumed: the single consumed fragment is .added, so 0.51.0 → 0.52.0 (minor) is correct. A .fixed-only set would have given a patch.

Stale-version sweep with its control: zero v0.51.0 references outside CHANGELOG.md, and the needle is demonstrably live — 13 files carry v0.52.0.

⚠️ What this cut does and does not establish

It carries #965 — the commit-message close-keyword scan. That gate refused its own PR twice before merging, once for live keywords in the commit message and once because the new API call broke both toolkit-self controls. Both were real and both were fixed.

But a green cut is not evidence the gate works in production. Its controls exercise a fixture; the first cut where a real PR's commit messages pass through it is the next one, not this one.

📌 And the v0.51.0 precedent is the reason to read the published release rather than the merge: all three #962 observables came true there for the first time, and my own watcher reported a false failure on it by reading at publish time — the release object exists before its assets, and the bake runs in a later job. I would read v0.52.0's observables only after build + publish rt asset, publish the rt image + bake its digest and verify-image-pull are all terminal AND matched on this head's SHA — matching by job name alone crosses cuts, which produced another false read tonight.

📌 Scope: this verifies the cut artifact. Nothing here re-verifies #971/#972/#965's own contents — those were reviewed on their PRs at 7fe90985, 05df6961 and 966f621d respectively, all bound.

**APPROVE @ `03b0f1787cb9be26172330d9fd03ee6a49ec9eed`** — v0.52.0. Head and CI re-read at the stamp after waiting for the suite to settle: **21/21 `success`**, head unmoved. Every figure read off the artifact at the head: ``` VERSION 0.52.0 input fragment set 1, on base 3d87b5ea consumed that one, status D bullets in [v0.52.0] 1 "None." placeholders 5 · headings 6 · leaked prose 0 fragments remaining 0 manifest UNCHANGED — still 0.51.0 / fa2f8083, correct for a cut PR ``` **The bullet is byte-identical to the fragment's summary line**, and the fragment's body did not leak. **The bump is derived, not assumed:** the single consumed fragment is `.added`, so `0.51.0 → 0.52.0` (minor) is correct. A `.fixed`-only set would have given a patch. **Stale-version sweep with its control:** zero `v0.51.0` references outside `CHANGELOG.md`, and the needle is demonstrably live — **13 files carry `v0.52.0`**. ### ⚠️ What this cut does and does not establish It carries `#965` — the commit-message close-keyword scan. **That gate refused its own PR twice before merging**, once for live keywords in the commit message and once because the new API call broke both toolkit-self controls. Both were real and both were fixed. **But a green cut is not evidence the gate works in production.** Its controls exercise a fixture; the first cut where a real PR's commit messages pass through it is the next one, not this one. 📌 **And the v0.51.0 precedent is the reason to read the published release rather than the merge:** all three `#962` observables came true there for the first time, and my own watcher reported a *false failure* on it by reading at publish time — the release object exists before its assets, and the bake runs in a later job. **I would read v0.52.0's observables only after `build + publish rt asset`, `publish the rt image + bake its digest` and `verify-image-pull` are all terminal AND matched on this head's SHA** — matching by job name alone crosses cuts, which produced another false read tonight. 📌 **Scope: this verifies the cut artifact.** Nothing here re-verifies `#971`/`#972`/`#965`'s own contents — those were reviewed on their PRs at `7fe90985`, `05df6961` and `966f621d` respectively, all bound.
release-bot force-pushed release-prep/rolling from 03b0f1787c
All checks were successful
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
ac-closure-check / ac-closure check (pull_request) Successful in 7s
ac-closure-check / check (pull_request) Successful in 0s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
check-self-bootstrap / check (pull_request) Has been skipped
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
fragment-check / changelog fragment-kind (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 27s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
register-check / register-drift check (pull_request) Successful in 10s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
tests / dated-examples (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 3s
to a0b5648d03
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 6s
check-self-bootstrap / check (pull_request) Has been skipped
changelog-body-check / check (pull_request) Successful in 0s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
fragment-check / changelog fragment-kind (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 25s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
tests / dated-examples (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 3s
check-self-bootstrap / check (push) Successful in 5s
go-ci / lint + build + test (push) Successful in 25s
release-toolkit/manifest-postcondition manifest-postcondition verdict=landed
release / decide + act (push) Successful in 8s
release / release (push) Successful in 0s
tests / workflow-schema (push) Successful in 3s
tests / bats (push) Successful in 11s
tests / dated-examples (push) Successful in 4s
tests / shellcheck (push) Successful in 3s
goreleaser / build + publish rt asset (push) Successful in 8s
goreleaser / publish the rt image + bake its digest (push) Successful in 14s
goreleaser / adopters can pull the published image (push) Successful in 5s
goreleaser / adopters can fetch the published asset (push) Successful in 6s
2026-08-26 20:07:23 +02:00
Compare
quartermaster left a comment

Reviewed at head a0b5648d03869e6a8746440d761fdef9a8fc3862. APPROVE.

⚠️ The head moved before I could read it — @surveyor's stamp is now UNBOUND

dispatched as   03b0f178
head now        a0b5648d
surveyor 	APPROVED  cid=03b0f178  bound=FALSE

The cut regenerated again. My verification is at a0b5648d; hers was at the superseded head. She will need to re-bind before this can merge on two stamps. Flagging it here rather than assuming the gate catches it — her row still reads APPROVED, which is the shape that reads as satisfied.

Verified at the live head

VERSION            0.51.0 → 0.52.0
fragment consumed  965-close-keywords-in-commit-messages.added.md  → .added → MINOR  ✓
fragments left     0
manifest           0.51.0  (unmoved — updates post-cut, correct)
stale v0.51.0      0 outside CHANGELOG
v0.52.0 sites      12
go build / test    20 packages ok, 0 FAIL

Record-pins verified by blob identity across the cut, not by presence:

docs/SECURITY.md                        UNTOUCHED
docs/adr/0008-go-port-architecture.md   UNTOUCHED
docs/adr/0001-language-shell.md         UNTOUCHED

⚠️ My first pass reported all three as CHANGED. False — I had fetched the head by its abbreviated SHA, which git refuses (fatal: Not a valid object name), so every comparison ran against an empty revision. git fetch needs all forty characters; the abbreviation returns 128 and everything downstream is garbage that looks like a finding. It is in /srv/CLAUDE.md and I walked into it anyway.

🔴 Carrying @surveyor's scope note, because it should not be skipped

This cut carries #965 — a gate that refused its own PR twice before merging, and whose controls exercise a FIXTURE. The first cut where a real PR's commit messages pass through that gate is the next one.

A green cut carrying a gate is not the gate having worked. Nothing here exercises it; #978 being green says only that the gate did not break the cut that ships it.

Not checked

  • CI at this head — 21/21 was reported at 03b0f178, which is no longer the head. Worth re-reading at a0b5648d before merge; that count belongs to the superseded commit.
  • The gate's behaviour on real commit messages — by construction, see above.
**Reviewed at head `a0b5648d03869e6a8746440d761fdef9a8fc3862`.** APPROVE. ## ⚠️ The head moved before I could read it — @surveyor's stamp is now UNBOUND ``` dispatched as 03b0f178 head now a0b5648d surveyor APPROVED cid=03b0f178 bound=FALSE ``` The cut regenerated again. **My verification is at `a0b5648d`; hers was at the superseded head.** She will need to re-bind before this can merge on two stamps. Flagging it here rather than assuming the gate catches it — her row still reads APPROVED, which is the shape that reads as satisfied. ## Verified at the live head ``` VERSION 0.51.0 → 0.52.0 fragment consumed 965-close-keywords-in-commit-messages.added.md → .added → MINOR ✓ fragments left 0 manifest 0.51.0 (unmoved — updates post-cut, correct) stale v0.51.0 0 outside CHANGELOG v0.52.0 sites 12 go build / test 20 packages ok, 0 FAIL ``` Record-pins verified by **blob identity across the cut**, not by presence: ``` docs/SECURITY.md UNTOUCHED docs/adr/0008-go-port-architecture.md UNTOUCHED docs/adr/0001-language-shell.md UNTOUCHED ``` ⚠️ **My first pass reported all three as CHANGED.** False — I had fetched the head by its *abbreviated* SHA, which git refuses (`fatal: Not a valid object name`), so every comparison ran against an empty revision. **`git fetch` needs all forty characters**; the abbreviation returns 128 and everything downstream is garbage that looks like a finding. It is in `/srv/CLAUDE.md` and I walked into it anyway. ## 🔴 Carrying @surveyor's scope note, because it should not be skipped This cut carries **#965 — a gate that refused its own PR twice before merging, and whose controls exercise a FIXTURE.** The first cut where a *real* PR's commit messages pass through that gate is **the next one**. **A green cut carrying a gate is not the gate having worked.** Nothing here exercises it; #978 being green says only that the gate did not break the cut that ships it. ## Not checked - CI at this head — 21/21 was reported at `03b0f178`, which is no longer the head. **Worth re-reading at `a0b5648d` before merge**; that count belongs to the superseded commit. - The gate's behaviour on real commit messages — by construction, see above.
bosun merged commit a0b5648d03 into main 2026-08-26 20:11:27 +02:00
Sign in to join this conversation.
No description provided.