feat(changelog): a fragment's BREAKING CHANGE text should reach the release's ### Upgrade section, which today reads None for a breaking release #1554
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1554
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured
v0.67.0 (#1553, cut on 2026-10-06) removed the six single-gate reusables (#1542). That is a breaking change for any adopter still wiring them.
[v0.67.0]section carries the migration as one### Removedbullet: "six single-gate reusables are gone: wire onepr.ymlonreusable-pr-gates.ymland requirepr / gates (pull_request)(#1542)".### Upgradereads "None."BREAKING CHANGE:body, with the full list of removed files, the renamed status contexts and the steps, is not rendered anywhere. Only a fragment's summary line reaches the composed section (#854, since v0.48.0).Why the section stays empty (review 7260):
upgradeis not a fragment kind.valid_kindsis added, changed, deprecated, removed, fixed, security and internal.### Upgradeis "never produced by fragment folding". It is authored by hand under[Unreleased], or derived from commits only in a release with no fragments (ADR-0012).docs/conventions.mdoffers "add a fragment, or### Upgradeprose" for a breaking change. Taking the fragment branch leaves Upgrade empty by construction.For v0.67.0 this was harmless: all five adopters had already migrated at v0.66.0, so "Upgrade: None." was literally true for each. It is misleading for an outside adopter who reads the Upgrade section as the list of things to do before bumping.
Why it matters
The toolkit is meant for adopters outside this forge. A reader who checks only
### Upgradebefore bumping a pin sees "None." on exactly the releases where action is required. The breaking information exists, in the fragment body and the commit'sBREAKING CHANGE:footer, but never reaches the published notes.Options (decision tree, AGENTS.md section 7)
BREAKING CHANGE:paragraph under### Upgradefor the release that consumes it. This is right when breaking changes should travel with the change that introduces them. It does not need a new fragment kind. It needs a rule for the paragraph's shape and a density check that covers it.upgradefragment kind, rendered into### Upgrade. This is right if an upgrade step should be written for readers, separately from the change's own summary. The cost is one more kind for authors to learn.### Upgradeprose under[Unreleased]whenever a fragment's body carriesBREAKING CHANGE:. This is right if hand-written Upgrade text should stay the only source. It moves the burden onto the author, at PR time.Acceptance criteria
### Upgradeas "None." without an explicit, documented reason.docs/conventions.mdagree with the result.