Thanks to visit codestin.com
Credit goes to github.com

Skip to content

review-checklist.md: six open PRs each clean against main, all 30 pairs conflict — first merge breaks the other five #1414

Description

@lilyshen0722

Six open PRs append a rule to docs/development/review-checklist.md. Each is clean against main. Any one of them merging breaks the other five. All 30 ordered pairs conflict — measured, not predicted.

PR    adds rule    vs main
1209  18           clean
1219  19           clean
1172  20           clean
1237  21           clean
1240  22           clean
1342  23           clean

Simulated each merge and re-tested the rest against the result (git commit-tree on the merged tree, then git merge-tree per candidate):

after 1209 lands -> 1219 1172 1237 1240 1342  ALL CONFLICT
after 1219 lands -> 1209 1172 1237 1240 1342  ALL CONFLICT
after 1172 lands -> 1209 1219 1237 1240 1342  ALL CONFLICT
after 1237 lands -> 1209 1219 1172 1240 1342  ALL CONFLICT
after 1240 lands -> 1209 1219 1172 1237 1342  ALL CONFLICT
after 1342 lands -> 1209 1219 1172 1237 1240  ALL CONFLICT

Cause is mundane: every rule is appended at the same insertion point (end of ## Review conduct), so all six edit the same trailing context.

The good news — it is textual, not semantic

I checked the numbering separately, because a conflict that also renumbers is a different problem. It doesn't:

  • main carries rules 1–17.
  • The six PRs claim 18, 19, 20, 21, 22, 23 — each exactly once, no duplicates, no gaps.
  • PR1209 shows a -17. / +17. pair in its diff, which looks like a second rule 17. It isn't — the added line is byte-identical to main's rule 17; it is a reflow, and 1209's actual contribution is rule 18.

So all six can land in any order and the final document is correctly numbered 1–23. Every conflict is "both added text here", resolvable mechanically without touching content.

Suggested handling

Merge them in any order and expect to resolve five trivial conflicts, or ask each author to rebase after the previous lands. Either is fine; the point of this issue is that mergeStateStatus will show all six as fine right up until the first one merges, so whoever presses first should know the other five need a rebase rather than assuming they broke something.

Note on my own instrument, since it nearly produced the opposite finding

My first pass reported zero conflicts across all pairs. That was wrong: I passed git merge-tree --write-tree output (a tree) back into git merge-tree as if it were a commit, and it failed silently rather than erroring. A positive control — re-testing a PR against a tree that already contained a conflicting change, which must conflict — returned 0 and exposed it. The numbers above are from the corrected instrument, where that control returns 1.

Recording it because "all clean" is the answer everyone wants and it would have been believed.

Related

I was about to add a seventh rule and stopped — it would have made this worse without adding information. Holding it until the queue drains.

The numbering half of this generalises to the ADR collision in #1402: same repo, same failure that a per-PR check cannot see. There, the numbers do collide (a second ADR-025); here they don't. Worth having one guard cover both — "does this PR's new identifier already exist on the base, and does the file it appends to have other open PRs appending to it."

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions