From 508530a6fee62e7782fbdd4f4a0587c40527a16e Mon Sep 17 00:00:00 2001 From: Tejas Chopra Date: Mon, 13 Jul 2026 10:18:04 -0400 Subject: [PATCH] chore: union-merge CHANGELOG.md to stop cross-PR merge conflicts (#2118) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Nearly every open PR appends an entry to the same `## [Unreleased]` section of `CHANGELOG.md`. With dozens of concurrent PRs, merging **any** one flips the others to `CONFLICTING`, so bulk-merging the backlog becomes quadratic (each merge re-conflicts the rest on the changelog alone — code is fine). This adds git's built-in **`union`** merge driver for `CHANGELOG.md` via `.gitattributes`, so changelog conflicts auto-resolve by keeping every entry — removing the single largest merge-conflict blocker across the PR backlog. `union` is a built-in driver (no `.git/config` needed) and is honored by GitHub's server-side merge. ## Type of Change - [x] Code refactoring / repo infrastructure (no functional change) ## Changes Made - `.gitattributes`: `CHANGELOG.md merge=union` ## Testing - [x] Linting passes (no code changed) ### Test Output ```text N/A — .gitattributes-only change; verified the union driver resolves overlapping [Unreleased] appends locally. ``` ## Real Behavior Proof - Before: merging one PR that touches `CHANGELOG.md` conflicts every other PR that touches it. - After: overlapping `CHANGELOG.md` appends merge automatically (both entries kept), no manual resolution. --- .gitattributes | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitattributes b/.gitattributes index 61d299b53..798030e35 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,6 @@ *.py text eol=lf *.sh text eol=lf + +# CHANGELOG appends conflict on nearly every concurrent PR; union-merge keeps +# all entries instead of forcing a manual resolution, killing the merge cascade. +CHANGELOG.md merge=union