Both tools merge with git merge-tree --write-tree, which needs git 2.38,
and pr_overlap's pairwise merges also pass --merge-base, which needs
git 2.40. On an older git, such as 2.34 on Ubuntu 22.04, they stopped
with git's merge-tree usage text and nothing said what was wrong. A
failing merge now reports the version it needs and the one found when
git is older; on a recent enough git the error is unchanged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
pr_overlap.py let a failed git or gh call escape as a bare
CalledProcessError traceback that names the command but drops the
error text, so a mistyped --base such as upstream/main (refs/heads/upstream/main
does not exist) read as an unexplained crash. The script now exits with
"pr_overlap: <command> failed with exit code N: <stderr>".
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Only the first 'Depends on:' was read. When it was empty, such as the template checklist line with its placeholder comment, a later 'Depends on: #N' was ignored and the dependent pull requests were reported as overlapping.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A -U0 hunk for an insertion before line 1 starts at line 0, so two PRs
inserting at the top of one file produced a link to the nonexistent
line L0. hunks now clamps the start to line 1 and derives the end from
the clamped start. A test covers the clash range and the rendered link.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
The --branch mode removed the branch's own open pull request only when its
head equalled the local branch exactly. Checking commits before pushing
left the branch ahead of its pull request, so the tool reported the user's
own pull request as overlapping. The filter is now a function that also
drops any pull request whose head is an ancestor of the branch.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01V9UU71SP1UKGR51Sowbgmq
pr_overlap only skipped a pair when one pull request named the other
directly. In a stack where #3 depends on #2 and #2 on #1, #1 and #3 were
reported as overlapping, and two pull requests built on the same #1 were
reported for the files and exports both inherit from it. Dependencies are
now followed through open pull requests, and what a shared dependency adds
is left out of the same-file and same-export columns.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0189deyapHNNqKQJboZBJQei
exports() only checked whether the matching line ended with a semicolon, so a
prototype wrapped over several lines was counted as an implemented export and
two PRs adding the same forward declaration were flagged as overlapping. It now
joins the following added lines up to the first semicolon or brace and treats
the match as a declaration when the semicolon comes first.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01V9UU71SP1UKGR51Sowbgmq
The PR template's untouched "Depends on: <!-- #PR, or none -->" line
matched the checklist regex, so prose such as "Depends on #1400" was never
consulted and the declared dependency was lost. HTML comments are now
stripped and the prose form is used when the checklist line is blank. An
explicit "Depends on: none" still takes precedence.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01V9UU71SP1UKGR51Sowbgmq