Skip to content

docs: document trigger conditions for duplicate changelog entries - #47

Merged
twada merged 4 commits into
mainfrom
docs/changelog-dup-trigger-conditions
Aug 27, 2026
Merged

twada merged 4 commits into
mainfrom
docs/changelog-dup-trigger-conditions

Conversation

@twada

@twada twada commented Aug 26, 2026 •

Copy link
Copy Markdown
Owner

Summary

RELEASING.md and ADR-010 previously described the duplicate-changelog-entry problem as having unclear trigger conditions ("the trigger conditions are not fully understood, so check every release"). Research into release-please's implementation and issue tracker shows the behavior is deterministic, so this PR replaces the hedged wording with the identified conditions and records the full research as an investigation report.

Findings

Changes

  • RELEASING.md: the release-PR review step now states the three trigger conditions instead of "check every release because the conditions are not understood"
  • ADR-010: the trade-off entry now documents the mechanism, the upstream not-planned status, and why earlier merges did not visibly duplicate, with a link to the investigation report
  • New docs/investigations/2026-08-27-release-please-changelog-duplication-research.en.md: the full analysis (split-regex subtleties, why Electron/Vite/Excalidraw are unaffected, verified setups combining PR-title linting + release-please + squash merge in the googleapis org, npm template-oss, and absinthe, and the lessons on pinning squash presets as code and the BLANK vs PR_BODY trade-off, plus how squash setups preserve BREAKING CHANGE footer details — title-only vs PR_BODY-carried footers vs merge-dialog editing with the commit-override markers as the retroactive fix)

🤖 Generated with Claude Code

twada and others added 4 commits August 26, 2026 23:48
Research into googleapis/release-please#2476 and the splitMessages()
implementation shows the duplication is deterministic: release-please
deliberately splits commit bodies on paragraph-leading Conventional
Commits lines, so a plain merge commit whose PR title is in Conventional
Commits form with a changelog-visible type duplicates the branch
commits' entries. Earlier merges that seemed equivalent did not
duplicate because their types are hidden from the changelog
(chore/ci/docs) or they predate release-please's scan range.

Replace the "trigger conditions are not fully understood" wording in
RELEASING.md and ADR-010 with the identified conditions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… practices

Record the full research behind the trigger-condition update: the
splitMessages() mechanism and its regex subtleties, why Electron/Vite/
Excalidraw are unaffected (CC PR titles + squash, but no release-please),
and verified setups combining PR-title linting with release-please under
squash merge (googleapis org, npm template-oss, absinthe), including the
lessons on pinning squash presets as code and the BLANK vs PR_BODY body
preset trade-off. Link the report from ADR-010.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n report

Document how squash-merge setups preserve (or lose) BREAKING CHANGE
footer details in changelogs: Google's title-only practice, npm's
PR_BODY preset carrying footers into squash bodies (verified end-to-end
against npm/cli d36945d and its v12.0.0 changelog), the BLANK-preset
merge-dialog escape hatch with BEGIN_COMMIT_OVERRIDE as the retroactive
fix, and npm/cli#9838's documented omission-and-recovery case. Note the
hidden advantage of this repository's plain-merge strategy: branch
commits' footers survive unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…port

release-please extracts the override with a naive substring split on the
merged PR body, so a prose mention of the literal marker arms the
mechanism, a missing end marker captures the rest of the body, and the
extracted text silently replaces the messages of every commit associated
with the PR. Record the pitfall, the plain-merge fallback nuance, and
the rule of thumb: never spell the marker in a PR body. Discovered
first-hand on this report's own pull request (body since reworded).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@twada
twada merged commit dc900d2 into main Aug 27, 2026
4 checks passed
@twada
twada deleted the docs/changelog-dup-trigger-conditions branch August 27, 2026 02:03
twada added a commit that referenced this pull request Aug 27, 2026
## Summary

Record the 2026-08-27 decision in the investigation report: this
repository transitions gradually from plain merge commits to squash
merge, with the squash presets set to PR_TITLE for the subject and
PR_BODY ("Pull request title and description") for the body.

## Motivation

With a blank squash body, the detailed rationale of a change lives only
in the pull request — a proprietary silo — and leaving GitHub would lose
it. With PR_BODY, the PR description, written to the same quality bar as
a commit message, becomes the squash commit body and persists in git
itself. This follows npm's configuration, verified end-to-end in the
report's ecosystem survey 3.

## Changes

The "Implications for this repository" section of the investigation
report now records: the chosen presets and their rationale; the
operating rules that follow (BREAKING CHANGE footers and deliberate
multi-unit paragraphs ride the PR description into the changelog, while
unintentional bare Conventional Commits paragraphs and the literal
commit-override marker remain the two pitfalls); and the underlying
model — the atomic, revertable unit of history is the squashed PR, with
PRs shrinking toward single-intent changes and behavior/structure
changes separated at the PR level in the tidy-first sense.

## References

-
docs/investigations/2026-08-27-release-please-changelog-duplication-research.en.md
(the updated file)
- PR #47 — the trial squash merge that started this discussion

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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