Corpus v3: examples whose target the reviewer wrote are removed, since their share differs by organization and mostly grows between windows¶
Found while auditing Wikimedia's first eight built months for bot comments (none were found, and the
build's service-account filter has removed nothing on any of the four hosts). What turned up instead is Gerrit's "Suggest edit": the reviewer's rewrite of the commented
lines, fenced as a ```suggestion block in the comment (USER_SUGGESTION_START_PATTERN in
Gerrit's polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts, read at c52ea5b). The
prompt carries every comment, so on those examples the target is text the prompt already holds.
Counted on the built examples (before refine):
| organization | built | with a suggested edit | body equals the target | target inside the body |
|---|---|---|---|---|
| Wikimedia (8 of 13 months) | 4,146 | 763 | 553 | 36 |
| OpenStack | 5,959 | 465 | 315 | 22 |
| Qt | 11,448 | 172 | 112 | 9 |
| AOSP | 5,133 | 209 | 111 | 7 |
An adapter scores these by copying, not by any convention. Both arms of a contrast see the same prompt, so the expectation was that they dilute a contrast rather than fake one; rescoring v2's runs without them did not bear that out (next entry). Two properties make them a validity issue rather than noise. Their share differs by organization, 18% of Wikimedia's built examples against 1.5% of Qt's. And it mostly grows over time, as hosts adopt the feature: on corpus v2's refined rows before dedup, per registered half,
| organization | window | half a | half b |
|---|---|---|---|
| OpenStack | train | 188 / 2,343 = 0.080 | 154 / 2,343 = 0.066 |
| OpenStack | dev | 26 / 366 = 0.071 | 26 / 236 = 0.110 |
| Qt | train | 14 / 4,002 = 0.003 | 58 / 4,002 = 0.014 |
| Qt | dev | 60 / 527 = 0.114 | 40 / 425 = 0.094 |
Qt's development window carries 6.5 to 33 times its training window's share, OpenStack's half b 1.7 times, and OpenStack's half a slightly less. The sealed test window is later still, so a copy task would weigh most in the one window the confirmatory reading uses, unevenly across halves and organizations. The field's code refinement benchmarks do not filter this class (the 2026 survey of review benchmarks, arXiv:2602.13377, names no such filter; arXiv:2502.08172 treats "explicit code suggestion" as its own intention category).
Rule (refine, so a re-refine from disk and nothing refetched): an example is removed whole
when any of its comments opens a ```suggestion fence on a line of its own, or is Gerrit's
one-click "Fix applied." reply, which follows a fix taken as given. The whole example goes, not
just the comment, because its target is the reviewer's edit. Counted as suggested_edit and
applied_fix, a rebase successor counted first. Refined: OpenStack 465 and 0 removed, Qt 172 and
0, AOSP 209 and 1. Gerrit itself detects a suggestion by substring (comment-util.ts, the same
commit); the rule anchors the fence to its own line, and on all 26,686 built examples a looser
case-insensitive fence pattern selects exactly the same ones.
Six examples entered v3 that v2 did not hold. Dedup keeps the earliest of a duplicate pair, and where that was a removed example its twin now survives: five in OpenStack's train window, one in Qt's dev window. Two are sibling hunks commented "same as above" and "Here as well", whose target is the neighbouring hunk's suggested edit given by reference and not in their own prompt, so the rule keeps them. Every kept example is otherwise unchanged, and the counts reconcile (4,322 - 321 + 5 = 4,006; 897 - 93 + 1 = 805).
Not filtered, and reported: a reviewer who types the fix in prose ("Should this be X?").
sphragis.corpus.halves.target_in_comment finds the target, whitespace-normalized per line and 20
characters or more, verbatim in a comment; on built examples without a suggested edit: Wikimedia
56, OpenStack 160, Qt 258, AOSP 54. split_criteria.py reports it per half (OpenStack v3: 62 of
2,004 and 58 of 2,017). This is ordinary reviewing, not a host
feature: substring matching on short targets is noisy, and any threshold would be chosen after
seeing the data.
The frozen v2 corpora and every result computed on them stand as the record of v2; corpus v3 is what the Stage 1 figures are recomputed on.
OpenStack on v3 (split-criteria-openstack.json; v2's renamed split-criteria-openstack-v2.json):
frozen at pilot 532, train 4,006, dev 515, and verify --reproduce clean. The registered halves
hold 2,004 and 2,017 training examples, so the size floor becomes 2,004, and their suffix mix
differs by a total variation of 0.3187, which becomes the language-mix ceiling (v2: 2,158 and
0.357). Both are refixed here, before any Wikimedia split has been computed on either corpus
version. The matched suffix stays .py (715 and 1,248 rows; .rst 729 and 320).
The label audit could not have caught this, and its rates stand. 25 of the audit's 383 scored items carry a suggested edit; raters A and B called 20 and 23 of them valid, and the human 11 of 13 checked, since a suggested edit states its rewrite exactly, which is what the rubric's "valid" asks. On the 358 items v3 keeps the valid shares barely move: A 0.812 to 0.813, B 0.843 to 0.838, the human 0.809 (152) to 0.806 (139).