|
18 | 18 | "run against the real incident, the check reproduces by machine the same split the -fix3 round found by hand: 4 accidental drops in the generator plus 2 intentional test-function removals in tests/test_class_format.rs", |
19 | 19 | "cargo test --all: 583 passed / 0 failed / 1 ignored, unchanged — no product code touched", |
20 | 20 | "check-dod-ci-parity: OK, 7 commands and 2 toolchains matching on both sides after the wiring", |
21 | | - "GATE 2 found the filter too narrow and this round widened it. The original looked only at files the merged-in branch changed, on the stated grounds that 'only files the merged-in branch actually changed can have lost its work' — which is false, and the repo's own second incident proves it: 514d5b08 dropped the same four definitions as e53b2142, and the narrow filter reported '0 file(s) examined', rc=0. The predicate is now every file that either the merged-in branch or the merge itself changed, and both incidents report rc=1 with the same six names.", |
| 21 | + "GATE 2 found the filter too narrow and this round widened it. The original looked only at files the merged-in branch changed, on the stated grounds that 'only files the merged-in branch actually changed can have lost its work' — which is false, and the repo's own second incident proves it: 514d5b08 dropped the same four definitions as e53b2142, and the narrow filter examined 4 files, found 0 and returned rc=0 (the wide filter examines 13 on the same merge). It was not blind: it read four files and none of them was where the loss landed. The predicate is now every file that either the merged-in branch or the merge itself changed, and both incidents report rc=1 with the same six names.", |
22 | 22 | "The docstring's only worked example did not work. It wrote `Dropped-from-theirs: Pool.fieldref` while the check prints `method fieldref` and matches literally, so anyone following the example got no exemption. Verified both ways on a synthetic merge: the name copied from the output exempts (rc=0), the prettier form does not (rc=1). The example now uses the printed form and the docstring states that the name must be copied from the check's own output character for character." |
23 | 23 | ], |
24 | 24 | "issues": [ |
25 | | - "FALSE POSITIVE RATE, measured by this round by running both versions over one window of 83 merges (38b0df38..8c7b473f, the last 200 commits of origin/main at the time): the check as first written flags 8 merges / 19 definitions; the widened file filter flags 10 / 26. An earlier draft of this file said 45; that number was wrong and never came out of this implementation. The narrow version reproducing 19 exactly, in the same run, is what makes the measurement trustworthy. The seven extra definitions come from two merges, 514d5b08 (six) and 37ea5a13 (one), and they split four to three: four are the second of the two real incidents, restored later and present in the tree today; three are a branch having removed a definition main still had (two tests deleted on purpose by 0f517567, one predicate generalised by 1da1379e). So the honest rate is 4 of 7 found and 3 of 7 false, not 6 and 1. The widened version was no slower than the narrow one in that window, so time is not the cost of widening; reading is. A pull request usually contains 0-2 internal merges. CI only walks origin/main..HEAD, so historical merges are never re-examined and do not turn main red -- but that is not a reason to call the cost small, because the new cost lands in exactly that range, on the next base pull of an open branch.", |
| 25 | + "FALSE POSITIVE RATE, measured by this round by running both versions over one window of 83 merges (38b0df38..8c7b473f, the last 200 commits of origin/main at the time): the check as first written flags 8 merges / 19 definitions; the widened file filter flags 10 / 26. An earlier draft of this file said 45; that number was wrong and never came out of this implementation. The narrow version reproducing 19 exactly, in the same run, is what makes the measurement trustworthy. The seven extra definitions come from two merges, 514d5b08 (six) and 37ea5a13 (one), and they split four to three: four are the second of the two real incidents, restored later and present in the tree today; three are a branch having removed a definition main still had (two tests deleted on purpose by 0f517567, one predicate generalised by 1da1379e). So the honest rate is 4 of 7 found and 3 of 7 false, not 6 and 1. On time, the honest statement is that there is no significant increase, not that it is no slower: three independent runs of the narrow version over this window span 229s/286.8s/585.3s, a factor of 2.6, while the difference between versions in one back-to-back run was 70s over 83 merges, about 0.8s per merge (all four numbers come from gate-2 measurements; this round deliberately did not re-run them, because re-running produces a fourth different number and that is the point). The wide file set is a superset of the narrow one -- 4 files versus 13 on 514d5b08 -- so it cannot be structurally cheaper. The cost of widening is reading, not waiting: a pull request carries 0-2 internal merges. A pull request usually contains 0-2 internal merges. CI only walks origin/main..HEAD, so historical merges are never re-examined and do not turn main red -- but that is not a reason to call the cost small, because the new cost lands in exactly that range, on the next base pull of an open branch.", |
26 | 26 | "WHAT IT CANNOT SEE: a definition whose name survives while its body is emptied or gutted. The check compares name sets, so 'still there but no longer does anything' passes. It also cannot tell a genuine rename from a drop-plus-add, and a move between files reads as a drop in the old file.", |
27 | 27 | "THE TRAILER IS A BYPASS, and deliberately so: anyone in a hurry can write one and move on. The only brake is that a reason is required by the format and the trailer is visible in the merge commit. That is weaker than a gate and stronger than nothing; making it harder was judged over-design for a check with no track record yet.", |
28 | 28 | "Two of the flagged historical merges are the known incident. The rest are upstream-sync merges (S5-S8) and one `-s ours` ancestry record. The sync ones genuinely dropped upstream methods — decode_str and encode_str are absent from the whole result tree, not moved, which was checked — so whether they are findings or accepted judgements is for the sync lineage to say, not this round.", |
|
0 commit comments