docs(release): classify branch-diff false positives - #395
Merged
Conversation
branch-diff matches commits rather than content, so it reports commits whose
changes are already on v5.x. Two thirds of its output for v5.18.0 was noise.
The skill previously said only "skip commits that would result in empty
cherry-picks", which gives no way to tell those apart from real ones.
Document the three classes actually observed:
a. Commits subsumed by the squash-merged 5.14.2/5.14.3/5.14.4 releases.
Enumerated per release; a closed set that will not grow.
b. Dependabot bumps superseded by a later bump of the same package on v5.x.
Cherry-picking one downgrades the branch.
c. #154, the 6.0.0-pre bump on main, which must never reach a 5.x branch.
Applying these to `branch-diff v5.x main` yields exactly the 13 commits in the
v5.18.0 proposal.
Also add a `git diff --stat main` check before the version bump. An age-based
cutoff had dismissed #352 as a false positive when it was real and unapplied;
the content diff is what exposed it, so the skill now states that age alone is
not evidence and cites #352 as the counterexample.
Smaller fixes for things that misled during v5.18.0: pull both branches before
comparing, parse PR numbers from the trailing URL rather than the "(#NNN)" form
(which false-matches PR references in commit titles), clear the previous
release's worktree, and keep the version commit last on the branch.
szegedi
requested review from
IlyasShabi,
nsavoire and
r1viollet
as code owners
August 11, 2026 10:47
Overall package sizeSelf size: 2.49 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | pprof-format | 2.3.1 | 504.33 kB | 504.33 kB | | source-map | 0.8.0 | 185.66 kB | 185.66 kB | | node-gyp-build | 4.8.4 | 13.86 kB | 13.86 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe |
This comment has been minimized.
This comment has been minimized.
IlyasShabi
approved these changes
Aug 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
branch-diffmatches commits, not content, so it reports commits whose changes are already onv5.x. For the v5.18.0 release it listed 37 commits, of which 24 were false positives — nearly two thirds.The skill previously offered only "skip commits that would result in empty cherry-picks", which gives no way to distinguish those from real ones short of attempting each cherry-pick.
What changed
Three classes of false positive are now documented, all observed while preparing #394:
a. Squash-merged releases. 5.14.2, 5.14.3 and 5.14.4 were squash-merged rather than rebased, so every commit they contained lost its identity and is reported forever. Enumerated per release (from proposals #331, #334, #337) — 18 PRs. A closed set that will not grow.
b. Superseded dependency bumps. A Dependabot bump that never landed on
v5.x, which later took an equal-or-newer version of the same package directly.@types/nodeis the clearest case: the bump targets 25.9.2 whilev5.xis already at 26.1.1, so cherry-picking it would downgrade the branch. Recurring, so described as a pattern to recognise rather than a fixed list.c. The
main-only version bump. #154 movedmainto6.0.0-preand must never reach a 5.x branch.Applying these rules mechanically to
branch-diff v5.x mainyields exactly the 13 commits in the v5.18.0 proposal — no residue in either direction.The verification step
A
git diff --stat maincheck is now required before the version bump, with minimal divergence as the goal.This one earned its place. While preparing #394 I initially used an age-based cutoff to separate false positives, which looked reasonable and was wrong: it dismissed #352 (grouped Dependabot updates), a genuinely unapplied commit. The content diff is what exposed it. The skill now states that age alone is not evidence and cites #352 as the counterexample.
Smaller fixes
Each from something that actively misled during v5.18.0:
(#NNN). The latter false-matches PR references appearing in commit titles (e.g. "Follow up on fix(otel-thread-ctx): don't derive CtxWrap from node::ObjectWrap #388 review comments").Review note
The class-(a) table encodes claims about release history worth a second pair of eyes. I derived it from the bodies of proposals #331, #334 and #337.