Get in Touch
AI content toolsfrom Opace

Measurement paper · four declined capabilities

Built, measured, declined

Four capabilities that competing tools offer were implemented here, measured properly and rejected on the numbers. A 194 MB surprisal model that scores backwards on the models people actually use. The published zero-shot family, unoperable at a defensible false-positive budget. Per-sentence highlighting, the most requested feature in the category. And a retrained classifier that fixed the defect it was aimed at and was rejected anyway.

On this page
  1. The finding
  2. The GPT-2 surprisal tier
  3. The published zero-shot family
  4. Per-sentence highlighting
  5. Two retrains rejected
  6. What this does not prove
Published
30 August 2026
Measured
Re-verified against source 30 August 2026
Signal set
Rule pack en-signals 2026.08.6 · tier-2 GPT-2 surprisal head, gated off in source
Corpus
1,896-sample provider-eval set · 600 + 600 fresh long-form · 2,174 sentence deletions across 57 documents

01 / The finding

Four capabilities were built, measured and declined

Every one of these was implemented on this project’s own corpus rather than cited from a paper, and every one has its measurement below, including the cases where the declined capability turned out to be better than the thing that shipped on one axis.

Tier-2 surprisal head, markdown-stripped prose0.4962

AUROC on 1,896 provider-eval samples. Chance is 0.500. On Anthropic 2024-25 text the same head reads 0.1579, which is backwards.

Best zero-shot method at an operable budget10.3%

Surprisal kurtosis, at a 1% human false-positive budget on 600 machine and 600 human fresh long-form documents. Six of the nine methods catch nothing at all there.

Sentence deletions behind the highlighting decision2,174

Across 57 documents. Barely a third of sentences push their document towards a machine reading, and no single property of a sentence predicts its contribution.

A detector that scores backwards is worse than no detector.

The tier-2 surprisal head was fitted on 330 AI documents, of which 120 were HC3 GPT-3.5 text and 60 were GPT-2 continuations generated locally. It is a GPT-2 and GPT-3.5 detector, and 2026 models are not what it learned.

02 / The surprisal tier

The GPT-2 surprisal tier, and why it was retired rather than deferred

The second tier of the original stack was a 124M-parameter GPT-2 observer with a 22-coefficient logistic head over surprisal statistics. It read how surprised a small language model was by each token, and turned the shape of that surprise into a probability. It was gated off and its download was never shipped. The tier is off in source: src/lib/local-signals/model-store.ts sets TIER2_ENABLED = false, so no GPT-2 file is fetched, hashed or cached by any visitor.

Every document in the provider-eval set was scored twice, once as a raw chat export and once after markdown normalisation. That second column is the one that matters, because a detector that only works while the formatting is still attached is detecting the interface a document travelled through.

Measurement conditions

Corpus
1,896-sample provider-eval set: 1,727 AI documents across 12 provider-and-era slices, 169 held-out human documents. Every document scored raw and again after markdown normalisation.
Runtime
GPT-2 small (124M) observer for tier 2; e5-small int8 for tier 3; the en-signals rule pack at version 2026.08.6 for the rules row.
Measured
30 August 2026
Also
AUROC is threshold-free, so no operating point applies to any of the three tiers below.
Figure 1 What each tier is worth once the markdown comes off AUROC for the same three tiers on the same 1,896-sample provider-eval set: 1,727 AI documents across 12 provider-and-era slices and 169 human documents, scored first as raw chat exports and again after markdown normalisation. The rules row is the en-signals pack at version 2026.08.6; a pack bump invalidates it. AUROC is threshold-free, so no operating point applies to any of these six values.
AUROC of three detection tiers on raw and markdown-stripped prose 0.4 0.55 0.7 0.85 1 chance, 0.500 Raw chat export Markdown stripped 0.9302 0.7108 Writing rules 0 MB · en-signals 2026.08.6 0.9573 0.9498 Tier-3 classifier 34 MB · e5-small int8 0.7050 0.4962 Tier-2 surprisal head 194 MB · GPT-2 124M Value axis starts at 0.4, not zero
AUROC by tier on raw and markdown-stripped prose
TierDownloadAUROC, rawAUROC, markdown stripped
Writing rules, en-signals:2026.08.60 MB0.93020.7108
Tier-3 classifier, e5-small int834 MB0.95730.9498
Tier-2 GPT-2 surprisal head194 MB0.70500.4962

services/local-engine/research/stripped-eval/STRIPPED-PROSE-EVAL.md §0. That table's detection column for the rules row is withdrawn and must not be quoted: it was measured on a corpus whose human half was 76% encyclopaedic and question-and-answer text, a register these rules barely react to. Only the AUROC values, which are threshold-free, are used here. The rules tier's current figures are 45.1% of AI writing against 24.8% of human writing on the fresh 5,558-document corpus.

0.4962 is chance. The per-slice pattern shows the head is not merely weak but pointed the wrong way on the models that matter. Its one strong slice is openai 2022-23 at 0.9425, and that is the whole explanation.

Figure 2 The tier-2 inversion, slice by slice Tier-2 AUROC on markdown-stripped prose for each provider-and-era slice of the 1,896-sample provider-eval set, ordered ascending. Bars start at the chance line: a bar drawn to the left of 0.500 is a slice where the signal runs backwards, so the head scores machine text as more human than human text. n = 150 per slice except openai 2024-25, where n = 77. Threshold-free, so no operating point applies.
Tier-2 surprisal head AUROC by provider-and-era slice, drawn either side of the chance line 0.00 0.25 0.50 0.75 1.00 Direction anthropic 2024-25 n = 150 0.1579 runs backwards deepseek 2025-26 n = 150 0.1612 runs backwards openai 2025-26 n = 150 0.1944 runs backwards anthropic 2025-26 n = 150 0.3218 runs backwards mistral n = 150 0.3225 runs backwards google 2025-26 n = 150 0.4954 runs backwards grok n = 150 0.5413 forwards google 2024-25 n = 150 0.6568 forwards openai 2024-25 n = 77 0.6794 forwards meta 2025-26 n = 150 0.6954 forwards meta 2024-25 n = 150 0.8756 forwards openai 2022-23 n = 150 0.9425 forwards chance, 0.500
Tier-2 stripped-prose AUROC by provider-and-era slice
SliceDocumentsAUROC, markdown strippedDirection
anthropic 2024-251500.1579runs backwards
deepseek 2025-261500.1612runs backwards
openai 2025-261500.1944runs backwards
anthropic 2025-261500.3218runs backwards
mistral1500.3225runs backwards
google 2025-261500.4954runs backwards
grok1500.5413forwards
google 2024-251500.6568forwards
openai 2024-25770.6794forwards
meta 2025-261500.6954forwards
meta 2024-251500.8756forwards
openai 2022-231500.9425forwards

STRIPPED-PROSE-EVAL.md §2.3. The head was fitted on 330 AI documents, 120 of them HC3 GPT-3.5 text and 60 GPT-2 continuations generated locally, which is what the openai 2022-23 slice is reading.

One figure from the same table needs reporting and then setting aside. The tier scores AUROC 0.7738 on an aggressive list-flattening variant, better than on raw text. That variant inserts a full stop at the end of every unterminated line, AI text has far more such lines than human text, and the tier reads punctuation-sensitive surprisal. The score is measuring the transformation, not the writing.

What it scored before it was retired, and why that is not a performance claim

services/local-engine/research/models/ensemble.json records the ensemble that gated the tier off: flag if the surprisal probability reaches 0.76 or the classifier probability reaches 0.857. Against the cycle-1 classifier alone it lifted a small evaluation from 2/23 to 6/23 on clean prose and 2/30 to 8/30 on all-AI samples, at a cost of 2 of 116 human false positives (1.73%), and it raised the one-off consent download from 34.5 MB to 238.8 MB.

Measured at a rule that no longer ships

Corpus
23 clean-prose documents, 30 all-AI samples, 116 human documents. Neither the runtime nor the corpus name is recorded in the source file.
Retired flag point
0.76 surprisal or 0.857 classifier
Detector
tier3-cycle2-e5small-fp32.onnx, SHA-256 e313ab00de1fffd2…4d2788d
Runtime
Not recorded in ensemble.json.
Measured
30 August 2026
Also
Source: docs/CAPABILITIES.md §4.3. These denominators are 23 and 30 documents. They belong on this page as the reason the tier was gated, and nowhere as a performance claim.

The rule that ships today is 0.9855 / 0.9763. The figures under this stamp answer the same question at a flag point this tool no longer uses, and they are not a description of the tool as it runs now.

The stripped-prose AUROC of 0.4962 is what turned a deferral into a retirement.

The part that makes this honest rather than triumphant

The same report insists that the surprisal features separate the classes strongly even though the head built from them sits at chance. On stripped prose, div_skew reaches Cliff’s δ = 0.770 and div_kurt δ = 0.761, second and third behind the classifier itself. Refitted, the 22 features reach cross-validated TPR 78.4% ±0.8 at a 3% training-fold budget, with realised held-out false positives of 5.1%, and they produce 0 of 10 business-marketing false positives where the classifier produces 41–66% at comparable budgets.

The features work. The weights are stale. The refit was never done.

The honest statement is that the tier was retired on the evidence available, not that surprisal is worthless. The zero-business-marketing figure rests on ten documents with a Wilson upper bound of 26%, so it is suggestive and nothing more.

03 / The zero-shot family

The published zero-shot family, reimplemented and measured

Perplexity, GLTR, DetectGPT’s log-rank baseline, Fast-DetectGPT and DivEye’s surprisal-diversity moments are the standard published methods for detecting machine text without a trained classifier. All were implemented and run on this project’s own corpus rather than cited from their papers, with one forward pass per document yielding every statistic.

Measurement conditions

Corpus
600 machine and 600 human fresh long-form documents.
Runtime
Observer model GPT-2 small (124M), int8 with an fp16 language-model head, 512-token cap.
Measured
30 August 2026
Also
AUROC is threshold-free. The detection column is single-method detection at a 1% human false-positive budget. Source: SIGNAL-SCIENCE.md §5.1.
Figure 3 Nine published zero-shot methods: what they separate, against what they can be operated at 600 machine and 600 human fresh long-form documents, GPT-2 small (124M) int8 observer with an fp16 head, 512-token cap. AUROC is threshold-free; the second series is detection at a 1% human false-positive budget, rescaled onto the same 0–1 axis so that 10.3% plots at 0.103. Six of the nine detect nothing whatsoever at that budget, and their 0.0% is a measured zero rather than a missing value.
AUROC and detection at a 1% false-positive budget for nine zero-shot detection methods 0.00 0.20 0.40 0.60 0.80 1.00 Surprisal kurtosis DivEye diversity moment 0.766 10.3% Surprisal skew DivEye diversity moment 0.763 0.0% Surprisal autocorrelation DivEye diversity moment 0.757 4.5% Mean predictive entropy observer next-token entropy 0.746 0.0% GLTR, top-100 share tokens in the observer top 100 0.735 0.0% Mean log rank DetectGPT baseline 0.728 0.0% Log perplexity classic baseline 0.715 0.0% Fast-DetectGPT curvature floor under a 124M observer 0.545 14.8% Degenerate self-Binoculars one-model proxy, not Binoculars 0.502 0.0% chance, 0.500 (AUROC series only)
AUROC, threshold-free Detection at a 1% false-positive budget, rescaled onto the same axis
AUROC and detection at a 1% false-positive budget for nine zero-shot methods
MethodAUROCDetection at a 1% false-positive budget
DivEye-inspired: surprisal kurtosis0.76610.3%
DivEye-inspired: surprisal skew0.7630.0%
DivEye-inspired: surprisal autocorrelation0.7574.5%
Mean predictive entropy0.7460.0%
GLTR, share of tokens in the observer’s top 1000.7350.0%
Mean log rank (DetectGPT baseline)0.7280.0%
Log perplexity, the classic baseline0.7150.0%
Fast-DetectGPT curvature (floor under a 124M observer)0.54514.8%
Degenerate self-Binoculars (one-model proxy, not Binoculars)0.5020.0%

SIGNAL-SCIENCE.md §5.1. The 0.502 row is a degenerate one-model proxy and is not Binoculars, which was never implemented here. Fast-DetectGPT’s 0.545 is a floor under a browser-deployable observer, not the published result.

The gap between the two series is the argument. These methods separate the two populations on average and cannot be operated at a threshold a responsible tool could ship. Their machine and human distributions overlap so heavily that the top human percentile sits above almost the entire machine distribution.

Two of the rows carry corrections that are more interesting than the ranking, and both are set out in full in the limits below: Fast-DetectGPT at 0.545 is a floor under the weakest possible observer rather than a refutation of a paper that reports around 0.93, and the 0.502 row is a degenerate one-model proxy that must never be quoted as Binoculars’ score.

The founding assumption is inverted for 2026 models

Machine text has higher GPT-2 perplexity than human text here: median log-perplexity 3.68 for machine documents against 3.31 for human ones, holding in every register measured. The family was built on the idea that machine text is what a language model finds predictable. Against a 2019 observer, 2026 models write with vocabulary and phrasing that GPT-2 finds less expected than human web prose.

DivEye’s central claim survives

Its argument is that the diversity of the surprisal sequence separates the classes better than its mean. Measured here, the diversity moments — kurtosis 0.766, skew 0.763, autocorrelation 0.757 — beat mean log perplexity at 0.715 and beat every GLTR bucket. That is a 2026 confirmation of a claim its authors could not have tested on 2026 models, on data they have never seen.

04 / Per-sentence highlighting

Per-sentence highlighting, refused on a measurement

Highlighting the machine-written sentences is the single most requested feature in this category and several products offer it. This tool does not. Every sentence was deleted in turn from 57 documents and the document re-scored: 2,174 deletions, each one a measurement of what that sentence contributed.

Measurement conditions

Corpus
57 documents, every sentence deleted in turn and the document re-scored: 2,174 deletions in total.
Runtime
Occlusion sweep over the deployed classifier; the four figures below are properties of the attribution distribution, not detector verdicts.
Measured
30 August 2026
Also
Sources: docs/MEASURED-FINDINGS.md §3 and SIGNAL-SCIENCE.md §4.2, raw values in signal-science/results/model-probe.json.
Sentence-occlusion results over 2,174 deletions across 57 documents
MeasurementValue
Sentences that push their document towards “machine”35.9%
Share of total absolute attribution carried by the top fifth of sentences51.8%
Correlation between a sentence’s position and its attribution+0.027
Strongest correlation between any single sentence property and its attributionρ = 0.125

2,174 sentence deletions across 57 documents. No operating point applies: these describe the distribution of attribution, not a verdict.

Barely a third of sentences push their document towards a machine reading. Evidence is somewhat concentrated, with the top fifth carrying about half of it, but not in one or two giveaway lines. Position tells you nothing, so the model is not simply reading the opening. And nothing about a sentence in isolation predicts its contribution: the best single predictor manages ρ = 0.125.

The tool can say what kinds of document score high. It cannot reliably say which sentence did it.

Sentence-level attribution inside a 512-token transformer is unstable by construction, because deleting a sentence changes the context of every sentence around it. A per-sentence highlight would present that instability as evidence, against a named person’s writing.

05 / Two retrains

Two retrains rejected

Cycle 3 fixed what it was aimed at

Cycle 3 targeted short text and lexical repetition, and it fixed both. At matched false positives against the shipped model: 100-word detection 11/57 → 33/57, 300-word 44/61 → 57/61, and detection on samples of 300 words or more in the 0.42–0.55 type-token-ratio band 163/280 → 256/280.

It was rejected on two rows. Long-form detection fell 883/922 → 863/922, McNemar p = 0.00018. Human fiction false positives rose 23/260 → 29/260, and fiction had been named in the brief as a register that must not get worse.

Cycle 4b was better on long-form and worse where it counted

Cycle 4b was trained on a fuller corpus, including 177 long documents reaching 6,618 words against a corpus that previously topped out at 3,061. It is better than the shipped model on long-form detection, at 902/922 against 883/922, and it matches the best fiction result available. It was rejected on one row: 100-word detection 2/57 = 3.5%, worse than the shipped model’s 11/57 = 19.3%. Adding long documents moved the weighted mass away from the short band far enough to undo the gain that the whole exercise existed to produce.

Cycle 3 and cycle 4b against the shipped model, each at its own refitted operating point
RowShipped modelCycle 3Cycle 4b
100-word detection11/57 (19.3%)33/572/57 (3.5%)
300-word detection44/6157/61not reported
300+ words, TTR 0.42–0.55163/280256/280not reported
Long-form detection883/922863/922 (McNemar p = 0.00018)902/922
Human fiction false positives23/26029/260matches the best available
Fitted temperature0.8324 (cycle 2)1.20952.0325

Cycle 3’s and cycle 4b’s figures are at each model’s own refitted operating point. Source: docs/measurements/TWO-AXIS-RETRAIN.md §1 and §13.

The shipped pair cannot be carried across a retrain.

The fitted temperature changes with the model: cycle 2 runs at 0.8324, cycle 3 at 1.2095, cycle 4b at 2.0325. Comparing two models at one number would be comparing a rule change with a calibration change.

06 / Limits

What this does not prove

Binoculars was not implemented, and 0.502 is not its score.

Binoculars requires two different models, an observer and a performer, and only one language model is available offline here. With the same model in both roles the ratio degenerates, and that degenerate proxy is what self_binoculars measures at AUROC 0.502. That number must never be quoted as Binoculars’ score. Its published 79% at a 5% false-positive rate stands unchallenged by anything on this page.

Fast-DetectGPT’s 0.545 is a floor for the method, not a refutation of it. The paper uses far larger scoring models, and its January 2026 update uses a Llama-3-8B pair; GPT-2 small is the weakest possible observer. Its own paper reports around 0.93. The publishable claim here is narrow: the browser-deployable version is not viable.

The surprisal strand rests on 169 human documents, a corpus this project’s own records identify as having caused three retracted claims. It is 76% encyclopaedic and question-and-answer text, which contributes almost no false positives at any threshold and dilutes every rate measured against it. The direction of the tier-2 result is not in doubt; its precision is.

The sentence-occlusion strand rests on 57 documents. Enough to rule out a clean per-sentence signal, not enough to characterise the distribution of attribution.

The retrain figures are not comparable to the shipped operating point, for the calibration reason set out above.

The rule-pack figures are tied to one pack version. The 0.9302 and 0.7108 AUROC values are measured on en-signals:2026.08.6. A pack bump invalidates them and they should not be carried forward without re-measurement.

SynthID could not be tested at all, and saying so is the finding. It is a generation-time watermark: none of this corpus was generated with it enabled and there is no detector key. A post-hoc text detector cannot evaluate it.

Provenance

Source file and section for every figure on this page
FigureFileSection
Three-tier AUROC, raw and markdown stripped; 1,896-sample provider-eval setstripped-eval/STRIPPED-PROSE-EVAL.md§0
Per-slice tier-2 AUROC; the 0.7738 list-flattening variantSTRIPPED-PROSE-EVAL.md§2.3
Cliff’s δ 0.770 and 0.761; refitted TPR 78.4% ±0.8; 0 of 10 business marketingSTRIPPED-PROSE-EVAL.md§2.3
Retired 0.76 / 0.857 ensemble; 6/23, 8/30, 2/116; 238.8 MB downloadresearch/models/ensemble.json, docs/CAPABILITIES.md§4.3
Nine zero-shot methods, 600 + 600, GPT-2 small int8 observersignal-science/SIGNAL-SCIENCE.md§5.1
Median log perplexity 3.68 against 3.31SIGNAL-SCIENCE.md§5.2
2,174 sentence deletions across 57 documents; 35.9%, 51.8%, +0.027, ρ = 0.125docs/MEASURED-FINDINGS.md, SIGNAL-SCIENCE.md§3, §4.2
Cycle 3 and cycle 4b rows; fitted temperatures 0.8324 / 1.2095 / 2.0325docs/measurements/TWO-AXIS-RETRAIN.md§1, §13
Tier 2 gated off in sourcesrc/lib/local-signals/model-store.tsTIER2_ENABLED

Every file named above ships with the open measurement repository, so any figure on this page can be re-run rather than taken on trust.

Read on

What was declined is one half. What the shipped model does is measured the same way.