Skip to content

fix(release): rebuild the release PR body and draft notes from the changelog - #221

Merged
derrickmehaffy merged 1 commit into
mainfrom
fix/release-notes-from-changelog
Aug 14, 2026
Merged

fix(release): rebuild the release PR body and draft notes from the changelog#221
derrickmehaffy merged 1 commit into
mainfrom
fix/release-notes-from-changelog

Conversation

@derrickmehaffy

Copy link
Copy Markdown
Contributor

You were right and I was looking at the wrong artifact.

#217's pull request body lists 4 entries. Its changelog lists 38.

### Bug Fixes
* **admin:** stop the settings table logging a React error on every render (#215)
* **release:** fold the beta changelog into the release that supersedes it (#219)
### Documentation
* backfill 4.2.9, 5.0.0 and 5.0.1 into the changelog (#213)
### Chores
* graduate to a stable release (#218)

Why, and why it matters more than it looks

release-please generates the body from the commits since the last release —
and the last release was 5.1.0-beta. So once the beta is folded into the
changelog, the body still describes only what came after it.

github-release then copies that body into the draft release. So the
published 5.1.0 release notes would have shipped with those 4 lines, omitting
the 33 changes that are the release. Folding the changelog fixed the file and
left both of the things people actually read.

Fix

The body and the draft notes are rebuilt from CHANGELOG.md, which is the
merged and deduplicated list.

Only the text between release-please's --- delimiters is replaced; the heading
comes from the changelog, which is the shape release-please writes. That
structure is load-bearing — github-release parses the body to find the
release, and an earlier hand-edit of it is exactly why the 5.1.0-beta draft had
to be created manually.

Verified against the live #217 and its branch

version=5.1.0   changelog entries: 38
spliced 38 entries
  parses: true | version: 5.1.0 | component: undefined | entries: 38
  blank lines splitting a list in the new body: 0

The parse check runs release-please's own PullRequestBody.parse over the
rebuilt body — the check that would have caught the breakage that forced the
manual draft. Splicing twice leaves 38, so a re-run is a no-op.

🤖 Generated with Claude Code

…angelog

The 5.1.0 pull request body lists 4 entries. Its changelog lists 38.

release-please generates the body from the commits since the *last* release,
and the last release was 5.1.0-beta - so once the beta is folded into the
changelog, the body still describes only what came after it. github-release
then copies that body into the draft release, so the published 5.1.0 notes
would have omitted the 33 changes that are the release.

Folding the changelog fixed the file and left both of the things people
actually read. The body and the draft are now rebuilt from CHANGELOG.md, which
is the merged and deduplicated list.

Only the text between release-please's `---` delimiters is replaced, and the
heading comes from the changelog, which is the shape release-please writes.
That structure is load-bearing: github-release parses the body to find the
release, and an earlier hand-edit of it is why the 5.1.0-beta draft had to be
created manually.

Verified against the live #217 and its branch: the rebuilt body carries 38
entries, release-please's own PullRequestBody.parse still reads one release at
version 5.1.0 with 38 notes entries, no blank line splits a list, and splicing
twice leaves 38.

Co-Authored-By: Claude <noreply@anthropic.com>
@derrickmehaffy
derrickmehaffy merged commit 9376586 into main Aug 14, 2026
12 checks passed
@derrickmehaffy
derrickmehaffy deleted the fix/release-notes-from-changelog branch August 14, 2026 05:33
@github-actions github-actions Bot mentioned this pull request Aug 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant