• v0.3.0 ff328f697b

    Release v0.3.0
    Some checks failed
    manifest-check / manifest-vs-tag consistency (pull_request) Successful in 4s
    manifest-check / check (pull_request) Successful in 0s
    release-draft / create Forgejo draft release (pull_request) Failing after 4s
    release-draft / draft (pull_request) Failing after 0s
    Stable

    quartermaster released this 2026-06-24 20:52:51 +02:00 | 1478 commits to main since this release

    v0.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.yml in 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_minor config 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. Set pre_v1_breaking_to_minor: true in release-toolkit.yml to downgrade majorminor bumps 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. Default false (strict SemVer); the policy is opt-in via the config flag. See docs/conventions.md for mechanics + semver_apply_pre_v1_policy for 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 where git describe --tags is the authoritative version source. The lockstep check in manifest-check.sh step 2 emits SKIP rather than failing; step 4 (tag-vs-manifest) treats the git tag as its own manifest (no comparison required). release-prep.sh does 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 to VERSION per v0.1 behavior) from "field explicitly empty" (tag-is-version opt-in). Right shape for Go projects with -ldflags version injection (tmux-tell + similar) and projects where the tag IS the source of truth. See docs/integration.md for 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 for tag_prefix is 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_transition gains 2 new optional positional params (5th = TAG_PREFIX, 6th = SEPARATOR) with ${var-default} (not ${var:-default}) semantics so explicit empty string is preserved. See docs/integration.md for 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 AFTER version_files are bumped + BEFORE the git commit. Used for per-consumer bookkeeping that doesn't belong in the toolkit's general flow (updating a --version example in README to match the cut, regenerating versioned docs, syncing vendored manifests). Each hook is an executable script invoked from the consumer repo root + receives RELEASE_TOOLKIT_NEW_VERSION + RELEASE_TOOLKIT_NEW_TAG + RELEASE_TOOLKIT_PREVIOUS_TAG env 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). See docs/integration.md for the full mechanics + safety surfaces. Fourth v0.3 / release-toolkit#4 slice (4 of 5).

    • docs/migration/tmux-tell.md migration guide — step-by-step migration walkthrough for projects with tmux-tell's substrate shape (Go projects with no VERSION file, 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-shape release-toolkit.yml config; 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