• v0.39.0 64b6ebf8e7

    v0.39.0
    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 7s
    check-self-bootstrap / check (push) Successful in 3s
    go-ci / lint + build + test (push) Successful in 21s
    release / decide + act (push) Successful in 8s
    release / release (push) Successful in 0s
    tests / bats (push) Successful in 22s
    tests / shellcheck (push) Successful in 7s
    goreleaser / build + publish rt asset (push) Successful in 1m26s
    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 08:39:33 +02:00 | 844 commits to main since this release

    Added

    None.

    Changed

    • fragment-check: grades changelog density and FAILS on a violation, so a dense fragment is caught on its own PR instead of at cut time (#621)

      The density rules were already enforced, but only against the composed CHANGELOG.md. rt prep recreates that file from the fragments on every compose, so a fix applied there is regenerated away. This grades the same checks, from the same implementation, at the layer where a fix survives. Set density: 'false' to opt out. Pass the five threshold inputs to match your changelog-body-check wiring, or the two layers can disagree.

    Fixed

    • changelog-body-check: check 7 now names every over-threshold sentence, not just the longest one in each paragraph (#621)

      A second long sentence in the same paragraph used to be invisible. A fixer who cleared the named list and pushed then got a fresh FAIL that read as a new problem. Measured at eight over-threshold sentences reported as five. Verdicts are unchanged: the same text fails, and the report is now the complete work list.

    • changelog-body-check: check 3 no longer refuses a dependency pin that outranks the version being cut (#658)

      A pin naming another repository states a fact about a shipped release. Check 3 read every @vX.Y.Z as a forward reference, so a consumer whose dependencies outranked it could not cut at all. Repo identity now comes from GITHUB_REPOSITORY or FORGEJO_REPOSITORY.

      The match is a prefix, so the Actions uses: path form is still caught as a self-reference. A bare pin carrying no owner is still checked, which is the deliberate safe direction. With neither variable set the behaviour is unchanged. The PASS line now names the pins it exempted, and a FAIL names the pin rather than only its version.

    A cut-safeguard refusal now says what it refused about. The decline path emits safeguard_version and prep_sha alongside safeguard_fail.

    The workflow has named all three in its ::error:: since #663 and consumed all three as env vars, but only one was ever emitted. Operators read a prepare commit for v? … Prepare commit graded: unknown while the same log printed both values six lines above.

    • prep: --dry-run now names the working-tree paths it changed, and its help text stops calling itself preview-only (#700)

      The flag skips the branch checkout, commit, push and PR call. It still rewrites the changelog, bumps version_files, runs post_bump_hooks and deletes consumed fragments, so a run read as side-effect-free left a dirty tree. Staged paths are reported separately because git checkout -- . does not restore them. The disclosure is derived from git rather than from a fixed list.

    • ci: the positive control must survive -e when the gate refuses

    • changelog: split the #658 fragment paragraph that fails the density gate

    • prep: the staged-class undo verb deleted uncommitted operator work

    • changelog: the #700 fragment repeated the claim the PR exists to correct

    • prep: give a COMPLETE undo for staged paths, and stop claiming git writes are skipped

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Internal

    • tests: Bats CI now prints captured command output when an assertion fails, while keeping passing-test output hidden (#686)
    Downloads