chore(release): v0.33.0 #484

Merged
alex merged 1 commit from release-prep/rolling into main 2026-07-24 01:28:45 +02:00
Member

Added

  • build-c4 workflow: LikeC4 static-site build for docs/architecture/c4/**/*.likec4, deployed to arch.saratow.net LAN-only (alcatraz-infra#128 substrate). Consumes tmux-tell#617 forgejo-runner /output bind-mount; served RO via ingress nginx. Refs release-toolkit#367.

  • fragment style guide + length-warn CI signal — new docs/fragment-style.md codifies the skim-scan shape a good changelog fragment takes (six rules + before/after examples grounded on the ember v0.3.0/v0.5.0/v0.6.0 recoveries); reusable-changelog-fragment-check.yml gains a fragment_length_warn_chars input (default 500) that emits a non-blocking ::warning:: for fragments exceeding the threshold and points contributors at the guide (#488)

Changed

None.

Fixed

  • PREP_SUBJECT_RE now accepts the Forgejo squash-merge subject suffix (#NN). A prep-PR squash-merged on Forgejo produces the commit subject chore(release): vX.Y.Z (#NN) (PR-number appended to the title); the $ anchor previously rejected it, silently skip-gating the cut. #331 made prepare optional for squash-merge but missed the suffix half — measured on ember v0.1.0 (chore(release): v0.1.0 (#37)). The trailing group is added at the end, so BASH_REMATCH[2] version extraction is unaffected. Closes #487.

  • Let the changelog fragment PR gate accept a consumer-provided valid-kind list so it can match the repository's release-time assembler instead of hardcoding release-toolkit's own internal convention (#489).

  • release-prep no longer emits conventional-commit summary bullets that duplicate an authored changelog fragment. cc_categorize_commits_since now takes an optional fragments-directory argument and suppresses the CC subject bullet of any commit that itself added a fragment in the same range (git log --diff-filter=A), keyed on git commit identity rather than on a shared #NNN prose reference. This catches the ref-absent and ref-mismatched duplicates that changelog_dedup_cc_by_fragment_refs (which keys on the fragment filename id) structurally cannot, and it cannot silently drop genuinely-new content: a change with no fragment sits on a commit the suppression set never contains. The ref-based dedup is retained for the complementary separate-commit-same-ref case. Refs release-toolkit#493 (Bug 2).

  • release-prep no longer drops the ### Upgrade section or concatenates a stray None. placeholder onto real content when composing a release over pre-existing ## [Unreleased] content. changelog_merge_sections now sources its section order from the single-source-of-truth CHANGELOG_STANDARD_SECTIONS (so no hand-maintained order list can drift and drop a section) and treats the scaffold None. as a soft-empty sentinel that yields to real content but persists when a kind is empty in every input. Refs release-toolkit#493 (Bug 1).

  • fragment-style: scrub '[reviewer]' invented-jargon per register-check gate

  • fragment-style: scrub 3 chamber-name attributions per register-check gate

Removed

None.

Deprecated

None.

Upgrade

None.

### Added - `build-c4` workflow: LikeC4 static-site build for `docs/architecture/c4/**/*.likec4`, deployed to `arch.saratow.net` LAN-only (alcatraz-infra#128 substrate). Consumes tmux-tell#617 forgejo-runner `/output` bind-mount; served RO via ingress nginx. Refs release-toolkit#367. - **fragment style guide + length-warn CI signal** — new [`docs/fragment-style.md`](docs/fragment-style.md) codifies the skim-scan shape a good changelog fragment takes (six rules + before/after examples grounded on the ember v0.3.0/v0.5.0/v0.6.0 recoveries); `reusable-changelog-fragment-check.yml` gains a `fragment_length_warn_chars` input (default 500) that emits a non-blocking `::warning::` for fragments exceeding the threshold and points contributors at the guide (#488) ### Changed None. ### Fixed - `PREP_SUBJECT_RE` now accepts the Forgejo squash-merge subject suffix ` (#NN)`. A prep-PR squash-merged on Forgejo produces the commit subject `chore(release): vX.Y.Z (#NN)` (PR-number appended to the title); the `$` anchor previously rejected it, silently skip-gating the cut. #331 made `prepare` optional for squash-merge but missed the suffix half — measured on ember v0.1.0 (`chore(release): v0.1.0 (#37)`). The trailing group is added at the end, so `BASH_REMATCH[2]` version extraction is unaffected. Closes #487. - Let the changelog fragment PR gate accept a consumer-provided valid-kind list so it can match the repository's release-time assembler instead of hardcoding release-toolkit's own `internal` convention (#489). - `release-prep` no longer emits conventional-commit summary bullets that duplicate an authored changelog fragment. `cc_categorize_commits_since` now takes an optional fragments-directory argument and suppresses the CC subject bullet of any commit that itself added a fragment in the same range (`git log --diff-filter=A`), keyed on git commit identity rather than on a shared `#NNN` prose reference. This catches the ref-absent and ref-mismatched duplicates that `changelog_dedup_cc_by_fragment_refs` (which keys on the fragment filename id) structurally cannot, and it cannot silently drop genuinely-new content: a change with no fragment sits on a commit the suppression set never contains. The ref-based dedup is retained for the complementary separate-commit-same-ref case. Refs release-toolkit#493 (Bug 2). - `release-prep` no longer drops the `### Upgrade` section or concatenates a stray `None.` placeholder onto real content when composing a release over pre-existing `## [Unreleased]` content. `changelog_merge_sections` now sources its section order from the single-source-of-truth `CHANGELOG_STANDARD_SECTIONS` (so no hand-maintained order list can drift and drop a section) and treats the scaffold `None.` as a soft-empty sentinel that yields to real content but persists when a kind is empty in every input. Refs release-toolkit#493 (Bug 1). - **fragment-style**: scrub '[reviewer]' invented-jargon per register-check gate - **fragment-style**: scrub 3 chamber-name attributions per register-check gate ### Removed None. ### Deprecated None. ### Upgrade None.
release-bot force-pushed release-prep/rolling from dcbdbca64a
All checks were successful
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 3s
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 1m57s
tests / shellcheck (pull_request) Successful in 8s
to c58b31f952
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
2026-07-23 23:55:19 +02:00
Compare
release-bot force-pushed release-prep/rolling from c58b31f952
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
to af006f1a72
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
2026-07-24 00:02:38 +02:00
Compare
release-bot force-pushed release-prep/rolling from af006f1a72
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
to d2d9732bfa
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 4s
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 1m57s
tests / shellcheck (pull_request) Successful in 8s
2026-07-24 00:40:10 +02:00
Compare
release-bot force-pushed release-prep/rolling from d2d9732bfa
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 4s
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 1m57s
tests / shellcheck (pull_request) Successful in 8s
to eb96b66ab4
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
2026-07-24 00:49:01 +02:00
Compare
release-bot force-pushed release-prep/rolling from eb96b66ab4
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m57s
tests / shellcheck (pull_request) Successful in 8s
to f38267ec8f
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 4s
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 5s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 1m58s
tests / shellcheck (pull_request) Successful in 8s
check-self-bootstrap / check (push) Successful in 3s
release / decide + act (push) Successful in 7s
release / release (push) Successful in 0s
tests / bats (push) Successful in 1m58s
tests / shellcheck (push) Successful in 8s
mirror-on-cut / mirror-1 (release) Successful in 1s
mirror-on-cut / mirror (release) Successful in 0s
2026-07-24 01:11:49 +02:00
Compare
alex approved these changes 2026-07-24 01:28:40 +02:00
alex merged commit f38267ec8f into main 2026-07-24 01:28:45 +02:00
alex deleted branch release-prep/rolling 2026-07-24 01:28:45 +02:00
Sign in to join this conversation.
No description provided.