RESULTS

Scored arms

3 arms have a scored run on s2: one candidate and 2 negative controls. The leakage gate ran before the candidate was reported, and the scoring pipeline was checked against published System One board scorecards before either.

ArmRoleRowsErrorsPrediction sha256
control-modernbert-baseNEGATIVE CONTROL: bare ModernBertForMaskedLM, no trained head, zero-shot MLM yes/no readout30,31009d62074edd4ca545839b6f4246e4e7638804b3dc1c96cd2d940c8f1eae74a984
control-modernbert-largeNEGATIVE CONTROL: bare ModernBertForMaskedLM, no trained head, zero-shot MLM yes/no readout30,310046cbba9bab176aa69afcdd383025999ae112b20e201ea13d126b672ee282f33e
deberta-v3-prompt-injection-v2trained 2-class DeBERTa-v3 injection head; 512-token architectural limit30,3100927baa5ccc8bbf9b7885381ed50781264f848ab1c666e053166f9aab1721eeb4

Precision, recall, F1 and block FPR

Every cell below is counted from rows over the 3,817 scorable cases. Each arm appears at its shipped argmax decision and at its in-sample oracle threshold.

ArmOperating pointtpfpfntnPrecisionRecallF1Block FPR
control-modernbert-baseshipped argmax3391,941971,4400.14868421050.77752293580.2496318114870.5740905058
control-modernbert-baseoracle threshold 0.5774953651858118 (in-sample upper bound)2076992292,6820.22847682120.47477064220.3084947839050.2067435670
deberta-v3-prompt-injection-v2shipped argmax4283,20181800.11793882610.98165137610.2105781057810.9467613132
deberta-v3-prompt-injection-v2oracle threshold 0.9987551566979116 (in-sample upper bound)1741152623,2660.60207612460.39908256880.4800000000000.0340136054
control-modernbert-largeshipped argmax2592,0411771,3400.11260869570.59403669720.1893274853800.6036675540
control-modernbert-largeoracle threshold 0.4687906266262438 (in-sample upper bound)4142,751226300.13080568720.94954128440.2299361288530.8136645963
block every casetrivial baseline4363,381000.11422583181.00.2050317423001.0
allow every casetrivial baseline004363,381n/a0.00.00.0

Block false-positive rate at each arm's shipped operating point

Share of the 3,381 benign cases each arm blocks. For a guardrail this is the cost side of the decision, and it separates these arms more sharply than F1 does.

Cohort candidateMLM negative controlTrivial baseline, no model
0 0.2 0.4 0.6 0.8 1 block everything 1.0 deberta-v3-prompt-injection-v2 0.9468 control-modernbert-large 0.6037 control-modernbert-base 0.5741 block every case 1.0000
Table view (every plotted value)
ArmBlock FPRFalse blocksCorrect allowsRecall
deberta-v3-prompt-injection-v20.94676131322094063,2011800.9816513761467890
control-modernbert-large0.60366755397811302,0411,3400.5940366972477065
control-modernbert-base0.57409050576752441,9411,4400.7775229357798165
block every case1.03,38101.0
Every cell is counted from rows at the arm's argmax decision. Every value plotted here is read at build time from cohort-scoring/cohort-scores.json. The table view lists them all.

The candidate's block false-positive rate of 0.9467613132209406 means 3,201 of the 3,381 benign cases are blocked. Both controls sit lower, at 0.5740905057675244 and 0.6036675539781130, while blocking every case is 1.0 by construction.

F1 orders these arms differently from FPR and from AUC. Shipped F1 is 0.24963181148748159 for control-modernbert-base, 0.21057810578105782 for the candidate and 0.18932748538011696 for control-modernbert-large; length-controlled AUC is 0.5178408464714641, 0.82393827900586 and 0.49254286838283756 for the same three.

Scorer equivalence

The cohort harness imports the reference driver's own build_state and build_questions, so the prompts it sends are byte-exact and each row's context_sha256, context_bytes and truncated fields are byte-identical to the settled board rows. Before any cohort arm is reported, the pipeline re-derives 3 published System One board scorecards from their settled prediction bodies and matches the published figures.

What the gate checksResult
Published board scorecards re-derived from their settled prediction bodies before any cohort arm is reported3
Confusion matrices reproduced exactly, cell for cell2 of 3 (the third reference publishes no confusion matrix to check)
Largest absolute block-only F1 difference across the references1.30e-09
Ranking AUC reproduced on the reference that publishes one, absolute difference0.0
Arithmetic imported verbatim from the vendored shared modulesha256 97df17a30891446d

The reference arms belong to the System One programme and their scores are published on the System One Space, not restated here. What the gate establishes for this Space is that the scoring code reproduces known answers before it is trusted on a new arm.

The arithmetic

The 3 cohort scoring scripts import their arithmetic verbatim from benchmarks/system_one/reproduce/07-analysis/rescoring/remine.py, 22,586 bytes at sha256 97df17a30891446d94a9df923ec343a6c7bd29adea3435b0303e4604440d5a6f. That module is in the repository and git-tracked, and the copy the scoring run imported hashes to the same digest, checked on 2026-09-23. The digest is re-hashed at build time. Request construction is pinned the same way, through benchmarks/scripts/benchmark_run_system_one.py.

The leakage gate

Both ModernBERT arms are bare ModernBertForMaskedLM backbones with no trained head, scored by a zero-shot masked-token yes/no readout. The prediction stated before measurement was that both should land at chance. The null band for 436 positives and 3,381 negatives is [0.471205496131191, 0.528794503868809].

Two gates are named apart here. The parity gate is inside score_cohort.py and is the scorer equivalence above. The leakage gate is this programme's name for the pre-registered prediction about the controls plus the surface-cue diagnostic that tests it; the scoring code carries no gate under that name.

0.46228994190416495
control-modernbert-large, raw AUC
inside the band
0.6622467295653802
control-modernbert-base, raw AUC
above the band

Where the base control's excess comes from

The excess is the length cue. Four measurements.

How wide the two MLM controls' readouts are

Both controls are untrained ModernBertForMaskedLM backbones with no trained head, read by a zero-shot masked-token yes/no probe. Each has a median of exactly 0.5 and a few dozen distinct values across 3,817 cases.

5th to 95th percentile width, base5th to 95th percentile width, largeInterquartile width
0 0.05 0.1 0.15 0.2 0.25 0.3 modernbert-base 0.2297 0.0934 modernbert-large 0.1550 0.0779
Table view (every plotted value)
ControlDistinct valuesMinp05Medianp95MaxIQR widthSpearman against prompt length
control-modernbert-base530.2689410.4073330.5000.6370310.7185940.09338587430.5978675236
control-modernbert-large460.2337060.4225050.5000.5774950.6370310.07794752540.2035874960
Every value plotted here is read at build time from cohort-scoring/leakage-diagnostic.json. The table view lists them all.

Gate: passed. No surface-cue or label-leakage signal.

deberta-v3-prompt-injection-v2

protectai/deberta-v3-base-prompt-injection-v2 at revision 90c9989b1a342275dd0d1a95aad283c04e075671, 184,423,682 parameters, licence apache-2.0. 30,310 rows, 0 errors, prediction sha256 927baa5ccc8bbf9b7885381ed50781264f848ab1c666e053166f9aab1721eeb4.

0.8390509973434926
AUC on its single scalar
definitions A and B coincide
0.82393827900586
length-controlled AUC
mean within prompt-length quintile
0.9467613132209406
block FPR at argmax
3,201 false blocks of 3,381
0.48
oracle ceiling, in-sample upper bound
threshold 0.9987551566979116

Calibration

The arm emits block on 27,460 of 30,310 rows and 3,629 of 3,817 cases, 95.1%. At argmax its recall is 0.9816513761467890, its precision 0.1179388261228989 and its block FPR 0.9467613132209406. Its oracle threshold sits at 0.9987551566979116 over 864 distinct achievable thresholds. At 186.7 rows/min CPU-only under int8 the next step is threshold calibration on held-out data.

deberta-v3-prompt-injection-v2 at two operating points

The arm emits block on 27,460 of 30,310 rows and 3,629 of 3,817 scored cases (95.1%). Its oracle threshold sits at 0.9987551566979116.

Argmax at 0.5, the shipped pointOracle thresholdBlock FPR at argmaxBlock FPR at the oracle threshold
0 0.2 0.4 0.6 0.8 1 trivial floor 0.20503 Recall, argmax at 0.5 0.9817 Recall, oracle threshold 0.3991 Block FPR, argmax at 0.5 0.9468 Block FPR, oracle threshold 0.0340 Block-only F1, argmax at 0.5 0.2106 Block-only F1, oracle threshold 0.4800
Table view (every plotted value)
Operating pointBlock-only F1PrecisionRecallBlock FPRtpfpfntn
argmax at 0.50.2105781057810.11793882610.98165137610.94676131324283,2018180
oracle threshold 0.99875515669791160.4800000000000.60207612460.39908256880.03401360541741152623,266
The oracle threshold was fitted on the rows it is scored on, so every figure in its column is an in-sample upper bound. Every value plotted here is read at build time from cohort-scoring/cohort-scores.json. The table view lists them all.

The 512-token window

The cap is min(token_budget, max_position_embeddings − 2), which is 510. 17,202 of 30,310 rows exceeded it (56.75%); within the scored set 16,975 of 28,018 rows (60.59%) and 1,996 of 3,817 cases (52.29%) carry at least one truncated event. 58 cases have every event truncated. A row counted shrunk had its event state cut repeatedly to 82% of its length until it fit, so it lost context the model never saw.

Truncation does not track the arm's errors. AUC inside the truncated stratum is 0.8017085164830626 against 0.7771006013326832 untruncated, and F1 at the oracle threshold is 0.4799 against 0.4806. Recall and FPR do differ across the strata, and positive prevalence differs 5.4× between them. The mechanism is consistent with build_ids: the shrink trims event history while preserving the decision-relevant current tool call.

The per-row truncated boolean is a different thing: a corpus-level request-build flag, identical at 2,086 rows in all scored arms including the 16k-context controls.

DeBERTa's 512-token window, and whether it tracks the errors

The cap is min(token_budget, max_position_embeddings - 2) = 512 - 2 = 510, from score_arm.py:183. A row counted shrunk lost context the model never saw. AUC inside the truncated stratum is 0.8017085165 against 0.7771006013 untruncated.

AUC within the stratumF1 at the oracle thresholdPositive prevalence in the stratum
0 0.2 0.4 0.5 0.6 0.8 1 chance 0.5 truncated, 1,996 cases 0.8017 0.4799 0.1869 untruncated, 1,821 cases 0.7771 0.4806 0.0346
Table view (every plotted value)
Extent of truncationCountShare
Rows over 510 tokens in the full pass17,202 of 30,31056.75%
Rows over 510 tokens inside the scored set16,975 of 28,01860.59%
Cases with at least one truncated event1,996 of 3,81752.29%
Cases with every event truncated581.52%
Prevalence differs 5.4× between the strata, so raw error rates are not comparable across them. The F1 column is an in-sample upper bound. Every value plotted here is read at build time from cohort-scoring/cohort-scores.json. The table view lists them all.

What it is measured against

Against the trivial floor it clears 0.20503 by 0.005546363481504557. Against the cohort it has the highest length-controlled AUC of the 3 scored arms, and the highest block FPR of the three.

Comparison with the System One board's cascade guardrail arms is out of scope for this Space. Those arms are measured under a different protocol and are published on the System One Space.

Two-class arms

All 3 scored arms emit one scalar per event. Three consequences are recorded as facts about those arms.

Artifacts: cohort-scores.json, leakage-diagnostic.json, final-comparisons.json, from score_cohort.py, leakage.py and final.py.