Skip to content

Corpus

Qt's development pilot on its granted corpus: H1 supported on likelihood, K = 10

# research(2026-10). Qt's 22 development runs, the k-th on the k-th admissible partition at training seed k and N = 1,850, each chained partition_run -> decoder_check -> likelihood_score at the registered decoder (TIGRIS 298699 to 298764, pinned at faa8e8d), read by partition_pilot.py in admissible order (partition-pilot-qt-likelihood.json, partition-pilot-qt-rp1.0.json):

Qt's corpus under its grant: the count probe holds, the split qualifies, 40 partitions are admissible

# research(2026-10). Qt's months 2024-10 to 2025-10, fetched under the 2026-10-15 grant from the announced address, were built with build --fewer-requests (started at 13bd2a4, before the probe gate existed), then refined, deduplicated, split, frozen and verified (2026-10-16, 23:34), and backed up. The probe the 2026-10-15 entry made a precondition then ran from committed code (comment-count-probe-qt.json, from 8.47.98.37): none of the 300 zero-count rows it asked carried a comment and every control did, so the share of skipped changes with comments is bounded at 0.0099, under COUNT_PROBE_BOUND, and the build stands without a rebuild.

Qt's fetch under its grant, and the comment-count probe its build waits on

Qt's fetch under its 2026-10-15 grant finished the same day: the pilot, train and development months, 2024-10 to 2025-10, from the collector at the announced address, at 2 s, one client, with no stop. A first probe asked Qt for the comments of 60 changes its snapshots record at total_comment_count 0 and of 10 above zero: all 60 returned none and all 10 returned some. Sixty empty answers bound the share of zero-count changes that carry comments only at about 5% (95%, one-sided), too loose for a skip applied to about half of Qt's changes, and the script that wrote that result was edited after it ran, so the result is not kept.

Wikimedia's corpus v3 frozen; the dataset's funnel published

The 2026-10-01 entry calls the OpenStack and Wikimedia v3 corpora frozen, but only OpenStack's copy (corpus-v3/openstack on TIGRIS) carried the freeze manifest and splits; Wikimedia's held its raw, built and refined months alone. No result depends on it, since every partition job deduplicates the organization itself (placebo_corpus.py --dedup-org). The dedup, split, freeze and verify stages were run on a copy of corpus-v3/wikimedia at 2dad2a1: they keep 5,513 of 5,699 refined examples (117 exact copies and 69 near duplicates removed), split as 582 pilot, 4,184 train and 747 development, which is window-report-wikimedia-v3.json exactly, and verify passes. The manifest and splits were added to corpus-v3/wikimedia beside the files already there, byte for byte.

The label audit read on OpenStack's items alone

The audit sampled OpenStack and Qt alike, and the Stage 1 text quoted agreement pooled over all 383 items, so a published figure rested partly on Qt's review records, fetched before Qt granted permission. scripts/label_audit_by_org.py reads the committed agreement report again on one organization's items through the same function as the pooled reading (label_audit_agreement.readings), so every pair is read: the five labels, valid against the rest, outside names, the model raters on the human's items, the human pairs without the answers reported as slips, and the halves of the human check. The report keys labels by example id in sorted neutral-id order and slips by neutral id; the ids are rebuilt from that order, and the whole pooled reading is recomputed from them and refused unless every pair reproduces the report (all do, to 1e-12). Valid shares are the report's own per-organization rates.

Qt answers the permission request: details through gerrit-admin

Qt answered QTQAINFRA-8064 on 2026-10-14: the ticket is In Progress, and its assignee wrote that the purpose "sounds reasonable" and asked for the details to go to Qt's Gerrit administrators by email. The request sent to them the same day asks for the inline comments and revisions of changes from October 2024 to October 2026, the pilot through test windows (corpus/windows.py), fetched by one client at 2 seconds between requests, with a pause on any 5xx and the identifying User-Agent cli.USER_AGENT; no review text is published, and an author can ask to be removed.

Registration figures follow the registered decoder and corpus v3

# research(2026-10). Three figures on the registration pages and the Stage 1 manuscript came from different artifacts. Each now reads the one its registered setting produced: guided completion and the contamination table from contamination-openstack-6mo-with_context-rp1.0.json (penalty 1.0); the bf16 determinism statement from the 1.0 rerun (2026-10-08 entry), stated as status with the counts left to that entry; and leakage from window-report-openstack-v3.json, the corpus v3 build the frozen manifests count and neutral.py and project_windows.py cite. The manuscript's leakage paragraph quoted the earlier window-report-openstack.json build and is repointed to v3.

The contamination battery read against blind baselines: the windows separate without the model

# research(2026-10). scripts/contamination_blind.py, datasets/results/contamination-openstack-6mo-blind.json. The battery compares a pre-cutoff window with a post-cutoff one, and the windows differ in time as well as in exposure. Duan et al. (COLM 2024, arXiv:2402.07841) attribute membership attacks' apparent success on such splits to "a distribution shift, such as when members and non-members are drawn from the seemingly identical domain but with different temporal ranges", and Das, Zhang and Tramèr (IEEE SPW 2025, arXiv:2406.16201, read from the paper) show "blind attacks -- that distinguish the member and non-member distributions without looking at any trained model -- outperform state-of-the-art MI attacks", with a bag of words and date detection. The Stage 1 novelty review (papers#64) flagged that the battery reads a near-zero gap as inconclusive but has no rule for a gap away from zero.

Power at a test window's realised size implemented

"Fetch horizon" registers that a test window holding fewer changes than its simulation projected is reported beside its verdict with the simulation's power at the realised size. scripts/power_at_size.py computes it. It takes the test report and the simulation the report was read under, and refuses a simulation whose organization, K, projected size, calibration or bounds differ from the report's, a report at or above its projection, and a corpus whose rebuild does not give the simulation's pilot changes and partitions. It reruns the simulation's trials, at its seed, at the number of changes the cell was read on, at the lift that registered each level's bound and at the calibrated run shift. Neither the lift nor the shift depends on the test size, so no calibration or bisection is redone. It records the share of trials supported at each level and its Monte Carlo standard error, sqrt(p(1 - p) / trials), as Morris, White and Crowther (Stat. Med. 2019) ask of simulated performance. Power is at the registered bound, never at an observed effect. Both gates take these artifacts as powers, require one for every organization in below_projection and none for any other, check each Monte Carlo SE against its power and trial count, and report each level's power in the cell's size. partition_sensitivity.py now records its seed, and the pool and partition rebuild both scripts use is one function (pools).

A test-window read takes its levels, cells and spread target from the registration

What a test-window read still took from the command line (the Holm family's size, the cell count its bound was simulated for, the spread target, and which development pilot calibrated the simulation) now comes from the registration. registered_read(org) in sphragis/experiment/decomposition.py gives a Gerrit organization the Holm levels of design(ADMITTED_ORGANIZATIONS) and its H1 cell count, a GitHub member 97.5% alone and one cell, and both the spread K was sized on (sizing_bound_90, as "Stated power" states the bounds). ADMITTED_ORGANIZATIONS is None until one commit freezes the admitted set before any test window, and a read is refused until its organization is frozen. partition_pilot.py derives these and refuses a flag that differs. The report records the spread targets recomputed from the --sizing pilot (spread_targets in partitions.py, shared with partition_sensitivity.py) and those the simulation was calibrated to, and require_test_read and the gate refuse a pair that differ beyond a relative 1e-9 (the chi-squared bounds pass through libm, whose last bits can differ between the cluster and the reading machine). That ties the two by content without rerunning the simulations. Once ADMITTED_ORGANIZATIONS is frozen, decomposition_gate refuses any other admitted set. require_test_read checks the report's levels, intervals, spread target and cell count against registered_read. replication_gate now takes each member's simulation artifact and reads the bound from it, where it took a bound from its caller and could only check that bound against the one the cell recorded. With OpenStack and Wikimedia admitted and no H2 cell, the family is H1 alone and a test read is at 95%; both levels stay in the simulations, so Qt and Chromium's admission changes nothing that is already computed. Decided here, and written into the Pass rule: the registration described only the two-hypothesis case ("both are read on a two-sided 97.5% interval"), and a review read that as requiring 97.5% even with no H2 hypothesis. Holm with one hypothesis gives it the whole family-wise level, one-sided 0.025, which is what decomposition_gate has computed since it was written (holm_levels(len(confirmatory))); reading H1 at 97.5% then would spend power on a hypothesis that does not exist. Stage 1's analysis section gets the same sentence.

The readings across organizations implemented, before any test window

sphragis/experiment/across.py, and four fields on every H1 cell from h1_over_partitions: meaningful (lower bound above the SESOI, per level), p_one_sided (the share of the cell's own bootstrap draws at or below zero, the registered p-value), bootstrap_se (the draws' standard deviation, the cell's weight in the summary) and resamples (the draw count, which the reading checks against the level). Choices made in the implementation, each before any reading exists:

Decided: H1 stays intersection-union over the admitted Gerrit organizations; the GitHub organizations are a registered replication on a second platform

AJ delegated the route spec's two open questions (highest-quality research, decided from current practice). Both are decided before any GitHub organization has a corpus beyond its pilot month and before any test window is fetched. This replaces the 2026-10-01 rule that listed the GitHub organizations as candidates behind Qt and Chromium.

OpenStack's simulation on the twelve-month window: two-cell bounds +0.0248 and +0.0234

partition-sensitivity-openstack.json, SPORC job 21794711 (CPU only, pinned at 89753ef), in place of TIGRIS job 210563, which was cancelled when the TIGRIS queue slipped. It replaces the artifact of 2026-09-30, which ran on the ten-month 1,635-change window at 300 trials per step. Its placebo input is read from the cluster data root; that file, redacted, is byte-identical to the committed rq1-placebo-openstack-v3.json. 1,000 studies per power step and 4,000 null studies, K = 24, N = 1,850, and the twelve-month projection (2,017.6 changes, simulated at 2,017, rounded down), with sigma_run calibrated on the pilot's 206 changes:

Wikimedia's simulation at the lower-bound window: two-cell bounds +0.0268 and +0.0246

partition-sensitivity-wikimedia.json, SPORC job 21794712 (CPU only, pinned at 8c87f28 with the arguments of OpenStack's rerun), in place of TIGRIS job 211288, which was cancelled when the TIGRIS queue slipped. Its placebo input is read from the cluster data root; that file, redacted, is byte-identical to the committed rq1-placebo-wikimedia.json. 1,000 studies per power step and 4,000 null studies, K = 16, N = 1,850, the 2,848-change lower-bound window, and sigma_run calibrated on the pilot's 429 changes:

Planned before any run: an open-weight rater at pinned weights on the label audit

The October 2026 hardening plan (ROADMAP Plan H, on the GitHub-route branch): raters A and B ran through an API, so the audit cannot be rerun on them once they are retired. scripts/label_audit_open_rater.py adds a rater anyone can rerun: Qwen3-14B (Apache 2.0, revision 40c0698), greedy, thinking off, labelling the same 383 audited examples under the committed v2 rubric and shown only the fields A, B and the human saw. Its agreement with each of them (raw agreement, kappa, AC1 and specific agreement, on the five labels, collapsed to valid or not, and on outside_names) is read with the audit's own statistics, each pair on the items both raters answered (the human's 152 checked items for the human pair). Reading, fixed now: it is adopted as the audit's reproducible rater if every item parses and its label kappa with the human reaches the lower end of the locked human~A label interval in label-audit-v2.json (the script reads it from there and records the decision); otherwise it is reported as tried and not adopted, as the decision model was (2026-09-30). That bar is lenient, since rater A agrees with the human less than with rater B, which is the reason to report all three pairs beside it. The items are the refined examples the audit sampled, read through refined_examples; an audited example a later refinement removed (the audit drew from corpus v2) is left out rather than rebuilt, listed by id, and every pair is read on the items that remain. The committed rubric differs from the raters' copy only in its worked example (invented here, a corpus item there).