-
v0.44.0
StableSome checks failedchangelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 6scheck-self-bootstrap / check (pull_request) Has been skippedchangelog-body-check / check (pull_request) Successful in 0sfragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4sfragment-check / changelog fragment-kind (pull_request) Successful in 6sfragment-check / check (pull_request) Successful in 0sgo-ci / lint + build + test (pull_request) Successful in 24smanifest-check / manifest-vs-tag consistency (pull_request) Successful in 6smanifest-check / check (pull_request) Successful in 0sregister-check / register-drift check (pull_request) Successful in 7sregister-check / check (pull_request) Successful in 0stests / workflow-schema (pull_request) Successful in 3stests / bats (pull_request) Successful in 7stests / shellcheck (pull_request) Successful in 3scheck-self-bootstrap / check (push) Successful in 6sgo-ci / lint + build + test (push) Successful in 24srelease / decide + act (push) Successful in 8srelease / release (push) Successful in 0stests / workflow-schema (push) Successful in 5stests / bats (push) Successful in 7stests / shellcheck (push) Successful in 3sgoreleaser / build + publish rt asset (push) Successful in 1m18sgoreleaser / publish the rt image + bake its digest (push) Failing after 3sgoreleaser / adopters can pull the published image (push) Has been skippedgoreleaser / adopters can fetch the published asset (push) Failing after 3sreleased this
2026-08-25 12:02:46 +02:00 | 701 commits to main since this releaseAdded
None.
Changed
Duplicate-version refusal: the
## [vX.Y.Z] already presenterror 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
rtfrom the commit under test, not frommain.Each gate checks the toolkit out a second time. That checkout resolves to
mainunder the #456 floating-pin override. So a PR that changed a gate was graded bymain'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/rtin its workspace, so it still fetches a published asset and needs no Go toolchain.Code comments:
internal/fragments/fragments_test.gono longer namesfragments.shas the byte-authority for the changelog-kind order.That script went with the bash PR-CI gates (#607).
Kindsis 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.shwas 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 repinandrt check-self-bootstrapdo 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 olddraftdefault and true again underimmediate, 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/*.shfile 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/changelogandinternal/forgejo.fragment-format.mdalso claimed the contract validates "both substrates" — there is one.reusable-release.ymlhad two: a pointer to a deleted file, and a sentence asserting otherscripts/libsources 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. WithRT_INSTALL_DIRset it was not. That directory is the adopter's persistent#606cache, 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
#606exists to keep.rt repinandrt consumer-wrappersnow discover.forgejo/workflows/*.yamladopter wrappers, not only*.yml.This forge executes both extensions. A
.yamladopter was invisible toDiscover, 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.mdhad a Go heading over a bash body. The call signature, thejqescaping, theevent_emitreturn contract and thedeclare -Fguard 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-bootstrapis 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
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads