Repository navigation
fix(triage): harden duplicate clustering against test renaming and order Pareto ties by earliest PR - #3059
Conversation
05b7f1c to
7bbb964
Compare
|
Shepherd (Phase A — propose only): this PR's changed-file set overlaps >=0.6 Jaccard with #2510, which carries the larger take. Proposing close as superseded. This is a proposal, not a close — nothing auto-closes while this comment is fresh. If this PR has unique content (a different rule, extra tests, a different fix), say so or push, and the label comes off. Cluster signal is a file-set heuristic; the verdict stays human. |
7bbb964 to
b3b7366
Compare
Not a Duplicate of #2510 (False-Positive File-Set Overlap)@limitlessprojects —
Both PRs are complementary and address distinct parts of |
50f3bfb to
931d390
Compare
8086582 to
1cafcd0
Compare
…der Pareto ties by earliest PR
1cafcd0 to
1d93b86
Compare
Summary
Hardens
tools/triage_bot.pyagainst two duplicate-evasion and line-golfing loopholes observed when a later copycat PR (#2836) duplicated an earlier compiler fix (#2614 for issue #2613):Test-Renaming Duplicate Evasion (
Jaccard = 1/3 < 0.60):classify()only grouped PRs into a duplicate cluster whenjaccard(sets[a], sets[b]) >= cfg["dup_jaccard"](0.60).1compiler source file +1new integration test file), copying the compiler fix inloans.rswhile renaming the test file drops the 2-file Jaccard similarity to1/3 = 0.333 < 0.60, bypassingDUPdetection entirely.classify()now clusters two PRs together if any of the following hold:jaccard(sets[a], sets[b]) >= cfg["dup_jaccard"], ORfix(hy-check):and trailing(#NNN)/(fixes #NNN)suffixes), OR#NNNviafixes/closes/resolves #NNNor(#NNN)in title/body) and share at least one changed non-test source file.Canonical Survivor Priority & Line-Golfing Tie-Breaking:
(-x["additions"], x["number"])rather than earliest PR number(x["number"], -x["additions"]).render_board()(Pareto NOW) andmerge_gate()previously broke score ties byx["additions"]ascending, which rewarded copycat PRs that minified multi-case regression tests into\n-escaped one-liners to jump ahead of the original PR.LAND-CANDIDATEtie-breaking now prioritize the earliest PR number (x["number"]ascending) first.Verification
tools/test_triage_bot.py(registered in.github/workflows/ci.ymland verified viatools/check_test_registration.py) covering:Jaccard = 0.333) with same issue/title as earlier PR#2614is caught asDUPof#2614, preserving#2614as the canonicalLAND-CANDIDATE.#2613and touching the same source file (loans.rs) is caught asDUPof#2614.loans.rsfor distinct issues with distinct test files (Jaccard = 0.333) remain independentLAND-CANDIDATEs.Pareto NOWorders score ties by earliest PR number (x["number"]ascending) rather than fewest additions.