Skip to content

Corpus v2: the audit's rules, applied at the source and to what was already built

The fixes are in the builder, so every corpus collected from here on is clean at collection, and in a new refine stage that brings corpora built before them to the same rules from their own examples and raw snapshots, with nothing refetched.

Bots are recognised from their source, not from a guessed list. Identity first: Gerrit tags service accounts SERVICE_USER, and the scrub used to replace every account object with its pseudonym alone, discarding that tag at ingestion; it now keeps it. Where a host does not expose the tag, and for corpora collected before, the fallback is each bot's own message templates: sphragis/corpus/automated/qt-sanity-bot.json holds all 101 complaints git-hooks/sanitize-commit posts, extracted from qt/qtrepotools at 309df8d5eefb by scripts/extract_bot_templates.py (spelling complaints pinned to the exact shape the code writes, so a reviewer's "a -> b?" is not taken for the bot); Qt's QUIP-23 integration posts one fixed message on files carrying a Qt-Security header; and flake8 output is posted inline on pyside/pyside-setup. The earlier prefix scan had missed the last two and most of the spelling complaints. Recognised in Qt's built examples: Qt Sanity Bot 1,347, flake8 lint output 338, Qt QUIP-23 security review integration 54; in OpenStack's, none. Templates match whole comments. Every recognised string was inspected, and a repeated-text queue of the rest, which a new bot would surface in, holds only reviewer language.

organization built bot comments removed examples resting only on bots rebase-only successor acknowledgement only refined
openstack 5,959 0 0 20 13 5,926
qt 11,448 1,672 1,240 189 6 10,013

Refrozen as corpus v2 (the v1 manifests stay in git history, and every earlier result cites them):

organization pilot train dev
openstack 600 4,304 565
qt 1,134 7,456 897

Re-read under the registry rather than the prefix list: Qt's organizational contrast is +0.0182 [-0.0022, +0.0388] with 0.055 of its held-out examples removed, the same reading as before.

What else changed with it. Everything that trains or measures now reads refined examples through one loader (sphragis/corpus/load.py) that refuses a refinement made from other examples or under other rules; nine scripts had read the built files directly, and a fix that reached only the CLI would have left them on the old data. A placebo's halves are derived corpora carrying the rules version they were cut under. The rules version is a digest of the registries and the acknowledgement list, so it cannot fall behind them. make data-audit re-runs this audit on any corpus and writes data-audit-<org>.json. The scrub treats a chained address as one.

Not yet done: the pilot adapters were trained on v1, including the bot examples; retraining on v2 waits on Qt's answer about access, since training is where the Qt data is used again. RQ2's project corpora are rebuilt from v2 by project_corpora.py before its next run.

Leakage re-measured on v2 (sibling-leakage.json, window-report-*.json regenerated). OpenStack train into dev at Jaccard 0.7 is 0.0106, unchanged. Sibling-half rates at Jaccard 0.7:

evaluated half own sibling foreign
openstack-a 0.0030 0.0060 qt 0.0000
openstack-b 0.0137 0.0046 qt 0.0000
qt-a 0.0055 0.0018 openstack 0.0000
qt-b 0.0030 0.0000 openstack 0.0000

All below 2%. openstack-a's sibling rate exceeds its own half's, so the threshold, not an ordering between the own half and the sibling, is the property to rely on.