-
Release v0.21.0
StableSome checks failedcheck-self-bootstrap / check (pull_request) Failing after 3sfragment-check / changelog fragment-kind (pull_request) Successful in 4sfragment-check / check (pull_request) Successful in 0smanifest-check / manifest-vs-tag consistency (pull_request) Successful in 6smanifest-check / check (pull_request) Successful in 0scheck-self-bootstrap / check (push) Failing after 3srelease / decide + act (push) Successful in 7srelease / release (push) Successful in 0sreleased this
2026-07-02 17:23:13 +02:00 | 1221 commits to main since this releaseChangelog tooling + release automation: mechanical Cold-Read body linter, fragment template + brevity docs, auto re-pin of toolkit-self wrappers post-cut, and observability fields for cut-timing.
Added
Cold-Read body linter — new
reusable-changelog-body-check.ymlreusable workflow +scripts/changelog-body-check.sh. Runs 6 mechanical checks on the newest version-block inCHANGELOG.mdat PR time: version header + date, standard sections present, forward-reference detection, body length ceiling (5000 chars), bullet/prose consistency, duplicate section headers. Consumers wire it into theirpull_requestworkflow same shape asfragment-check.yml. Toolkit-self dogfood wiring deferred to #290. Closes #282 Layer 1.Fragment template + brevity docs — new
changelog.d/.template.mdstarter template +docs/conventions.md### Fragment brevitysection. Codifies "outcome + required action in 1-3 sentences" as the human-side density guidance; complements the automated linter. Closes #282 Layer 2.Auto re-pin of toolkit-self consumer wrappers —
reusable-release.ymlnow auto-re-pinsrelease.yml+manifest-check.yml+fragment-check.ymlto the just-cut tag as part of post-cut bookkeeping. Bundled with the bake-reset commit so both land atomically. Obsoletes the manual re-pin PR thatcheck-self-bootstrap.yml(#124) previously fired as a reminder for. External consumers are unaffected — the auto-re-pin targets toolkit-self only;if [[ -f ... ]]guard skips non-existent files. Closes #283.cut_complete.ms_total+path— thecut_completeJSON event now carriesms_total(total cut wall-clock in integer milliseconds) andpath(thealpha/gammapush-path). Off the workflow path (directdraft-release.shinvocation, or platformdatelacking%N) both fields degrade to empty — the same graceful-degradation contract asapi_call'sms. Completes the JSON-logging taxonomy from #159. (Part 2 of #204.)Changed
check-self-bootstrap.ymlscope narrowed — now fires only when the auto re-pin (#283) fails, not as a "human forgot" reminder. Consumers who relied on this check as a manual-re-pin nudge should transition to the auto re-pin flow;check-self-bootstrap.ymlstays as a substrate-failure fail-safe.docs/integration.mdpost-#172 migration note — corrected to reflect empirically-observed Forgejo behavior: undeclared inputs toworkflow_callreusables are silently ignored. The lazy-leave shape (bump@<ref>past #172, forget to droptoolkit_ref:) runs cleanly. Dropping the stale input is a hygiene fix, not a correctness fix. Closes #250.Fixed
Fragment-check baked ref stuck at
mainfor v0.20.0 consumers — v0.20.0 shippedreusable-changelog-fragment-check.ymlwithBUILD_BAKED_TOOLKIT_REF: 'main'becausereusable-release.yml's three runtime bake-reset loops (added in #278) only listed the two pre-existing reusables. Impact for consumers pinning@v0.20.0on the fragment-check wrapper:.release-toolkitscripts checked out atmain(the baked value) rather thanv0.20.0— substrate drift class. Upgrade action: re-pin fragment-check to@v0.21.0(the normal post-cut re-pin) to resolve. Extendedtests/workflows.batsbake-marker guard now walksreusable-release.yml's runtime loops so the class can't reintroduce. (Fold-in from #283 work.)Auto re-pin loops corrupted external consumer wrappers — without a toolkit-self gate, the auto re-pin (new in #283) would rewrite
release.yml/manifest-check.yml/fragment-check.ymlon any external consumer's checkout, breaking their pin state and their next CI run's reusable resolution. Both path-α and path-γ auto re-pin loops are now gated onif [[ -f .forgejo/workflows/reusable-release.yml ]](the toolkit-self detection). Caught pre-merge; no external consumer was affected in the wild.Cold-Read linter dogfood wrapper mis-scoped pre-cut — the toolkit-self dogfood wrapper for the Cold-Read body linter was dropped from #289 because the pre-v0.21.0 window has no consistent pin target (
@mainbreaks single-ref-alignment;@v0.21.0-rc.Ndoesn't yet contain the reusable). Deferred to #290 (post-v0.21.0-cut fold), same pattern as #281.Internal
update-doc-version-refs.shself-git addremoved —release-prep.sh's #236 auto-stage sweeps hook-modified tracked files, so the belt-and-suspenders self-stage from #251 is redundant. Closes #253.Removed / Deprecated
None.
Upgrade
No action required for consumers on
@v0.20.0unless the Fragment-check baked-ref bug (see Fixed) applies — re-pinfragment-check.ymlto@v0.21.0in that case. The Cold-Read body linter and fragment template are opt-in.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)