BREAKING CHANGE footer with a continuation line keeps only the last line

Open Beginner friendly
#2,955 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

@kojiromike is already working on this.

Since Nov 6, 2026.

  • #2956 by @kojiromike — open
  • #2958 by @kojiromike — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
72/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
node.js, typescript
Domain
backend

Research direction

Start by reading to-conventional-changelog-format.ts, identified in the issue as the source of the footer parsing behavior. Reproduce the case by calling parseConventionalCommits with the provided commit message, then inspect the 'token' handling. Done means the breaking change note includes both the original footer text and its indented continuation, with a focused test confirming the expected text.

Written by the indexing model from the issue text.

Description

priority: p3 type: bug

This reports a bug where a BREAKING CHANGE footer wrapped onto an indented continuation line loses its description in the changelog. A PR with a fix follows.

Environment details

Reproduced with the published release-please 17.11.2 and on main at ea20bc2, on Node 22. The code dates back to the original to-conventional-changelog-format.ts, so earlier releases are affected too.

Steps to reproduce

Call parseConventionalCommits on a commit "feat: some feature" whose body is the footer "BREAKING CHANGE: the old API is gone" followed by the line " continued here" with a leading space. The expected note text is "the old API is gone continued here" and the actual text is "continued here".

Cause

In toConventionalChangelogFormat, the 'token' case visits the footer text nodes and assigns breaking.text = node.value each time so the last node wins.

Context

#2936 makes this more common. Its retry indents lines like Foo.Bar(baz(abc)) so "BREAKING CHANGE: the old API is gone" followed by "Foo.Bar(baz(abc))" now gives a note of just "Foo.Bar(baz(abc))". Before #2936 that commit was dropped entirely.

Reproduction:

const {parseConventionalCommits} = require('release-please/build/src/commit');
const [commit] = parseConventionalCommits([{
  sha: 'abc',
  files: [],
  message: 'feat: some feature\n\nBREAKING CHANGE: the old API is gone\n continued here',
}]);
console.log(commit.notes);
// [ { title: 'BREAKING CHANGE', text: 'continued here' } ]
Dominant language
TypeScript
Stars
7.8k
Forks
621
Avg merge
1d 23h
Merged PRs (30d)
8

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from googleapis/release-please

All issues in googleapis/release-please

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.