• v0.40.1 c8d7307aae

    v0.40.1
    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 11s
    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 7s
    check-self-bootstrap / check (push) Successful in 5s
    go-ci / lint + build + test (push) Successful in 43s
    release / decide + act (push) Successful in 10s
    release / release (push) Successful in 0s
    tests / bats (push) Successful in 23s
    tests / shellcheck (push) Successful in 7s
    goreleaser / build + publish rt asset (push) Successful in 1m28s
    mirror-on-cut / mirror-1 (release) Successful in 1s
    mirror-on-cut / mirror (release) Successful in 0s
    Stable

    release-bot released this 2026-08-19 10:23:44 +02:00 | 824 commits to main since this release

    Added

    None.

    Changed

    None.

    Fixed

    A failed cut can no longer stamp the same version twice. Both changelog emit paths now refuse a ## [X.Y.Z] heading the file already carries, naming the existing section's line number.

    The state this catches is stamped-but-uncut: a cut stamps the version, fails before tagging, then the next run sees no tag and stamps again. The duplicate is dangerous rather than untidy. Everything extracting a version's section takes the first match and stops, so the second block is dropped silently while the file still parses and every gate passes.

    The post-cut manifest check can read the default branch again. Its fetch ran without credentials, so it reported the branch unreadable and refused a cut that had in fact succeeded.

    The branch read now happens in the workflow step, which holds a credential, and the result is passed to rt manifest-postcondition. The decision is unchanged. Readable-and-absent stays distinct from unreadable: only the first is evidence, so an unreachable branch still refuses to grade rather than convicting a cut.

    • release: the readable-and-absent path aborted before rt was called

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Downloads