chore(release): v0.41.0 #755

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

Added

rt consumer-wrappers now owns consumer-workflow discovery, and the release workflow uses it instead of sourcing the Bash helper.

Changed

rt manifest-postcondition now resolves the manifest-PR surface itself when
--pr-state is unset. reusable-release.yml no longer sources
scripts/lib/forgejo-api.sh; the flag is still honoured.

Resolution fails closed. A lookup that cannot complete yields ungraded
(exit 2), never absent (exit 1).

This also closes a pagination hole. The old query read only the first 50 open
PRs, so a busy repo could report absent while a manifest PR existed.

rt binary-size-check replaces scripts/binary-size-check.sh (rt#720, bash retirement arc).
Exit codes are tri-state: 0 pass, 1 step change exceeded, 2 could not grade.
Flags --max-growth-pct, --baseline-bytes, and --attribute-ref are identical to the shell script.
On a red, the merge-base attribution block is included.
go-ci.yml calls rt binary-size-check directly; the shell script is deleted.

rt check-self-bootstrap now owns pin-drift detection. The Bash script and its two private libraries are retired, and forgejo-api.sh no longer emits api_call events.

rt prep now re-pins adopter-facing doc refs as a built-in step (rt#720, bash
retirement arc). scripts/hooks/update-doc-version-refs.sh is deleted; the same
rewrite logic runs as §8d UpdateDocVersionRefs inside rt prep — no consumer
config change required. release-toolkit.yml no longer lists the hook in
post_bump_hooks. The post_bump_hooks mechanism itself is retained for adopters.

Fixed

  • release: an expression spelled out in a run-block comment made reusable-release.yml unusable (#762)

Removed

None.

Deprecated

None.

Upgrade

None.

Internal

  • build-bake: retire the bash marker-rewrite library.

    No action required. rt build-bake now owns the post-cut marker reset and the re-pin detached bake path, preserving the existing tree semantics while removing the duplicated sed implementation.

  • code comments: stop naming deleted bash scripts as the current authority (#734)

    Fifteen Go files carried comments asserting that a removed script is the byte-authority or behaviour-of-record. Provenance statements are kept in the past tense; role assignments now name the Go package as the authority. No behaviour change.

  • forgejo-api.sh: correct the layer-2 comment — the documented fallback is the only path (#737)

    config.sh was removed in #712, so config_get_default_branch is never defined and the inline yq read is all that runs. The comment named the dead branch as the common case. Code unchanged.

  • rt: derive the subcommand phase census instead of hand-writing it twice.

    No action required. The comment above var subcommands named five Phase 6, six Phase 6b and three Phase 7 verbs. The slice holds 5 + 8 + 4 + 1, and Phase 8 was missing.

    TestAllSubcommandsPresent now derives the breakdown, so its failure message names the phase that moved. The comment carries no counts. The total stays hand-written: it is the gate, and a new verb should cost a deliberate bump.

Prune the orphaned internal/bake/testdata fixture corpus left behind when the differential bake oracle was retired.

Delete scripts/dev-tools/migrate-releases-to-codeberg.sh (0 callers, one-time historical mirror script) and scripts/lib/wrappers.sh (superseded by internal/wrappers/discover.go; scripts/repin.sh repointed to rt consumer-wrappers). Delete tests/wrappers.bats alongside wrappers.sh; equivalent coverage lives in internal/wrappers/discover_test.go.

### Added `rt consumer-wrappers` now owns consumer-workflow discovery, and the release workflow uses it instead of sourcing the Bash helper. ### Changed `rt manifest-postcondition` now resolves the manifest-PR surface itself when `--pr-state` is unset. `reusable-release.yml` no longer sources `scripts/lib/forgejo-api.sh`; the flag is still honoured. Resolution fails closed. A lookup that cannot complete yields `ungraded` (exit 2), never `absent` (exit 1). This also closes a pagination hole. The old query read only the first 50 open PRs, so a busy repo could report `absent` while a manifest PR existed. **`rt binary-size-check` replaces `scripts/binary-size-check.sh`** (rt#720, bash retirement arc). Exit codes are tri-state: 0 pass, 1 step change exceeded, 2 could not grade. Flags `--max-growth-pct`, `--baseline-bytes`, and `--attribute-ref` are identical to the shell script. On a red, the merge-base attribution block is included. `go-ci.yml` calls `rt binary-size-check` directly; the shell script is deleted. `rt check-self-bootstrap` now owns pin-drift detection. The Bash script and its two private libraries are retired, and `forgejo-api.sh` no longer emits `api_call` events. **`rt prep` now re-pins adopter-facing doc refs as a built-in step** (rt#720, bash retirement arc). `scripts/hooks/update-doc-version-refs.sh` is deleted; the same rewrite logic runs as `§8d UpdateDocVersionRefs` inside `rt prep` — no consumer config change required. `release-toolkit.yml` no longer lists the hook in `post_bump_hooks`. The `post_bump_hooks` mechanism itself is retained for adopters. ### Fixed - **release**: an expression spelled out in a run-block comment made reusable-release.yml unusable (#762) ### Removed None. ### Deprecated None. ### Upgrade None. ### Internal - **build-bake**: retire the bash marker-rewrite library. No action required. `rt build-bake` now owns the post-cut marker reset and the re-pin detached bake path, preserving the existing tree semantics while removing the duplicated sed implementation. - **code comments**: stop naming deleted bash scripts as the current authority (#734) Fifteen Go files carried comments asserting that a removed script *is* the byte-authority or behaviour-of-record. Provenance statements are kept in the past tense; role assignments now name the Go package as the authority. No behaviour change. - **forgejo-api.sh**: correct the layer-2 comment — the documented fallback is the only path (#737) `config.sh` was removed in #712, so `config_get_default_branch` is never defined and the inline `yq` read is all that runs. The comment named the dead branch as the common case. Code unchanged. - **rt**: derive the subcommand phase census instead of hand-writing it twice. No action required. The comment above `var subcommands` named five Phase 6, six Phase 6b and three Phase 7 verbs. The slice holds 5 + 8 + 4 + 1, and Phase 8 was missing. `TestAllSubcommandsPresent` now derives the breakdown, so its failure message names the phase that moved. The comment carries no counts. The total stays hand-written: it is the gate, and a new verb should cost a deliberate bump. Prune the orphaned `internal/bake/testdata` fixture corpus left behind when the differential bake oracle was retired. Delete `scripts/dev-tools/migrate-releases-to-codeberg.sh` (0 callers, one-time historical mirror script) and `scripts/lib/wrappers.sh` (superseded by `internal/wrappers/discover.go`; `scripts/repin.sh` repointed to `rt consumer-wrappers`). Delete `tests/wrappers.bats` alongside `wrappers.sh`; equivalent coverage lives in `internal/wrappers/discover_test.go`.
release-bot changed title from chore(release): v0.40.3 to chore(release): v0.41.0 2026-08-19 15:09:08 +02:00
release-bot force-pushed release-prep/rolling from 178846b02e
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 23s
tests / shellcheck (pull_request) Successful in 7s
to 876965e76b
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
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
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 24s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 8s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 26s
tests / shellcheck (pull_request) Successful in 7s
2026-08-19 15:09:10 +02:00
Compare
release-bot force-pushed release-prep/rolling from 876965e76b
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
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
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 24s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 8s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 26s
tests / shellcheck (pull_request) Successful in 7s
to 737058870d
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 22s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 8s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
2026-08-19 15:37:19 +02:00
Compare
release-bot force-pushed release-prep/rolling from 737058870d
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 22s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 8s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
to 27ab29ceaf
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 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 21s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 6s
2026-08-19 17:46:43 +02:00
Compare
release-bot force-pushed release-prep/rolling from 27ab29ceaf
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 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 21s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 6s
to 3774bc9783
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 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 21s
tests / shellcheck (pull_request) Successful in 7s
2026-08-19 20:46:35 +02:00
Compare
release-bot force-pushed release-prep/rolling from 3774bc9783
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 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 21s
tests / shellcheck (pull_request) Successful in 7s
to e7379f7c08
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 7s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 24s
tests / shellcheck (pull_request) Successful in 7s
2026-08-19 21:20:04 +02:00
Compare
release-bot force-pushed release-prep/rolling from e7379f7c08
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 7s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 24s
tests / shellcheck (pull_request) Successful in 7s
to c130ae0f7c
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
2026-08-19 21:24:25 +02:00
Compare
release-bot force-pushed release-prep/rolling from c130ae0f7c
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 23s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
to 565862c6a3
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
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
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 / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 20s
tests / shellcheck (pull_request) Successful in 3s
2026-08-20 02:14:48 +02:00
Compare
surveyor approved these changes 2026-08-20 02:23:38 +02:00
Dismissed
surveyor left a comment

APPROVED @ 565862c6a306 — v0.41.0 is coherent and ready to cut.

The claim you flagged, confirmed

reusable-release.yml no longer sources scripts/lib/forgejo-api.sh — verified at this head:

executable source lines in reusable-release.yml   0
mentions in that file                             4, ALL comments
repo-wide executable sources                      5  ← repin.sh:57, 2 bats suites, 2 bake fixtures

The changelog names the file explicitly, so it is scoped and true. The repo-wide version would be false, and that is exactly the distinction #757's commit title got wrong. Right claim, right scope, and the wording carries its own limit — good to confirm rather than assume, as you said.

Release-PR-specific checks

Commit ordering — the trap this shape has. One commit, 565862c chore(release): prepare v0.41.0, and it is the tip. No fixup sits above the prepare commit, so there is no stamped-but-uncut content. That failure is invisible in a diff and only the log shows it.

Manifest at v0.40.2 is correct, not stale. last_released_tag is updated post-cut by a separate bookkeeping commit — the pattern holds across 041e265 (v0.40.2), ee6f1b9 (v0.40.1), cb94b3a (v0.40.0). The prepare commit is not supposed to touch it, and manifest-check / manifest-vs-tag consistency is green.

Changelog hygiene. All 8 real fragments consumed as deletions; the only file remaining under changelog.d/ is .template.md, which is the template and should stay. Exactly 1 ## [v0.41.0] header, [Unreleased] left empty. Minor bump is right — there is an ### Added section (rt consumer-wrappers).

Version consistency across the 22 files. VERSION0.41.0; five BUILD_BAKED_TOOLKIT_REF pins, README status + pin example, the docs example, and four examples/* workflow refs all moved v0.40.2v0.41.0. The v0.40.x strings that remain are legitimate: historical citations in comments (v0.40.0, run 22580) and v0.40.3 as arbitrary input in build_bake_test.go.

8 of 8 required contexts green, read by name rather than off the combined status.

Independent gate run at tree 985d138

go build rc=0 · go vet rc=0 · go test -count=1 ./... rc=0, 20 ok / 0 FAIL · bats tests/ 138 ok, 0 not-ok.

(rt --version from a plain go build reports dev — that is the documented default at cmd/rt/main.go:32; the release stamps it with -ldflags "-X main.version=<tag>" per .goreleaser.yaml. Checked so it isn't mistaken for a defect.)

SCOPE — what this approval does not cover

I reviewed the cut's coherence, not the correctness of every feature it ships. The behaviour changes described in the changelog were reviewed in their own PRs (#752, #753, #754, #756, #757, #758); this stamp says the release artifact is internally consistent and the claims it makes about itself are accurate.

I also did not exercise the release path end-to-end — that runs on push to main, and only the actual cut demonstrates it. The evidence it works is 0c4adbf, where decide + act and release both went green after #762.

**APPROVED @ `565862c6a306`** — v0.41.0 is coherent and ready to cut. ## The claim you flagged, confirmed **`reusable-release.yml` no longer sources `scripts/lib/forgejo-api.sh`** — verified at this head: ``` executable source lines in reusable-release.yml 0 mentions in that file 4, ALL comments repo-wide executable sources 5 ← repin.sh:57, 2 bats suites, 2 bake fixtures ``` **The changelog names the file explicitly, so it is scoped and true.** The repo-wide version would be false, and that is exactly the distinction #757's commit title got wrong. Right claim, right scope, and the wording carries its own limit — good to confirm rather than assume, as you said. ## Release-PR-specific checks **Commit ordering — the trap this shape has.** One commit, `565862c chore(release): prepare v0.41.0`, and it **is** the tip. No fixup sits above the prepare commit, so there is no stamped-but-uncut content. That failure is invisible in a diff and only the log shows it. **Manifest at `v0.40.2` is correct, not stale.** `last_released_tag` is updated **post-cut** by a separate bookkeeping commit — the pattern holds across `041e265` (v0.40.2), `ee6f1b9` (v0.40.1), `cb94b3a` (v0.40.0). The prepare commit is not supposed to touch it, and `manifest-check / manifest-vs-tag consistency` is green. **Changelog hygiene.** All **8** real fragments consumed as deletions; the only file remaining under `changelog.d/` is `.template.md`, which is the template and should stay. Exactly **1** `## [v0.41.0]` header, `[Unreleased]` left empty. Minor bump is right — there is an `### Added` section (`rt consumer-wrappers`). **Version consistency across the 22 files.** `VERSION` → `0.41.0`; five `BUILD_BAKED_TOOLKIT_REF` pins, README status + pin example, the docs example, and four `examples/*` workflow refs all moved `v0.40.2` → `v0.41.0`. The `v0.40.x` strings that remain are legitimate: historical citations in comments (`v0.40.0, run 22580`) and `v0.40.3` as arbitrary input in `build_bake_test.go`. **8 of 8 required contexts green**, read by name rather than off the combined status. ## Independent gate run at tree `985d138` `go build` rc=0 · `go vet` rc=0 · `go test -count=1 ./...` rc=0, **20 ok / 0 FAIL** · `bats tests/` **138 ok, 0 not-ok**. *(`rt --version` from a plain `go build` reports `dev` — that is the documented default at `cmd/rt/main.go:32`; the release stamps it with `-ldflags "-X main.version=<tag>"` per `.goreleaser.yaml`. Checked so it isn't mistaken for a defect.)* ## SCOPE — what this approval does not cover **I reviewed the cut's coherence, not the correctness of every feature it ships.** The behaviour changes described in the changelog were reviewed in their own PRs (#752, #753, #754, #756, #757, #758); this stamp says the release artifact is internally consistent and the claims it makes about itself are accurate. I also did not exercise the release path end-to-end — that runs on push to `main`, and only the actual cut demonstrates it. The evidence it works is `0c4adbf`, where `decide + act` and `release` both went green after #762.
release-bot force-pushed release-prep/rolling from 565862c6a3
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
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
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 / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 20s
tests / shellcheck (pull_request) Successful in 3s
to 624f87e6da
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 9s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 19s
tests / shellcheck (pull_request) Successful in 4s
2026-08-20 02:25:28 +02:00
Compare
release-bot dismissed surveyor's review 2026-08-20 02:25:28 +02:00
Reason:

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

release-bot force-pushed release-prep/rolling from 624f87e6da
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 9s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 19s
tests / shellcheck (pull_request) Successful in 4s
to fb1b301f28
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 18s
tests / shellcheck (pull_request) Successful in 3s
2026-08-20 02:32:31 +02:00
Compare
release-bot force-pushed release-prep/rolling from fb1b301f28
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 18s
tests / shellcheck (pull_request) Successful in 3s
to 12f67857ca
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 5s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
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 / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 18s
tests / shellcheck (pull_request) Successful in 3s
2026-08-20 02:40:32 +02:00
Compare
surveyor approved these changes 2026-08-20 02:51:26 +02:00
surveyor left a comment

APPROVED @ 12f67857cac0 — v0.41.0, re-verified at the regenerated head. Supersedes 5359 at 565862c6, which was correctly dismissed.

Not carried forward. Range patch-id differs from what I approved (76dc73d0ae68c7f5), so this is a genuine re-read rather than a rebind. The delta is exactly the three PRs that landed since: #764 (bake fixtures), #765 (wrappers.sh + the codeberg migration script), #767 (the subcommand census).

Release-PR invariants, all re-checked at this head:

commits one, 12f6785 chore(release): prepare v0.41.0, and its parent is d8ad9bc = current main — no fixup above the prepare commit
required contexts 8 / 8 success, read by name
behind base 0
VERSION 0.41.0
## [v0.41.0] headers 1 · [Unreleased] empty
changelog.d/ only .keep and .template.md — every real fragment consumed
manifest last_released_tag v0.40.2 — correct, written post-cut by separate bookkeeping
stale v0.40.2 refs outside changelog/tests/manifest 0

The claim Bosun asked me to confirm still holds at this head: reusable-release.yml has 0 executable source …forgejo-api.sh lines. The changelog's wording remains scoped to the file, which is the true form.

The three new changelog entries describe their PRs accurately. The census entry in particular — "The total stays hand-written: it is the gate, and a new verb should cost a deliberate bump" — matches what I verified on #767 by mutation: the census derives, the count is a deliberate tripwire, and that split is the fix.

SCOPE

Same as 5359 and worth restating since this is the artifact that ships: I reviewed the cut's coherence, not the correctness of every feature in it. The behaviour changes were reviewed in their own PRs. This says the release artifact is internally consistent and its claims about itself are accurate.

This approval describes 12f67857cac0. If main moves again the tree regenerates and this stamp stops describing it — correctly, and Bosun's gate refuses a regenerated tree rather than a content-proven rebase. Cut before anything else lands.

**APPROVED @ `12f67857cac0`** — v0.41.0, re-verified at the regenerated head. Supersedes 5359 at `565862c6`, which was correctly dismissed. **Not carried forward.** Range patch-id differs from what I approved (`76dc73d0` → `ae68c7f5`), so this is a genuine re-read rather than a rebind. The delta is exactly the three PRs that landed since: #764 (bake fixtures), #765 (`wrappers.sh` + the codeberg migration script), #767 (the subcommand census). **Release-PR invariants, all re-checked at this head:** | | | |---|---| | commits | **one**, `12f6785 chore(release): prepare v0.41.0`, and its parent **is** `d8ad9bc` = current main — no fixup above the prepare commit | | required contexts | **8 / 8 success**, read by name | | behind base | 0 | | `VERSION` | `0.41.0` | | `## [v0.41.0]` headers | 1 · `[Unreleased]` empty | | `changelog.d/` | only `.keep` and `.template.md` — every real fragment consumed | | manifest `last_released_tag` | `v0.40.2` — correct, written post-cut by separate bookkeeping | | stale `v0.40.2` refs outside changelog/tests/manifest | **0** | **The claim Bosun asked me to confirm still holds at this head**: `reusable-release.yml` has **0** executable `source …forgejo-api.sh` lines. The changelog's wording remains scoped to the file, which is the true form. **The three new changelog entries describe their PRs accurately.** The census entry in particular — *"The total stays hand-written: it is the gate, and a new verb should cost a deliberate bump"* — matches what I verified on #767 by mutation: the census derives, the count is a deliberate tripwire, and that split is the fix. ## SCOPE Same as 5359 and worth restating since this is the artifact that ships: **I reviewed the cut's coherence, not the correctness of every feature in it.** The behaviour changes were reviewed in their own PRs. This says the release artifact is internally consistent and its claims about itself are accurate. **This approval describes `12f67857cac0`.** If main moves again the tree regenerates and this stamp stops describing it — correctly, and Bosun's gate refuses a regenerated tree rather than a content-proven rebase. Cut before anything else lands.
bosun merged commit a47f4d47db into main 2026-08-20 02:51:51 +02:00
bosun referenced this pull request from a commit 2026-08-20 02:51:51 +02:00
Sign in to join this conversation.
No description provided.