• v0.44.0 347028a2e5

    v0.44.0
    Some checks failed
    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 24s
    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 7s
    register-check / check (pull_request) Successful in 0s
    tests / workflow-schema (pull_request) Successful in 3s
    tests / bats (pull_request) Successful in 7s
    tests / shellcheck (pull_request) Successful in 3s
    check-self-bootstrap / check (push) Successful in 6s
    go-ci / lint + build + test (push) Successful in 24s
    release / decide + act (push) Successful in 8s
    release / release (push) Successful in 0s
    tests / workflow-schema (push) Successful in 5s
    tests / bats (push) Successful in 7s
    tests / shellcheck (push) Successful in 3s
    goreleaser / build + publish rt asset (push) Successful in 1m18s
    goreleaser / publish the rt image + bake its digest (push) Failing after 3s
    goreleaser / adopters can pull the published image (push) Has been skipped
    goreleaser / adopters can fetch the published asset (push) Failing after 3s
    Stable

    release-bot released this 2026-08-25 12:02:46 +02:00 | 701 commits to main since this release

    Added

    None.

    Changed

    Duplicate-version refusal: the ## [vX.Y.Z] already present error now names what it did NOT check.

    It detects a duplicate heading and nothing more. The tag may exist. The release may have published. The section's body may be incomplete. None of that is verified.

    Its "did not tag it" clause names a likely cause, not a measured one — a hand-edited CHANGELOG reaches the same state.

    Applied at both emit sites together (#833, #659).

    Fixed

    Release prep: a second prep run for a version already in the changelog now merges into that section instead of refusing the cut.

    The transition transforms ## [Unreleased] into a version heading. It never scanned for an existing one, so a second run emitted a duplicate.

    Refusing would strand real content. The second run's Unreleased holds everything accrued since the first. Merging keeps both sets, and None. placeholders drop out.

    The existing heading keeps its date, so a tagged section is never restamped (release-toolkit#665).

    Fixed: the four PR-CI gates now build rt from the commit under test, not from main.

    Each gate checks the toolkit out a second time. That checkout resolves to main under the #456 floating-pin override. So a PR that changed a gate was graded by main's copy of it — the gate under test was never the gate that ran.

    The build arm now sources from the consumer checkout when it carries cmd/rt. That is the PR itself when the toolkit runs its own CI.

    The adopter path is unchanged. An adopter has no cmd/rt in its workspace, so it still fetches a published asset and needs no Go toolchain.

    Code comments: internal/fragments/fragments_test.go no longer names fragments.sh as the byte-authority for the changelog-kind order.

    That script went with the bash PR-CI gates (#607). Kinds is the authority now; the port's origin stays in the past tense.

    Found by re-deriving #734's scope during its AC sweep. It fixed five scripts. fragments.sh was not among them — the floor its own AC warned about.

    register-check now covers the complete built-in chamber vocabulary.

    Docs: thirteen sites named a retired script as the present-tense actor for behaviour that still happens. rt repin and rt check-self-bootstrap do the work now, including the glossary's definition of "re-pin" and two table cells citing line numbers inside a file that no longer exists.

    The behaviour was never wrong; only the actor was. That is why a tense sweep misses them — a reader asking "is this still true?" gets yes.

    Corrected five code comments that justified best-effort error handling by claiming the cut had already published.

    The code they annotate never reads publish_mode. The claim was false under the old draft default and true again under immediate, while the reasoning it supports never depended on either. The justification is now that the release object exists, which holds under both.

    Contracts + workflow comments: four contract documents named a deleted scripts/lib/*.sh file as their byte-authority. The Go packages are the authority; the bash origin stays in the past tense.

    C4, C6 and C7 now point at internal/fragments, internal/changelog and internal/forgejo. fragment-format.md also claimed the contract validates "both substrates" — there is one.

    reusable-release.yml had two: a pointer to a deleted file, and a sentence asserting other scripts/lib sources still exist. None do.

    fetch-rt.sh's HTML guard now removes the page it rejected before exiting.

    Previously the page stayed on disk. That was harmless on the default path, where the work dir is a throwaway mktemp -d. With RT_INSTALL_DIR set it was not. That directory is the adopter's persistent #606 cache, so the rejected page sat there under the release asset's own name.

    The artefact is removed, never the directory. A blanket cleanup would delete the cache #606 exists to keep.

    rt repin and rt consumer-wrappers now discover .forgejo/workflows/*.yaml adopter wrappers, not only *.yml.

    This forge executes both extensions. A .yaml adopter was invisible to Discover, so the re-pin rewrite silently did nothing rather than failing.

    The .yml-only filter was inherited from the bash oracle (scripts/lib/wrappers.sh) and faithfully ported at #705. The port was correct; the oracle was wrong.

    Docs: docs/events-logging.md had a Go heading over a bash body. The call signature, the jq escaping, the event_emit return contract and the declare -F guard all described the retired shell layer.

    The deeper defect was the opening sentence. It said the toolkit emits events during the cut path. It does not: rt check-self-bootstrap is the only command that emits anything, and the taxonomy table listed seven kinds as "currently emitted" when one is.

    That retirement was deliberate and reasoned, recorded in internal/decide. The guide now says so instead of describing behaviour a reader will not observe.

    Updated live Forgejo integration and architecture documentation after the shell client retirement; historical provenance remains, and deleted-file line coordinates are no longer presented as current anchors.

    • register: genericize newly matched reviewer credits

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Internal

    Added positive and negative Go tests for register-check allow-list glob semantics, including wildcard and recursive directory behavior.

    Removed the 55 changelog and config fixtures left orphaned when their equivalence suites were retired.

    Strengthened the workflow bake-list regression guard to count each reusable on both runtime staging loops, preventing prose occurrences from masking a missing loop entry.

    Downloads