-
Release v0.6.0
Stablereleased this
2026-06-26 09:36:44 +02:00 | 1556 commits to main since this releaseAdded
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
Release v0.5.0
Stablereleased this
2026-06-26 00:47:47 +02:00 | 1561 commits to main since this releaseAdded
- v0.5.0 docs lock-in:
integration.mdrewritten for v0.4.0+ push-triggered + rolling-PR shape with new sections for thesummary:frontmatter convention + branch-protection compatibility; newAGENTS.mdcarry-forward pre-flight checklist for contributors; newdocs/migration/v0.3-to-v0.5.mdmigration guide. Closes #52 slice 5. - Fragment frontmatter (
summary:) bifurcates release-notes vs CHANGELOG.md — short consumer-facing summaries land in the Forgejo release body via.release-toolkit-release-notes.mdsidecar; long-form prose still lands in CHANGELOG.md. Closes #77.
Fixed
_release.ymlcut path now opens a PR for the manifest update instead of direct-pushing tomain, then attempts auto-merge via the Forgejo API. Self-contained — no admin-scope tokens required from consumers. Closes #78.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- v0.5.0 docs lock-in:
-
Release v0.4.0
StableAll checks were successfulmanifest-check / manifest-vs-tag consistency (pull_request) Successful in 4smanifest-check / check (pull_request) Successful in 0srelease / decide + act (push) Recovered via manual manifest push at 595c10f (see #78)release / release (push) Recovered via manual manifest push at 595c10f (see #78)released this
2026-06-25 22:19:43 +02:00 | 1571 commits to main since this releaseAdded
Push-triggered rolling-release-PR mechanic — v0.4.0 replaces the v0.3.x operator-dispatched prep flow with a
push: branches: [main]trigger backed by a committed.release-toolkit-manifest.jsonstate file and a shell-based decision engine (scripts/release-decide.sh). On every push to main, the workflow walksgit log <last_released_sha>..HEADand decides one of three modes:noop(no release-relevant content),update(refresh the rolling release-prep PR with the accumulated bump), orcut(the operator merged the rolling PR — firedraft-release.sh+ commit-and-push the manifest update). The substrate-honest escape from the Forgejo Actions expression-engine bug (#41 / #47) that constrained the v0.3.x flow — no${{ github.event.* }}/${{ forgejo.event.* }}accesses on the load-bearing path.Fixed
scripts/release-prep.sh:DRY_RUN_INPUT/DRY_RUN_ENVenv-var sources now use truthy semantics — the literal string"false"no longer falsely enables dry-run (closes #70).scripts/release-prep.sh+.forgejo/workflows/_release.yml: defensive git identity setup beforegit commit— works on fresh CI runner containers without pre-configured git config; configurable viaRELEASE_TOOLKIT_GIT_NAME/RELEASE_TOOLKIT_GIT_EMAILenv vars; consumer-provided config preserved (closes #73).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release v0.3.5
Stablereleased this
2026-06-25 18:41:24 +02:00 | 1580 commits to main since this releasePatch release closing a latent semver-correctness bug in last-tag detection that the v0.4.0 architectural arc's bootstrap-tag surfaced as a dogfood catch.
Fixed
scripts/manifest-check.sh+scripts/release-prep.sh: last-tag detection now skips pre-release tags viagit describe --exclude '*-*'. Without the fix, a pre-release tag (e.g.v0.4.0-rc.1) closer to HEAD than the last stable release falsely tripped manifest-check's tag-vs-manifest step (manifest 0.3.4 BEHIND tag v0.4.0-rc.1) AND silently shiftedrelease-prep.sh'scc_categorize_commits_sincewalk window to the prerelease, dropping conventional-commits content from the cut's CHANGELOG section. Surfaced as a dogfood catch during the v0.4.0 architectural arc — slice 3's bootstrap-tagv0.4.0-rc.1blocked slice 2's CI (#65). The fix is semver-correctness (pre-releases are not releases), not a dogfood-only workaround: any consumer creating their own-rc/-beta/-alphatag would have hit the identical false-failure. Closes #66.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
Release v0.3.4
Stablereleased this
2026-06-25 01:21:01 +02:00 | 1599 commits to main since this releaseThe auto-fire of
release-drafton prep-PR merge has been retired:
release-draftis now operator-dispatched only viaworkflow_dispatchwith an explicittaginput. This formalizes the empirical reality — the auto-fire mechanic has never worked since #41 was filed (every release cut to date has used the manualscripts/draft-release.shfallback) because Forgejo Actions' expression engine cannot reliably resolvegithub.*/forgejo.*accesses pulling from thepull_requestevent payload on.closedevents. See #41 + #47 for the substrate-evidence (n=3 falsifications during the v0.3.4 sprint's hypothesis-test arc).A release-please-shaped redesign (
push: branches: [main]trigger + state-file manifest + shell git-log walk — zeropull_requestexpression-engine exposure) is planned to reinstate single-button auto-fire in the next architectural arc, tracked as #52.Fixed
.forgejo/workflows/release-draft.yml+docs/integration.mdtemplate: drop thepull_request: types: [closed]auto-fire trigger entirely.release-draftis now operator-dispatched only viaworkflow_dispatchwith an explicittaginput. Consumer integration docs updated to match + explain the substrate constraint inline. Closes #41.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Release v0.3.3
StableSome checks failedmanifest-check / manifest-vs-tag consistency (pull_request) Successful in 4smanifest-check / check (pull_request) Successful in 0sdebug-event-payload / dump github.event JSON (pull_request) Successful in 1srelease-draft / create Forgejo draft release (pull_request) Failing after 4srelease-draft / draft (pull_request) Failing after 0sreleased this
2026-06-24 23:52:17 +02:00 | 1606 commits to main since this releasev0.3.3 patch sprint — closes 2 v0.3.x candidates from the v0.3.2
review cycle: #35 fragment-kind lint (warning-only authoring
discipline that flags suspicious kind-vs-body-content mismatches at
release-prep time) + #41 disposition (A) probe (temporary
diagnostic workflow that logsgithub.eventpayload on
pull_request.closedto root-cause the consumer-side empty-version
issue exposed by the v0.3.1 inline-collapse fix's guard).Both items ship as kind=
internalper the consumer-facing-surface
test refined in v0.3.2: the discriminator is whether RELEASE OUTPUT
changes, not whether any author-side behavior is observable. The
lint emits stderr warnings to AUTHORS; the probe is temporary
scaffolding that will be removed once #41's right-layer fix lands
in v0.3.4. Neither changes the consumer-observable release artifact.Internal
-
scripts/lib/fragments.sh: newlint_fragment_kind+lint_fragmentsfunctions that flag suspicious kind-vs-body-content mismatches per the consumer-facing-surface test (docs/conventions.md). Two heuristics: (A) minor-bumping kind (added/changed/...) + docs-only body → warn "should this be.internal.md?"; (B) patch-bumping kind + new-capability body → warn "should this be.added.md?". Warning-only; never fails the cut. Author opt-out per fragment via<!-- lint-fragment-kind: ok -->body marker. Wired intorelease-prep.shat bump-determination time. Same observability-not-author-discipline family as the #29 install-deps probe + the #16 empty-version::error::guard. See #35. -
.forgejo/workflows/debug-event-payload.yml(consumer-side, temporary): diagnostic workflow firing onpull_request.closedevents that logs the fullgithub.eventJSON + individual field evaluations (head.ref,head.label,merged,startsWith()test). Surfaces the data needed to root-cause #41 — why the consumer-siderelease-draft.ymlline 28 expression evaluates to empty. This workflow will be REMOVED once #41's right-layer fix lands (tracked on the issue). Disposition (A) per Surveyor e455 framing: probe first, don't fix on hypothesis.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
Release v0.3.2
StableSome checks failedreleased this
2026-06-24 22:44:16 +02:00 | 1612 commits to main since this releasev0.3.2 patch sprint — closes the v0.3.x observation queue from the
v0.3.1 review cycle: the #16 chicken-and-egg closure (toolkit's own
consumer-side@v0.2.0→@v0.3.1across all 3 reusable-invoking
workflows), the #29 install-deps observability echo, and the #30/#34
fragment-kind-side discipline restructure folded intodocs/conventions.md.First fully-dogfooded chicken-and-egg-closure cut: this is the
first prep-PR-merge cycle where the autonomousrelease-draft.yml
exercises the v0.3.1 inline-collapse fix (per #16). Substrate-of-record
milestone for the toolkit-on-toolkit feedback loop.Internal
-
.forgejo/workflows/release-draft.yml(consumer-side): bumpuses: ...@v0.2.0+toolkit_ref: v0.2.0→@v0.3.1to pick up the inline-collapse fix shipped in v0.3.1. Closes the #16 chicken-and-egg for the toolkit's own autonomous release-draft path; the next v0.3.x cut's prep-PR merge will exercise the fixed reusable via dogfood. External consumers (cellblock + tmux-tell migrations) pick up the bump at adoption time. -
_release-prep.yml+_release-draft.yml+_manifest-check.yml: addecho "[install-deps] complete"at the end of each install-deps step. Makes the step's run-state visible in future logs (previously the step produced zero output when pre-baked deps were present, making it indistinguishable from a skipped step — the ambiguity that bit the #16 diagnostic). See #29. Observability-not-author-discipline pattern; same family as #35. -
docs/conventions.md: restructure the chore-vs-feat subsection per "state the consumer-facing-surface test once, map onto both surfaces" — the same test applies to commit subjects AND fragment kinds. Folds #30 (adopter-friendly worked-instance, drops internal PR refs) + #34 (fragment-kind side of the discipline) into one restructure. Adds an asymmetry note explaining whenchore:(silent) vs.internal.md(visible in### Internal) is the right home. -
.forgejo/workflows/release.yml+manifest-check.yml(consumer-side): bumpuses: ...@v0.2.0+toolkit_ref: v0.2.0→@v0.3.1to match release-draft.yml (bumped in v0.3.2 via #36). Closes the mixed-version dogfood version-skew Surveyor flagged on #36 review — the toolkit now exercises its OWN v0.3.1 reusables consistently across all 3 consumer-side workflows + picks up the v0.2.1 sudo-fix on the release-prep + manifest-check paths.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
Release v0.3.1
StableSome checks failedreleased this
2026-06-24 21:59:55 +02:00 | 1620 commits to main since this releasev0.3.1 patch sprint — closes 3 v0.3.x candidates surfaced during
the v0.3 cut: a load-bearing workflow fix that unblocks autonomous
release-draft cycles, a bats portability fix that removes 2 hidden
test failures, plus the chore-vs-feat commit-subject guidance that
prevents bump-escalation.Consumer-bump note: the
_release-draft.ymlfix below only takes
effect when consumers bump theirrelease-draft.yml'suses: ...@v0.2.0
→uses: ...@v0.3.1. Toolkit's own consumer wrapper gets bumped in a
post-cut PR; cellblock + tmux-tell migrations pick it up at adoption time.Fixed
-
_release-draft.yml: inline-collapse version-normalization into the script-invocation step. Sidesteps a runtime step-skip that was leaving the script's--versionempty on every release-draft cycle. See #16. -
tests/conventional-commits.bats: rewrite the 4cc_parse_subjecttests to compare against$outputdirectly (with explicit newline boundaries via$'...'syntax) instead of${lines[N]}indexing. Fixes 2 pre-existing failures on bats 5.2.37+ where therunwrapper collapses empty strings out of thelinesarray, silently shifting indices. Test logic + the function under test are unchanged. See #18.
Internal
docs/conventions.md: new subsection "Choosingchore:vsfeat:for internal-infrastructure changes" with the consumer-facing-surface test + the v0.2.1 cut-escalation worked instance. Helps human authors avoid the cut-escalation footgun where achore:-shaped commit lands asfeat:and pulls the next cut into a higher version lane. See #14.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
Release v0.3.0
StableSome checks failedreleased this
2026-06-24 20:52:51 +02:00 | 1626 commits to main since this releasev0.3 sprint — tmux-tell migration enablement (closes
release-toolkit#4).
4 config additions + a migration guide that let pre-1.0 Go projects
(tmux-tell + similar) adopt the toolkit without compromising the
defaults for strict-SemVer projects. Each addition is opt-in;
existing consumers see zero behavior change.This is the first fully-dogfooded MINOR cut — operator dispatched
release.ymlin the Forgejo UI, the toolkit's own reusable
workflows fired autonomously, all 4 config additions exercised in
a single release. Substantive milestone closing the v0.3 arc.Added
-
pre_v1_breaking_to_minorconfig flag (opt-in) lets pre-1.0 projects in settling-shape express "breaking change" semantically (in commits or fragments) without triggering the major-version commitment that 1.0+ implies. Setpre_v1_breaking_to_minor: trueinrelease-toolkit.ymlto downgrademajor→minorbumps while the manifest is 0.x.y. Once the project crosses 1.0.0, the flag silently becomes a no-op — major bumps survive as major. Defaultfalse(strict SemVer); the policy is opt-in via the config flag. Seedocs/conventions.mdfor mechanics +semver_apply_pre_v1_policyfor the implementation. First v0.3 / release-toolkit#4 slice (1 of 5). -
version_files: []accepted as a valid config — opts into tag-is-version mode wheregit describe --tagsis the authoritative version source. The lockstep check inmanifest-check.shstep 2 emitsSKIPrather than failing; step 4 (tag-vs-manifest) treats the git tag as its own manifest (no comparison required).release-prep.shdoes NOT bump any files when configured this way; the new version propagates via the CHANGELOG transition + the tag at release-draft + publish. Distinguishes "field missing" (defaults toVERSIONper v0.1 behavior) from "field explicitly empty" (tag-is-version opt-in). Right shape for Go projects with-ldflagsversion injection (tmux-tell + similar) and projects where the tag IS the source of truth. Seedocs/integration.mdfor the config example. Second v0.3 / release-toolkit#4 slice (2 of 5). -
section_format: { tag_prefix, separator }config lets consumers customize the CHANGELOG.md section heading shape. Defaults match Keep a Changelog's example (## [vX.Y.Z] - YYYY-MM-DD); consumers can override either or both fields independently. Empty string fortag_prefixis a meaningful opt-out that drops the v-prefix (## [X.Y.Z]— matches tmux-tell's existing shape);separator: " — "switches to em-dash. The heading is constructed as## [<tag_prefix><X.Y.Z>]<separator><DATE>.changelog_transitiongains 2 new optional positional params (5th = TAG_PREFIX, 6th = SEPARATOR) with${var-default}(not${var:-default}) semantics so explicit empty string is preserved. Seedocs/integration.mdfor examples + the missing-vs-empty semantic distinction. Third v0.3 / release-toolkit#4 slice (3 of 5). -
post_bump_hooks: [path]config lets consumers register hook scripts that fire AFTERversion_filesare bumped + BEFORE the git commit. Used for per-consumer bookkeeping that doesn't belong in the toolkit's general flow (updating a--versionexample in README to match the cut, regenerating versioned docs, syncing vendored manifests). Each hook is an executable script invoked from the consumer repo root + receivesRELEASE_TOOLKIT_NEW_VERSION+RELEASE_TOOLKIT_NEW_TAG+RELEASE_TOOLKIT_PREVIOUS_TAGenv vars. Zero exit → release-prep continues; non-zero exit aborts the cut with the hook's stderr propagated (no commit, no push, no PR). Multiple hooks run in declaration order; first failure aborts the chain. Hook paths are operator-controlled (no injection risk) and properly arg-quoted (paths with spaces are safe). Seedocs/integration.mdfor the full mechanics + safety surfaces. Fourth v0.3 / release-toolkit#4 slice (4 of 5). -
docs/migration/tmux-tell.mdmigration guide — step-by-step migration walkthrough for projects with tmux-tell's substrate shape (Go projects with noVERSIONfile, build-time version injection via-ldflags, pre-1.0 BREAKING-as-minor discipline, em-dash CHANGELOG headings, per-consumer release-time bookkeeping). Covers: tmux-tell-shaperelease-toolkit.ymlconfig; 4 consumer-side workflow wrappers; the README pin-update hook script with the post_bump_hooks env-var contract; trust-model checkpoint (branch-protect the hook + the config); one-cycle parity check before retiring the old workflow chain. Generalizes to any pre-1.0 Go project with similar shape; cellblock's node-strategy migration doesn't need any of these flags. Fifth + final v0.3 / release-toolkit#4 slice (5 of 5).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
Release v0.2.1
StableSome checks failedreleased this
2026-06-24 19:15:18 +02:00 | 1636 commits to main since this releaseFixed
-
Sudo-aware install-deps step in
_release-prep.yml+_release-draft.yml+_manifest-check.yml. v0.2.0 hard-codedsudo apt-get installfor the yq/jq/curl fallback, which failed opaquely withsudo: command not foundon minimal root-only CI images (a common shape: Debian-derived images that run as root with nosudopackage installed). v0.2.1 replaces the baresudocalls with a 3-shape handler: (1) if EUID=0,apt-getdirectly; (2) else ifsudois on PATH,sudo apt-get; (3) else fail loud with::error::annotations naming the missing tools + actionable remedies ("pre-bake into your runner image, run as root, or install sudo")._release-publish.ymlis unchanged — it has no install-deps step (pure tag-format validation). Closes #10. -
list_fragmentswarns on unrecognized basenames instead of silently skipping. v0.2.0 dropped fragments named<id>.<kind>.<suffix>.md(e.g.,3.fixed-2.md) without any signal — the parser extracts the LAST dot-segment as kind (fixed-2), which isn't a recognized kind, and the file was treated as "not a fragment" and quietly excluded from the cut. This was caught manually during the v0.2.0 release when a file-count probe surfaced a missing fragment. v0.2.1 emitswarning: <path> does not match \..md` (unknown kind in basename) — skippingto stderr so the operator sees the dropped file before the cut consumes the workspace. A smarter parser that accepts...md` shapes is deferred to v0.3 (release-toolkit#9 disposition B). Closes #9.
Internal
- Toolkit's own consumer-shape workflows (
release.yml+release-draft.yml+manifest-check.yml) added in v0.2.0 so the toolkit cuts itself through its own machinery from v0.2.1+ (closes the bootstrap chicken-and-egg). v0.2.1 is the first cut produced via this path: operator dispatchesrelease.yml→ reusable_release-prep.yml@v0.2.0→ release-prep.sh runs → prep PR opens autonomously. No external-consumer surface change; internal substrate-of-record only.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-