• v0.30.0 071e318888

    Release v0.30.0
    All checks were successful
    changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 4s
    check-self-bootstrap / check (pull_request) Has been skipped
    changelog-body-check / check (pull_request) Successful in 0s
    fragment-check / changelog fragment-kind (pull_request) Successful in 3s
    fragment-check / check (pull_request) Successful in 0s
    manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
    manifest-check / check (pull_request) Successful in 0s
    register-check / register-drift check (pull_request) Successful in 4s
    register-check / check (pull_request) Successful in 0s
    tests / bats (pull_request) Successful in 1m55s
    tests / shellcheck (pull_request) Successful in 7s
    check-self-bootstrap / check (push) Successful in 3s
    release / decide + act (push) Successful in 6s
    release / release (push) Successful in 0s
    tests / bats (push) Successful in 1m55s
    tests / shellcheck (push) Successful in 8s
    mirror-on-cut / mirror-1 (release) Successful in 1s
    mirror-on-cut / mirror (release) Successful in 0s
    Stable

    release-bot released this 2026-07-07 12:59:26 +02:00 | 1069 commits to main since this release

    Added

    Cut-time preflight verifies the composed CHANGELOG section is gate-clean before the release fires. A new scripts/compose-verify.sh runs at the top of the cut case in reusable-release.yml. It scans the target section with register-check --stdin and changelog-body-check.

    The preflight blocks the cut when either gate flags drift or density. Closes the gap surfaced by PR#438 (v0.28.0), where a manifest-only recovery skipped the auto push:main trigger and workflow_dispatch fired the cut against a CHANGELOG that never went through compose. No action required for adopters — the preflight is wired into the reusable workflow. Closes #439.

    Changed

    None.

    Fixed

    check-self-bootstrap no longer fires red on the rolling-PR-merge push:main event. The auto-re-pin substrate (#283) runs INSIDE the cut workflow that fires on that same push, so the pin-drift check saw pre-cut state and reported a false-positive RED. The check now detects a HEAD subject matching the release-prep merge shape and skips with an informative message.

    Discipline preserved for every OTHER push:main. A hand-edit to release.yml, an orphaned tag, or any content edit outside the rolling-PR flow still fires the check. Closes the "check-self-bootstrap RED on every substrate cut" class (empirical: PR#438 v0.28.0 arc + PR#443/#446 Bundle 1/2 sprint). No action required. Closes #445.

    release-prep.sh now scaffolds all 6 standard CHANGELOG sections in the composed body. When fragments produce only a subset (e.g., only Added + Fixed), the missing sections are filled with None. before the section transitions into CHANGELOG.md. Aligns compose to the documented changelog-body-check check-2 intent ("add each even if the body is 'None.'").

    Closes the compose-vs-check-2 divergence surfaced by the v0.30.0 rolling PR, which would otherwise block at cut-time via the compose-verify preflight. Idempotent: existing sections pass through verbatim; running twice produces identical output. Non-standard sections (e.g., a fragment producing ### Internal) are preserved after the standard set. No action required. Closes #453.

    • register-check: pivot to allowlist entry ([reviewer] 3682 catch)
    • tests: scrub chamber-names from compose-verify.bats fixture ([reviewer] 3680 Finding B)
    • compose-verify: fold review 3676 non-blockers (version-newest coupling + dry-run parity) [#446]

    Removed

    None.

    Deprecated

    None.

    Upgrade

    None.

    Downloads