chore: merge CHANGELOG.md with the union driver #144

Merged
Grandiras merged 1 commit from chore-changelog-union-merge into main 2026-09-24 17:58:31 +00:00
Owner

Part of the v0.7.0 cycle (#141). This one-line repo-process change adds CHANGELOG.md merge=union to .gitattributes.

Why: every PR adds bullets at the top of ## [Unreleased], so any two PRs open at the same time conflict there. Resolving that conflict changes the PR head, and the approval is only valid for the reviewed head, so each conflict also costs a fresh review. With about 30 PRs in this cycle, that adds up to a lot of repeated rebases and re-reviews.

Effect: git's built-in union driver keeps both sides' lines, so the file merges cleanly. I checked this with git merge-tree --write-tree on two branches that each add subsections to [Unreleased]: no conflict, and both sides' bullets are kept. The cost is cosmetic: subsection headers can repeat (two ### Changed blocks). The release commit (#140) already condenses [Unreleased] and will tidy them.

No CHANGELOG entry: this is repository tooling, not runtime, API or build behaviour.

After merging, I'll check whether Forgejo's mergeability check respects it. #143 conflicts only in CHANGELOG.md, so it should turn mergeable.

🤖 Generated with Claude Code

Part of the v0.7.0 cycle (#141). This one-line repo-process change adds `CHANGELOG.md merge=union` to `.gitattributes`. **Why:** every PR adds bullets at the top of `## [Unreleased]`, so any two PRs open at the same time conflict there. Resolving that conflict changes the PR head, and the approval is only valid for the reviewed head, so each conflict also costs a fresh review. With about 30 PRs in this cycle, that adds up to a lot of repeated rebases and re-reviews. **Effect:** git's built-in `union` driver keeps both sides' lines, so the file merges cleanly. I checked this with `git merge-tree --write-tree` on two branches that each add subsections to `[Unreleased]`: no conflict, and both sides' bullets are kept. The cost is cosmetic: subsection headers can repeat (two `### Changed` blocks). The release commit (#140) already condenses `[Unreleased]` and will tidy them. **No CHANGELOG entry:** this is repository tooling, not runtime, API or build behaviour. After merging, I'll check whether Forgejo's mergeability check respects it. #143 conflicts only in `CHANGELOG.md`, so it should turn mergeable. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore: merge CHANGELOG.md with the union driver
All checks were successful
CI / pds-integration (pull_request) Successful in 27s
CI / build-and-test (pull_request) Successful in 1m0s
Sync Closures to GitHub / sync-closure (pull_request) Successful in 8s
9c8f667b94
Every PR adds its bullets at the top of `## [Unreleased]`, so any two
PRs open at once conflict there, and resolving that changes the PR head
and invalidates its review. The built-in union merge driver keeps both
sides' lines instead; the release commit tidies the section (duplicate
subsection headers) as it already condenses it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

@claude /review

@claude /review
Collaborator

🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 Reviewing this PR — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/577); the reply will link the full session transcript. <!-- claude-run:pr_review --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-144/run-577.md) — updating every ~5 minutes while the task runs.
claude-reviewer left a comment

✅ Verdict: approve — no blocking issues found.

Sound, minimal repo-process change. merge=union is a built-in Git low-level merge driver (see gitattributes(5)) — no merge.union.driver config needed, so it works for any contributor with stock Git the moment they pull this file. No existing .gitattributes to conflict with. The tradeoff called out in the description (duplicate section headers, cleaned up at release time) is the expected behavior of a line-based union merge and is reasonable given the stated goal of avoiding repeated CHANGELOG-only conflicts across ~30 parallel PRs.

One open question the author already flagged rather than glossed over: whether Forgejo's own mergeability/API-driven merge path (as opposed to a local git merge) actually honors .gitattributes merge drivers — some forges perform merges via an embedded git library that may not implement custom/built-in merge drivers the same way the git CLI does. That's a real risk to the stated goal (auto-resolving PR conflicts in the UI) but not a defect in this diff, and the author says they'll verify it post-merge, so it doesn't block this PR.

No CHANGELOG entry is correctly omitted per the repo's own rule (repository tooling, not runtime/API/build behavior).


⏱ 0m 27s · 4 turns · tokens: 12.5k in / 2.1k out (+128.4k cache-read)
📜 Full session transcript

✅ **Verdict: approve** — no blocking issues found. Sound, minimal repo-process change. `merge=union` is a built-in Git low-level merge driver (see `gitattributes(5)`) — no `merge.union.driver` config needed, so it works for any contributor with stock Git the moment they pull this file. No existing `.gitattributes` to conflict with. The tradeoff called out in the description (duplicate section headers, cleaned up at release time) is the expected behavior of a line-based union merge and is reasonable given the stated goal of avoiding repeated CHANGELOG-only conflicts across ~30 parallel PRs. One open question the author already flagged rather than glossed over: whether Forgejo's own mergeability/API-driven merge path (as opposed to a local `git merge`) actually honors `.gitattributes` merge drivers — some forges perform merges via an embedded git library that may not implement custom/built-in merge drivers the same way the `git` CLI does. That's a real risk to the stated goal (auto-resolving PR conflicts in the UI) but not a defect in this diff, and the author says they'll verify it post-merge, so it doesn't block this PR. No CHANGELOG entry is correctly omitted per the repo's own rule (repository tooling, not runtime/API/build behavior). --- ⏱ 0m 27s · 4 turns · tokens: 12.5k in / 2.1k out (+128.4k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/ATProto.NET/pr-144/run-577.md) <!-- claude-verdict:approve --> <!-- claude-reviewed-head:9c8f667b94c2c5cf6f7dd2668e73eb5e4db8ebf2 -->
Grandiras deleted branch chore-changelog-union-merge 2026-09-24 17:58:31 +00:00
Sign in to join this conversation.
No description provided.