• v0.36.0 f2c85841c5

    v0.36.0
    Some checks failed
    changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 4s
    changelog-body-check / check (pull_request) Successful in 0s
    check-self-bootstrap / check (pull_request) Has been skipped
    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 35s
    manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
    manifest-check / check (pull_request) Successful in 0s
    register-check / register-drift check (pull_request) Successful in 6s
    register-check / check (pull_request) Successful in 0s
    tests / bats (pull_request) Successful in 2m19s
    tests / shellcheck (pull_request) Successful in 9s
    check-self-bootstrap / check (push) Successful in 3s
    go-ci / lint + build + test (push) Successful in 36s
    release / decide + act (push) Failing after 8s
    release / release (push) Failing after 0s
    tests / bats (push) Successful in 2m19s
    tests / shellcheck (push) Successful in 9s
    goreleaser / build + publish rt asset (push) Successful in 1m56s
    mirror-on-cut / mirror-1 (release) Successful in 1s
    mirror-on-cut / mirror (release) Successful in 0s
    Stable

    release-bot released this 2026-08-17 14:43:59 +02:00 | 899 commits to main since this release

    Added

    • composite action: caches the rt binary, cutting warm installs from ~10s to under a second (#606)

      The checksum verify still runs on cache hits — a restored binary is re-verified against the release manifest before anything executes it. No action needed: adopters already on uses: frankenbit/release-toolkit@vX.Y.Z get this on their next run.

    Changed

    • fragment-check gate: now runs rt fragment-check instead of the bash script (#607)

      The workflow's inputs are unchanged — valid_kinds and fragment_length_warn_chars reach rt through the same env vars the script read, verified by differential run. Adopters pinned to a release tag get a cached rt (~48ms warm, #606); no action needed.

    Fixed

    • fetch-rt: the "not listed in checksums.txt" error can now actually print (#606)

      The branch was unreachable under set -euo pipefail, so a release published with incomplete assets failed with a bare non-zero exit and no diagnostic. Anyone who hit that case saw no reason for it.

    • config: config_render_tag now fails when the tag format cannot be resolved (#625)

      With no release-toolkit.yml it returned success and an empty string. Callers' || printf 'v%s' fallbacks therefore never fired, and rt decide emitted an empty next_tag. The bash path now matches the Go path, which already fell back to v.

    • changelog-body-check: density checks now read lists, quotes and tables (#632)

      Checks 7 and 9 scanned plain paragraphs only, so the same over-long sentence failed as a paragraph and passed as a bullet. Markers are now stripped and the remainder scanned. A blockquote over the ceiling names itself in the failure, and the message names the variable that raises the ceiling.

    • release: post-cut manifest bookkeeping is written again, and verified on the branch (#637)

      The idempotency pre-check read the workspace copy, which rt release now writes itself. It saw its own run's work, assumed a prior run had landed the commit, and skipped the push. It now reads the remote branch tip, and a post-condition refuses when the commit did not land.

    • changelog-body-check: honour CHANGELOG_BODY_CHECK_{SENTENCE_MAX,SENTENCE_WARN,PAREN_DEPTH_MAX,PARAGRAPH_MAX,PARAGRAPH_WARN} env vars in the Go port — previously hardcoded, making the failure message's advice to set these vars incorrect (#652). Invalid (non-integer) values now exit 2 rather than silently falling back to the default.

    • release: the cut safeguard grades the prepare commit, and a decline now fails the run (#663)

      Layers 2 and 3 were keyed on HEAD_SHA, which asks whether the last merge came from the rolling branch, not whether the prepare commit did. Those diverge on the buried-prepare path, so a follow-up commit on top declined a valid cut. The gate now keys on the prepare commit's own sha. A decline is now an ::error:: and a non-zero exit, not a bare echo in a step that exits 0.

    • release: the Go decide port's prepare-sha resolution is now pinned by tests (#663)

      The #663 fix landed in both implementations, but only the Bash half had arms. Reverting the Go keying, or neutering the resolver, left internal/decide and cmd/rt fully green. The byte-oracle cannot cover it either: it runs --dry-run, where Layer 2/3 are SKIP. Adds a merge-commit fixture with a live Layer-2 lookup, a stray-prepare pin, and a direct resolver test over all three shapes.

    • changelog: split 37-word density failure in 652 fragment

    • release-decide: resolve the prepare's OWNING MERGE, and make the seam as strict as production

    • register-check: the allow-list wildcard bullet was WRONG, not just loose

    • fragment-check: drop || true — the runnability check could not fail

    • changelog-body-check: #632 blockquotes REFUSE with a named override

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Downloads