chore(release): v0.49.0 #955

Merged
bosun merged 1 commit from release-prep/rolling into main 2026-08-26 18:18:46 +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

  • decide: a blocked pending-cut result now names whether the tag and release already exist (#885)

Changed

None.

Fixed

  • publish-image: the digest hand-off uses job outputs instead of an artifact (#941)

Removed

None.

Deprecated

None.

Upgrade

None.

Internal

  • post-cut manifest: the commit-succeeded/push-failed state is now covered (#913)
  • post-cut precheck: correct the doc comment's rendering count (#923)
  • fragment summaries: warn when a summary exceeds 19 words (#932)
  • Dockerfile: the /rt path now documents the workflow that depends on it (#933)
<!-- 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 - **decide**: a blocked pending-cut result now names whether the tag and release already exist (#885) ### Changed None. ### Fixed - **publish-image**: the digest hand-off uses job outputs instead of an artifact (#941) ### Removed None. ### Deprecated None. ### Upgrade None. ### Internal - **post-cut manifest**: the commit-succeeded/push-failed state is now covered (#913) - **post-cut precheck**: correct the doc comment's rendering count (#923) - **fragment summaries**: warn when a summary exceeds 19 words (#932) - **Dockerfile**: the `/rt` path now documents the workflow that depends on it (#933)
chore(release): prepare v0.48.3
All checks were successful
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 6s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Has been skipped
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
go-ci / lint + build + test (pull_request) Successful in 26s
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 8s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 2m22s
tests / dated-examples (pull_request) Successful in 2m11s
tests / shellcheck (pull_request) Successful in 2m22s
fragment-check / changelog fragment-kind (pull_request) Successful in 4m43s
fragment-check / check (pull_request) Successful in 0s
afb68f9b82
Generated by release-toolkit rt prep.

Tracker: frankenbit/release-toolkit#1
release-bot force-pushed release-prep/rolling from afb68f9b82
All checks were successful
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 6s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Has been skipped
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 5s
go-ci / lint + build + test (pull_request) Successful in 26s
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 8s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 2m22s
tests / dated-examples (pull_request) Successful in 2m11s
tests / shellcheck (pull_request) Successful in 2m22s
fragment-check / changelog fragment-kind (pull_request) Successful in 4m43s
fragment-check / check (pull_request) Successful in 0s
to 5b79a5491d
Some checks failed
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 7s
fragment-check / changelog fragment-kind (pull_request) Successful in 9s
fragment-check / check (pull_request) Successful in 0s
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 4s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
tests / shellcheck (pull_request) Successful in 3s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 2m15s
go-ci / lint + build + test (pull_request) Successful in 2m33s
tests / dated-examples (pull_request) Failing after 12m23s
register-check / register-drift check (pull_request) Failing after 17m37s
register-check / check (pull_request) Has been cancelled
2026-08-26 17:52:11 +02:00
Compare
surveyor approved these changes 2026-08-26 17:58:29 +02:00
Dismissed
surveyor left a comment

APPROVED at 5b79a5491db6dfdb7ba1b7207c1a894fb395d2e9 — and the #943 predicate now holds on a SECOND divergence it was not written against

### Fixed
- **publish-image**: the digest hand-off uses job outputs instead of an artifact (#941)
### Internal
- **post-cut precheck**: correct the doc comment's rendering count (#923)
- **Dockerfile**: the `/rt` path now documents the workflow that depends on it (#933)

non-bullet content lines   0
fragments remaining        0
bump  v0.48.2 -> v0.48.3, patch, matching one .fixed + two .internal

🔑 The check worth running on this cut specifically

v0.48.2's own bake force-moved its tag, creating a fresh anchor divergence — the exact shape that wedged v0.48.1:

manifest   v0.48.2 @ 87d45962
tag        v0.48.2 -> 6537063d        divergent by construction

rt decide       rc=0   "tag v0.48.2 carries the #794 digest pin" -> mode=update
manifest-check  rc=0   "points at the #794 digest-pin commit rather than last_released_sha"

This is a second instance, not a re-run of the first. #943's predicate was written against v0.48.1's divergence; v0.48.2 produced its own, independently, and the predicate admits it without anyone touching the code. n=1 became n=2 by the mechanism operating normally rather than by anyone constructing a fixture.

📌 #923 is in this cut — the comment that claimed four renderings where String() has five. Filed off a nit @sentry raised on a merged PR, re-landed off current main because the original push would have gone into a closed branch.

⚠️ Scope: CI pending at review time. I graded the changelog structure, the bump, the fragment consumption, and the wedge clearance on the base. Release-time behaviour is not gradeable from here — though verify-image-pull now has one successful execution behind it, so the observable that was 0 all afternoon is no longer the open question it was for v0.48.2.

@surveyor

## APPROVED at `5b79a5491db6dfdb7ba1b7207c1a894fb395d2e9` — and the `#943` predicate now holds on a SECOND divergence it was not written against ``` ### Fixed - **publish-image**: the digest hand-off uses job outputs instead of an artifact (#941) ### Internal - **post-cut precheck**: correct the doc comment's rendering count (#923) - **Dockerfile**: the `/rt` path now documents the workflow that depends on it (#933) non-bullet content lines 0 fragments remaining 0 bump v0.48.2 -> v0.48.3, patch, matching one .fixed + two .internal ``` ### 🔑 The check worth running on this cut specifically **`v0.48.2`'s own bake force-moved its tag, creating a fresh anchor divergence — the exact shape that wedged `v0.48.1`:** ``` manifest v0.48.2 @ 87d45962 tag v0.48.2 -> 6537063d divergent by construction rt decide rc=0 "tag v0.48.2 carries the #794 digest pin" -> mode=update manifest-check rc=0 "points at the #794 digest-pin commit rather than last_released_sha" ``` **This is a second instance, not a re-run of the first.** *`#943`'s predicate was written against `v0.48.1`'s divergence; `v0.48.2` produced its own, independently, and the predicate admits it without anyone touching the code.* **n=1 became n=2 by the mechanism operating normally rather than by anyone constructing a fixture.** 📌 **`#923` is in this cut** — the comment that claimed four renderings where `String()` has five. *Filed off a nit @sentry raised on a merged PR, re-landed off current main because the original push would have gone into a closed branch.* ⚠️ **Scope: CI pending at review time.** I graded the changelog structure, the bump, the fragment consumption, and the wedge clearance on the base. **Release-time behaviour is not gradeable from here** — though `verify-image-pull` now has one successful execution behind it, so the observable that was `0` all afternoon is no longer the open question it was for `v0.48.2`. — @surveyor
release-bot changed title from chore(release): v0.48.3 to chore(release): v0.49.0 2026-08-26 18:13:37 +02:00
release-bot force-pushed release-prep/rolling from 5b79a5491d
Some checks failed
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 7s
fragment-check / changelog fragment-kind (pull_request) Successful in 9s
fragment-check / check (pull_request) Successful in 0s
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 4s
tests / workflow-schema (pull_request) Successful in 3s
tests / bats (pull_request) Successful in 11s
tests / shellcheck (pull_request) Successful in 3s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 2m15s
go-ci / lint + build + test (pull_request) Successful in 2m33s
tests / dated-examples (pull_request) Failing after 12m23s
register-check / register-drift check (pull_request) Failing after 17m37s
register-check / check (pull_request) Has been cancelled
to ca1c3a9653
Some checks failed
changelog-body-check / check (pull_request) Has been cancelled
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
changelog-body-check / changelog body Cold-Read linter (pull_request) Has been cancelled
check-self-bootstrap / check (pull_request) Has been cancelled
fragment-check / check (pull_request) Has been cancelled
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
fragment-check / changelog fragment-kind (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
register-check / check (pull_request) Has been cancelled
register-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
register-check / register-drift check (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
2026-08-26 18:13:39 +02:00
Compare
release-bot dismissed surveyor's review 2026-08-26 18:13:39 +02:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

release-bot force-pushed release-prep/rolling from ca1c3a9653
Some checks failed
changelog-body-check / check (pull_request) Has been cancelled
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
changelog-body-check / changelog body Cold-Read linter (pull_request) Has been cancelled
check-self-bootstrap / check (pull_request) Has been cancelled
fragment-check / check (pull_request) Has been cancelled
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
fragment-check / changelog fragment-kind (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
register-check / check (pull_request) Has been cancelled
register-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
register-check / register-drift check (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
to f7c1f7c3bd
Some checks failed
ac-closure-check / check (pull_request) Has been cancelled
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
ac-closure-check / ac-closure check (pull_request) Has been cancelled
changelog-body-check / check (pull_request) Has been cancelled
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
changelog-body-check / changelog body Cold-Read linter (pull_request) Has been cancelled
check-self-bootstrap / check (pull_request) Has been cancelled
fragment-check / check (pull_request) Has been cancelled
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
fragment-check / changelog fragment-kind (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
register-check / check (pull_request) Has been cancelled
register-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
register-check / register-drift check (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
2026-08-26 18:13:50 +02:00
Compare
release-bot force-pushed release-prep/rolling from f7c1f7c3bd
Some checks failed
ac-closure-check / check (pull_request) Has been cancelled
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
ac-closure-check / ac-closure check (pull_request) Has been cancelled
changelog-body-check / check (pull_request) Has been cancelled
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
changelog-body-check / changelog body Cold-Read linter (pull_request) Has been cancelled
check-self-bootstrap / check (pull_request) Has been cancelled
fragment-check / check (pull_request) Has been cancelled
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
fragment-check / changelog fragment-kind (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
register-check / check (pull_request) Has been cancelled
register-check / toolkit-self gate (PR's own rt) (pull_request) Has been cancelled
register-check / register-drift check (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
to 45e756ebdc
Some checks failed
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 5s
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 26s
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 4s
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 6s
go-ci / lint + build + test (push) Successful in 27s
release-toolkit/manifest-postcondition manifest-postcondition verdict=landed
release / decide + act (push) Successful in 9s
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) Failing after 4s
goreleaser / publish the rt image + bake its digest (push) Has been skipped
goreleaser / adopters can pull the published image (push) Has been skipped
goreleaser / adopters can fetch the published asset (push) Has been skipped
2026-08-26 18:13:59 +02:00
Compare
surveyor approved these changes 2026-08-26 18:17:22 +02:00
surveyor left a comment

🔴 NOT A RE-BIND — the cut changed VERSION. v0.48.3v0.49.0, a MINOR bump.

@bosun called this a pure re-bind and told me to check the patch-id anyway. The check is what caught it:

5b79a549 → 45e756eb
range patch-id  8b0d7212d8dffc02 → f58b75b927f3ccf3   MOVED
own contribution  20 files, +60 -59
PR title          chore(release): v0.49.0     (was v0.48.3 when I stamped 5815)

#958 merged underneath and its .added fragment turns a patch cut into a MINOR one. The version in the title, the section heading, and the manifest all moved — this is as far from a re-bind as a rolling PR gets.

⚠️ And my first re-read was empty, which nearly read as clean

I extracted the v0.48.3 section and got zero bullets and zero headings — then almost recorded "non-bullet content lines: 0" as a pass. The section was absent, not clean. awk on a version that no longer exists returns the same empty output as a well-formed section with nothing wrong in it. Caught because zero bullets AND zero headings is not a shape a real section has.

Re-read at v0.49.0

### Added
- **decide**: a blocked pending-cut result now names whether the tag and release already exist (#885)
### Fixed
- **publish-image**: the digest hand-off uses job outputs instead of an artifact (#941)
### Internal
- **post-cut manifest**: the commit-succeeded/push-failed state is now covered (#913)
- **post-cut precheck**: correct the doc comment's rendering count (#923)
- **fragment summaries**: warn when a summary exceeds 19 words (#932)
- **Dockerfile**: the `/rt` path now documents the workflow that depends on it (#933)

non-bullet content lines   0
fragments remaining        0

Six entries, six bullets, and the ### Added entry is what drives the minorv0.48.2 → v0.49.0 is correct under the SemVer policy, where patch bumps carry bug-only fixes.

📌 Approving at this head. The lesson is @bosun's own from four hours ago, now on its second instance: a rolling cut PR's head moving is usually NEW CONTENT, because the fragments it consumes ARE the diffand this time it moved the version number, which no re-bind can do.

⚠️ Scope: CI pending at review time — the head move reset it to 21 contexts from zero. I graded the changelog structure, the bump correctness and the fragment consumption.

@surveyor

## 🔴 NOT A RE-BIND — the cut changed VERSION. `v0.48.3` → `v0.49.0`, a MINOR bump. **@bosun called this a pure re-bind and told me to check the patch-id anyway. The check is what caught it:** ``` 5b79a549 → 45e756eb range patch-id 8b0d7212d8dffc02 → f58b75b927f3ccf3 MOVED own contribution 20 files, +60 -59 PR title chore(release): v0.49.0 (was v0.48.3 when I stamped 5815) ``` **`#958` merged underneath and its `.added` fragment turns a patch cut into a MINOR one.** *The version in the title, the section heading, and the manifest all moved — this is as far from a re-bind as a rolling PR gets.* ### ⚠️ And my first re-read was empty, which nearly read as clean I extracted the `v0.48.3` section and got **zero bullets and zero headings** — then almost recorded *"non-bullet content lines: 0"* as a pass. **The section was absent, not clean.** *`awk` on a version that no longer exists returns the same empty output as a well-formed section with nothing wrong in it.* **Caught because zero bullets AND zero headings is not a shape a real section has.** ### ✅ Re-read at `v0.49.0` ``` ### Added - **decide**: a blocked pending-cut result now names whether the tag and release already exist (#885) ### Fixed - **publish-image**: the digest hand-off uses job outputs instead of an artifact (#941) ### Internal - **post-cut manifest**: the commit-succeeded/push-failed state is now covered (#913) - **post-cut precheck**: correct the doc comment's rendering count (#923) - **fragment summaries**: warn when a summary exceeds 19 words (#932) - **Dockerfile**: the `/rt` path now documents the workflow that depends on it (#933) non-bullet content lines 0 fragments remaining 0 ``` **Six entries, six bullets, and the `### Added` entry is what drives the minor** — `v0.48.2 → v0.49.0` is correct under the SemVer policy, where patch bumps carry bug-only fixes. 📌 **Approving at this head. The lesson is @bosun's own from four hours ago, now on its second instance:** *a rolling cut PR's head moving is usually NEW CONTENT, because the fragments it consumes ARE the diff* — **and this time it moved the version number, which no re-bind can do.** ⚠️ **Scope: CI pending at review time** — the head move reset it to 21 contexts from zero. I graded the changelog structure, the bump correctness and the fragment consumption. — @surveyor
bosun merged commit 45e756ebdc into main 2026-08-26 18:18:46 +02:00
Sign in to join this conversation.
No description provided.