Skip to content

Correction: every successor is a rework, and corpus v2 is refrozen under the corrected rules

Retracted: the rebase-only-successor finding in the two entries above (0.34% of OpenStack's kept examples and 1.65% of Qt's in the audit, 20 and 189 in the v2 table). It was an artifact of the audit's own lookup, which keyed a change's revisions on its Change-Id. A cherry-pick carries the Change-Id to another branch, so a stable-branch copy that was only rebased lent its kind to the original. Resolved per change (by number, else by Change-Id, project and creation time together), every OpenStack successor and 11,444 of Qt's 11,448 are reworks; the other 4 are changes that cannot be told apart and are kept and counted. The rule stays as a guard, and now removes nothing. A review of the v2 branch caught it. Rebase edits carried inside a reworked successor remain the open question the audit entry names.

Two more corrections from that review. A comment is automated only when every paragraph of it matches a template, since the Sanity Bot joins its complaints for one line with a blank line; and the Sanity Bot's templates are the union over every version of its hook in effect across the corpus span, not the current version alone.

organization built bot comments removed examples resting only on bots acknowledgement only refined
openstack 5,959 0 0 13 5,946
qt 11,448 1,747 1,304 6 10,138

Recognised in Qt: Qt Sanity Bot 1,355, flake8 lint output 338, Qt QUIP-23 security review integration 54 (data-audit-qt.json).

Refrozen as corpus v2 under these rules; the manifests of the entry above are replaced, and each manifest now records the build and label rule digests, which verify checks:

organization pilot train dev
openstack 600 4,322 565
qt 1,146 7,563 897

Re-read. Qt's organizational contrast without automated examples is +0.0171 [-0.0034, +0.0374] (5.7% of its held-out examples removed), against +0.0316 [+0.0089, +0.0562] as registered; at rank 256, +0.0164 [-0.0051, +0.0384]. Qt's firing placebo half, qt-a, is +0.0288 [+0.0019, +0.0555] without them. The finding of the audit entry stands: nearly half of Qt's organizational effect was its lint bot, and the half-split survives (bot-sensitivity-*.json). OpenStack train into dev at Jaccard 0.7 is 1.06%, unchanged (window-report-openstack.json).

Leakage re-measured (sibling-leakage.json), Jaccard 0.7:

evaluated half own sibling foreign
openstack-a 0.0031 0.0031 qt 0.0000
openstack-b 0.0132 0.0088 qt 0.0000
qt-a 0.0020 0.0020 openstack 0.0000
qt-b 0.0079 0.0000 openstack 0.0000

All below 2%. The v2 entry's remark that openstack-a's sibling rate exceeded its own was read from the refinement that dropped the 20 examples in error, and does not survive: the two are equal. The threshold remains the property to rely on, not the ordering.

AOSP audited the same way before RQ2 trains on it (data-audit-aosp.json): 5,133 built, no comment matching a registered bot, every successor a rework, and a repeated-text queue holding only reviewer language ("typo" on 25 changes, "2024" on 24). 5,130 refined.

The build and the label rules are now separate stages with separate digests. Review of the fixes found that the build applied the bot templates and the successor rule that refine applies too, and that a change to the build's own rules moved one rules version while refine re-ran only the label rules: a refreeze would have certified the old build's output, a new bot template would have meant refetching every organization, and refine, which only removes, could not undo a build that had removed too much. The build now keeps only what needs the network or the comment's author (the author, service-account and acknowledgement filters, well-posedness, the scrub) and records the build rules each month was built under; every label rule is refine's, and a change to one is a re-refine from disk. The loader refuses a month built under other build rules, and each manifest records both digests for verify.

The months on disk were built before the build recorded anything, so they were accepted once without a rebuild (python -m sphragis.corpus stamp, limited to the 54 snapshots listed in sphragis/corpus/stamped-months.json and to the build rules named there), on this evidence: every month's drop profile carries exactly the drop reasons of the build that added the well-posedness filter, and that filter and the fetchers are unchanged since; that build applied neither the bot templates nor the successor rule, so refine applies both to what it kept, and its acknowledgement list lacks only "Acknowledged", which refine adds; the build's other later additions are the service-account filter, which the raw snapshots give nothing to act on (they hold no account tags), and the change number, which names a change and removes none; and the scrub's one change, chained addresses, is reapplied by refine as a sweep of domains left behind a pseudonym (one AOSP comment). One month differs: Qt's 2024-10 was built before prompt context was added, and its 582 examples carry none. They are the same examples with the same text; context is in no prompt; the month is the pilot window, which no contrast trains or evaluates on; the contamination battery refuses a row without context and the label-audit sample draws from train and dev. The stamp records the count in that month's build record.

Files handed to a job by path now fail closed. Project, client, contamination and planted corpora are cut with a record of the rules, their hash and the sources they came from beside each file, and every job that reads one (the client runs, the project and calibration contrasts, the contamination battery, the pilot replay and the prompt probe) refuses a file without a matching record, or one whose source has since moved or gone stale; --legacy-corpus (LEGACY_CORPUS=1 in the sbatch scripts) reads an older one to reproduce an earlier result, and the output records it. Every corpus root's files are now ignored by an allowlist, manifests and seals excepted, so a later stage's text cannot be committed by omission.

Open. The committed contamination results carry the scored half of each example's rewrite as reference text, so code from the corpus is in git; it predates these rules and stays until the battery can be re-read from example ids and hashes, which it must before the repository is public.