The detector wins by waiting

Three views of the same mechanism, from the study data. The watermark accumulates statistical confidence as text gets longer, so an attacker has to insert proportionally more to keep the signal scrambled — but not enough more. Across every model and every context length tested, out to 1,048,576 tokens, a 40% insertion rate drives the detector below threshold with no exceptions. The attack’s cost rises with length; it never overtakes.

1 · Watermark strength rises with context

gpt-oss-120b, one 32k generation per domain scored at 2k / 8k / 32k prefixes. The detector's z-score grows roughly like √n while per-token signal stays flat, so longer text is harder to attack, not easier. Prose carries the strongest mark at every length.

0204060threshold z=2.332k8k32kcontext length (tokens, log scale)detector z-score120b prose120b code120b reasoningV4 prose

2 · The attack has to work harder as context grows

gpt-oss-20b, 240-cell benchmark (code domain, to 8k). Each cell is how many of 8 random insertion seeds drove the detector below threshold. 10% insertion clears 1k tokens but fails by 4k — the required rate climbs with length. This is the short-context view; chart 3 carries the same axes out to 1,048,576 tokens.

1k0/81/87/88/88/82k0/80/82/88/88/84k0/80/80/87/88/88k0/80/80/87/88/82%5%10%20%30%invisible-character insertion ratecontext lengthattacksuccess8/84/80/8

3 · Same story, all the way to 1,048,576 tokens

The extended sweep: three models × every context length × insertion rate, each cell a median detector z over 5 seeds. Teal = the attack won (z < 2.33); orange = still detected. Qwen3.8-27B reaches 1M tokens; the gpt-oss models to 131k. Read down any column: by 40% insertion the whole grid is teal. Longer context buys the detector a bigger head start (deeper orange at low rates for long documents) but never a finish line.

5%10%15%20%25%30%35%40%45%Qwen3.8-27B1M65.226.99.43.70.80.0-0.4-1.0-0.9512k53.721.89.32.80.70.6-0.5-0.9-1.0256k45.215.77.71.81.00.8-0.5-1.0-1.0128k39.912.85.62.00.91.8-0.7-0.6-1.164k23.49.53.70.5-0.11.4-0.2-0.3-0.932k19.76.72.91.50.31.7-0.7-0.7-0.816k13.35.32.1-0.00.60.6-0.5-0.8-0.6gpt-oss-120b128k28.210.76.02.01.70.10.20.30.464k19.58.53.71.91.4-0.40.20.6-0.532k13.95.52.50.90.9-0.6-0.5-0.5-0.216k9.95.41.8-0.00.5-0.40.3-0.8-0.1gpt-oss-20b128k61.727.710.85.12.01.50.30.40.164k51.421.97.63.81.31.70.20.60.132k37.313.05.02.60.81.3-0.10.10.216k25.78.83.82.0-0.50.9-0.0-0.1-0.1variation-selector insertion rate · each cell is median detector z over 5 seeds

Data: github.com/aloshdenny/claude-awm · results/res_120b_lengths.json, results/res_vs_bench_20b.json · regenerate with site/gen_charts.py