fix: empty release notes (preset v10 toolchain) + chore(deps) release veto #10

Merged
ryangr0 merged 2 commits from ryangr0/fix/preset-v10-notes-toolchain into main 2026-08-28 04:10:56 +00:00 AGit
Owner

Two release-pipeline bugs, both verified behaviorally in the new tests. (1) Every release since 2026-07-31 shipped heading-only notes: conventionalcommits v10 is incompatible with release-notes-generator 14's Handlebars writer, which silently drops every commit line. Fixed by pinning the upstream beta pair (generator 15.0.0-beta.2, analyzer 14.0.0-beta.3) via deps+overrides, with a load-time guard that fails loudly if an incompatible generator would be used. (2) The release:false rules vetoed the deps-scoped patch rules (false ranks above major in compareReleaseTypes), so chore(deps)/build(deps) commits have never cut a release — dropped; absence already means no release. Merge alongside webgrip/workflows PR (composite fallback) — the guard will otherwise fail fallback-path releases loudly once this publishes as 1.2.3.

Two release-pipeline bugs, both verified behaviorally in the new tests. (1) Every release since 2026-07-31 shipped heading-only notes: conventionalcommits v10 is incompatible with release-notes-generator 14's Handlebars writer, which silently drops every commit line. Fixed by pinning the upstream beta pair (generator 15.0.0-beta.2, analyzer 14.0.0-beta.3) via deps+overrides, with a load-time guard that fails loudly if an incompatible generator would be used. (2) The release:false rules vetoed the deps-scoped patch rules (false ranks above major in compareReleaseTypes), so chore(deps)/build(deps) commits have never cut a release — dropped; absence already means no release. Merge alongside webgrip/workflows PR (composite fallback) — the guard will otherwise fail fallback-path releases loudly once this publishes as 1.2.3.
The analyzer's compareReleaseTypes ranks a rule by RELEASE_TYPES.indexOf(its
release value), and false's -1 sorts above major — so the generic
{ type: 'chore', release: false } rule silently overrode
{ type: 'chore', scope: 'deps', release: 'patch' } on every commit both
matched. chore(deps)/build(deps) Renovate bumps have therefore NEVER cut a
release, contradicting both this file's own comment and the README, since
1.0.0. Identical behavior on commit-analyzer v13 and v14 — this is a config
bug, not an analyzer regression.

Non-releasing types are now expressed by absence: an unmatched commit falls
through to the analyzer's default rules, which release nothing for chore, ci,
docs, style, test, or build. Proven behaviorally through the real analyzer in
the new tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
conventional-changelog-conventionalcommits v10 moved to the function-template
writer architecture; release-notes-generator 14 still drives the Handlebars
writer, which renders the heading and silently drops every commit line. Every
release cut through this config since it existed shipped heading-only release
notes and CHANGELOG entries — ploeg v0.2.0-rc.15 (2026-07-31) through v0.2.0
(2026-08-27) — and nothing failed.

Upstream ships the fix on the beta channel (semantic-release/commit-analyzer
issue 921 'released on @beta'): release-notes-generator 15.0.0-beta.2 (writer
v9, parser v7) and commit-analyzer 14.0.0-beta.3 (bundles the v10 preset).
Both are pinned exactly, as direct dependencies AND as overrides — overrides
because semantic-release's own ^14/^13 ranges otherwise nest incompatible
copies exactly where its plugin loader resolves first (loadPlugin resolves
from semantic-release's directory before the workspace root). Verified
against real ploeg commit ranges: sections, custom section names, the
deps-scoped ! non-breaking guard, and the BREAKING CHANGE footer escape
hatch all render and analyze correctly; a behavioral notes test now pins
that.

A load-time guard resolves the generator the way semantic-release does and
throws below major 15, turning any future silent-empty-notes pairing into a
loud release failure. Overrides only apply at the install root, so the
composite's no-image fallback needs its own handling (webgrip/workflows).
Renovate will offer the stable 15/14 upgrades when they release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
webgrip-ci referenced this pull request from a commit 2026-09-04 18:17:43 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
webgrip/semantic-release-config!10
No description provided.