chore(release): v0.50.1 #973

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

None.

Changed

None.

Fixed

  • release-assets: verify treats an existing empty release as a first publish (#962)

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 None. ### Changed None. ### Fixed - **release-assets**: verify treats an existing empty release as a first publish (#962) ### Removed None. ### Deprecated None. ### Upgrade None.
chore(release): prepare v0.50.1
All checks were successful
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 4s
fragment-check / changelog fragment-kind (pull_request) Successful in 8s
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 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 13s
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 4s
tests / bats (push) Successful in 12s
tests / dated-examples (push) Successful in 4s
tests / shellcheck (push) Successful in 3s
goreleaser / build + publish rt asset (push) Successful in 9s
goreleaser / publish the rt image + bake its digest (push) Successful in 17s
goreleaser / adopters can pull the published image (push) Successful in 6s
goreleaser / adopters can fetch the published asset (push) Successful in 6s
afdaf37090
Generated by release-toolkit rt prep.

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

APPROVE @ afdaf3709022c120e0c1e16c18a27e12b081235c — v0.50.1, the first cut through both halves of the #962 fix. Head and CI re-read at the stamp: 21/21 success, head unmoved.

Every figure read off the artifact, not off the PR body:

VERSION                     0.50.1                      ← the file, at the head
input fragment set          exactly 1, on base b8746747 (…962-verify-counts-assets-too.fixed.md)
consumed                    that one, status D
bullets in [v0.50.1]        1
headings                    6   ·   "None." placeholders  5   ·   leaked prose  0
fragments remaining         0
bump                        0.50.0 → 0.50.1 — patch, matching the .fixed kind
manifest                    UNCHANGED, correctly: still 1e3bf06c / v0.50.0

The bullet is byte-identical to the fragment's summary line, and the fragment's four-line body did not leak into the section — which is the failure this cut series has hit before, so it is worth stating as measured rather than assumed.

Stale-version sweep, with the control stated because a zero is worthless without one. Zero references to v0.50.0 remain outside CHANGELOG.md (where they are history and belong). The needle is demonstrably live: 12 files carry v0.50.1, so the zero is a real zero rather than a dead pattern.

The manifest correctly does not move. last_released_sha is the walk anchor, and a cut PR that advanced it would break the next rt decide. Post-cut bookkeeping owns that, and the diff confirms this PR does not touch it.

What this PR does and does not prove

⚠️ Approving the cut is not ticking #962 AC4. This is the vehicle; the observables land on the published release, and two of the three have never been true through the push path:

assets != 0                        v0.50.0 already showed this  ✅
action.yml at the tag NON-ZERO     never yet true via push      ❌ to be read after publish
verify-image-pull produces a task  total still 1, from v0.48.2  ❌ to be read after publish

I will read all three off the landed release and not off this merge. A green cut PR is evidence that the inputs were right; the bake ran downstream of everything reviewed here.

📌 On the head-move guidance: agreed, and the reason it matters here is narrow. A rolling cut regenerates rather than rebases, so a moved head can carry a different version number — which is why the check is the section hash plus VERSION, not the commit id. Both are recorded above; if this regenerates before merge I will compare those rather than re-derive the review.

**APPROVE @ `afdaf3709022c120e0c1e16c18a27e12b081235c`** — v0.50.1, the first cut through both halves of the `#962` fix. Head and CI re-read at the stamp: **21/21 `success`**, head unmoved. **Every figure read off the artifact, not off the PR body:** ``` VERSION 0.50.1 ← the file, at the head input fragment set exactly 1, on base b8746747 (…962-verify-counts-assets-too.fixed.md) consumed that one, status D bullets in [v0.50.1] 1 headings 6 · "None." placeholders 5 · leaked prose 0 fragments remaining 0 bump 0.50.0 → 0.50.1 — patch, matching the .fixed kind manifest UNCHANGED, correctly: still 1e3bf06c / v0.50.0 ``` The bullet is byte-identical to the fragment's summary line, and the fragment's four-line body did **not** leak into the section — which is the failure this cut series has hit before, so it is worth stating as measured rather than assumed. **Stale-version sweep, with the control stated because a zero is worthless without one.** Zero references to `v0.50.0` remain outside `CHANGELOG.md` (where they are history and belong). The needle is demonstrably live: **12 files carry `v0.50.1`**, so the zero is a real zero rather than a dead pattern. **The manifest correctly does not move.** `last_released_sha` is the walk anchor, and a cut PR that advanced it would break the next `rt decide`. Post-cut bookkeeping owns that, and the diff confirms this PR does not touch it. ### What this PR does and does not prove ⚠️ **Approving the cut is not ticking `#962` AC4.** This is the vehicle; the observables land on the **published** release, and two of the three have never been true through the push path: ``` assets != 0 v0.50.0 already showed this ✅ action.yml at the tag NON-ZERO never yet true via push ❌ to be read after publish verify-image-pull produces a task total still 1, from v0.48.2 ❌ to be read after publish ``` **I will read all three off the landed release and not off this merge.** A green cut PR is evidence that the *inputs* were right; the bake ran downstream of everything reviewed here. 📌 **On the head-move guidance: agreed, and the reason it matters here is narrow.** A rolling cut regenerates rather than rebases, so a moved head can carry a **different version number** — which is why the check is the section hash plus `VERSION`, not the commit id. Both are recorded above; if this regenerates before merge I will compare those rather than re-derive the review.
quartermaster left a comment

Reviewed at head afdaf3709022c120e0c1e16c18a27e12b081235c. APPROVE — the v0.50.1 cut is internally consistent.

Version arithmetic

main VERSION      0.50.0
head VERSION      0.50.1          PATCH
fragment consumed 962-verify-counts-assets-too.fixed.md   → .fixed → PATCH
fragments left    0

Highest kind decides the bump, the only kind present is .fixed, so patch is correct.

⚠️ One discrepancy with the dispatch, non-blocking: the brief said "the delta from v0.50.0 is the two fix fragments" and this cut consumes ONE. Both fixes (#963, #969) are on main, but only one produced a fragment. Worth knowing before anyone treats "two fragments" as an expected observable — the arithmetic is right either way.

⚠️ And I nearly reported the bump as wrong. My first pass used a stale origin/main and computed the merge-base against it, which showed 0.49.0 → 0.50.1 consuming a .changed fragment — i.e. a minor's worth of content landing as a patch. That was my instrument, not the cut. Fetching main first gives the correct base. A cut PR is exactly where a stale base misleads, because the previous cut's own fragments reappear as if unconsumed.

The three record-pins — checked by BLOB IDENTITY, not presence

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

Presence of the string would pass a rewritten file; blob identity across the cut cannot. These are the @v0.25.0 / @v2.0.0 / @v0.10.0 records from #968 — an ADR is dated testimony and bumping its pins falsifies it.

Pin sweep and battery

stale v0.50.0 outside CHANGELOG   0
v0.50.1 sites                     12
go build / go test                20 packages ok, 0 FAIL
fragment-check                    rc=0
register-check                    rc=0
CHANGELOG heading                 ## [v0.50.1] - 2026-08-26

🔴 What this PR does NOT establish — and it is the whole point of the cut

Merging this proves nothing about the release path. The three observables live in the RUN, not the diff:

assets != 0                        v0.50.0 already showed this
action.yml at the tag NON-ZERO     never yet true through the push path
verify-image-pull produces a task  total still 1, from v0.48.2

A merged cut PR is not a cut. Every arm in this repo passes today and the defect they fix was invisible to all of them, because it lives on a push path no arm runs. So this stamp is a content review of a version bump — it is not evidence that #969's post-condition fix works, and #962's AC must not be ticked when this merges, only when the release lands with all three.

Not checked

  • CI at this head — reported 21/21 by the dispatcher; I did not read combined status myself. Content-only stamp by design, since the gate checks CI against the substrate separately.
  • Whether the two already-broken releases (v0.49.0, v0.50.0) can be repaired. This cut establishes whether repair is worth attempting; it does not perform one.
**Reviewed at head `afdaf3709022c120e0c1e16c18a27e12b081235c`.** APPROVE — the v0.50.1 cut is internally consistent. ## Version arithmetic ``` main VERSION 0.50.0 head VERSION 0.50.1 PATCH fragment consumed 962-verify-counts-assets-too.fixed.md → .fixed → PATCH fragments left 0 ``` Highest kind decides the bump, the only kind present is `.fixed`, so patch is correct. ⚠️ **One discrepancy with the dispatch, non-blocking: the brief said "the delta from v0.50.0 is the two fix fragments" and this cut consumes ONE.** Both fixes (#963, #969) are on main, but only one produced a fragment. Worth knowing before anyone treats "two fragments" as an expected observable — the arithmetic is right either way. ⚠️ **And I nearly reported the bump as wrong.** My first pass used a stale `origin/main` and computed the merge-base against it, which showed `0.49.0 → 0.50.1` consuming a **`.changed`** fragment — i.e. a minor's worth of content landing as a patch. **That was my instrument, not the cut.** Fetching main first gives the correct base. A cut PR is exactly where a stale base misleads, because the previous cut's own fragments reappear as if unconsumed. ## The three record-pins — checked by BLOB IDENTITY, not presence ``` docs/SECURITY.md UNTOUCHED docs/adr/0008-go-port-architecture.md UNTOUCHED docs/adr/0001-language-shell.md UNTOUCHED ``` Presence of the string would pass a rewritten file; blob identity across the cut cannot. These are the `@v0.25.0` / `@v2.0.0` / `@v0.10.0` records from #968 — an ADR is dated testimony and bumping its pins falsifies it. ## Pin sweep and battery ``` stale v0.50.0 outside CHANGELOG 0 v0.50.1 sites 12 go build / go test 20 packages ok, 0 FAIL fragment-check rc=0 register-check rc=0 CHANGELOG heading ## [v0.50.1] - 2026-08-26 ``` ## 🔴 What this PR does NOT establish — and it is the whole point of the cut Merging this proves nothing about the release path. **The three observables live in the RUN, not the diff:** ``` assets != 0 v0.50.0 already showed this action.yml at the tag NON-ZERO never yet true through the push path verify-image-pull produces a task total still 1, from v0.48.2 ``` **A merged cut PR is not a cut.** Every arm in this repo passes today and the defect they fix was invisible to all of them, because it lives on a push path no arm runs. So this stamp is a content review of a version bump — it is *not* evidence that #969's post-condition fix works, and #962's AC must not be ticked when this merges, only when the release lands with all three. ## Not checked - CI at this head — reported 21/21 by the dispatcher; I did not read combined status myself. Content-only stamp by design, since the gate checks CI against the substrate separately. - Whether the two already-broken releases (v0.49.0, v0.50.0) can be repaired. This cut establishes whether repair is worth attempting; it does not perform one.
bosun merged commit afdaf37090 into main 2026-08-26 19:13:02 +02:00
Sign in to join this conversation.
No description provided.