Subliminal Watermarks: robust and sample efficient distillation detection

Gautham Govind Anil1*, Arnav Chavan1*, Chang-Han Chen1*, Harshit Varma1*, Kurt Keutzer1, Alex Dimakis1, Sewon Min1

1UC Berkeley *Equal contribution, listed in alphabetical order

TL;DR

Model distillation has created tension between model developers, and there is growing interest in watermarking model outputs so that developers can detect when their outputs are used to train another model. But do these watermarks hold up when the distiller actively tries to remove them? Not really.

We introduce two simple laundering methods, grandchild and entropy laundering, that leave every watermark we tested (SynthID, TextSeal, ADFP) barely detectable in the distilled model without hurting its accuracy. For example, grandchild laundering takes TextSeal from overwhelming evidence of distillation (\(p \approx 10^{-9}\)) to basically none (\(p \approx 0.67\)). SynthID holds up better against it (\(p \approx 0.03\)), but entropy laundering removes it too (\(p \approx 0.6\)).

To overcome this, we leverage the insight that the watermark signal may generalize better in parameter space (inspired by subliminal learning) and introduce Subliminal Watermark (SubWM), a new detection scheme that remains effective after laundering. It measures “how much does the likelihood of this sequence increase if we shift our probe model’s weights toward a watermarked one?”. On science questions, SubWM achieves about 99% true positive rate (TPR) at 3% false positive rate (FPR) from a single response of the suspect. On long-horizon coding tasks, detection is harder, likely because code tokens have lower entropy, but SubWM still achieves above 65% TPR at 5% FPR. A majority vote on 50 responses is projected to detect distillation almost perfectly.

1. Background: What are LLM watermarks?

When a frontier model is served through an API, anyone can collect the responses and train their own model on them. This is known as distillation. When done without permission, it raises legal, safety, and provenance concerns (Anthropic, 2026). The model provider needs a way to know:

  • Is this response generated by my model?
  • Is this response generated by a model that distills from mine?
  • Does their model distill from mine?

The standard tool is watermarking (Aaronson, 2022): embed statistical patterns into the LLM’s responses while disturbing the logit distribution as little as possible. Sometimes the second question is called antidistillation fingerprinting (Xu et al., 2026), but we will simply use the term watermark. Of course, if we can answer the second question, then we also solve the third one if we can query the model, e.g., majority vote on the queried responses from the suspect.

Watermarking is also becoming a legal requirement. From 2026, the EU AI Act requires providers of generative AI systems, text generators included, to mark their outputs in a machine-readable format that is detectable as AI-generated (European Union, 2024, European Commission, 2026).

One of the earliest examples of watermarking is Aaronson’s (2022) Gumbel-Max watermark. The idea is simple: since there is intrinsic randomness in LLM sampling at non-zero temperature anyway, we could swap in pseudorandomness that can be deterministically verified later.

More concretely, we prepare an \(n\)-gram hash table: at each step, the previous \(n\) tokens and a secret key \(k\) are hashed into a seed, and the seed generates one pseudorandom number \(u_v \in (0,1)\) for every token \(v\) in the vocabulary. Given the model’s next-token probabilities \(p_v\), we return \(\arg\max_v u_v^{1/p_v}\), the standard Gumbel-Max trick. Because the seed depends only on the preceding \(n\) tokens and the key, one can recompute every \(u_v\) afterwards with the key.

The widget below helps visualize the effect of key selection on the model’s output.

To anyone without the key, \(u\) looks uniformly random, so each token is still chosen with probability \(p_v\).

The detection in the original work computes the textual correlation between sampled tokens \(y_t\) and the pseudorandom numbers \(u_{y_t}\) by \(S(y) \;=\; \sum_{t=1}^{T} -\ln\big(1 - u^{(t)}_{y_t}\big).\) Again, the number \(u_{y_t}\) can be recomputed from the key \(k\) and the preceding \(n\) tokens.

Follow-ups, such as SynthID (Dathathri et al., 2024) and TextSeal (Sander et al., 2026), all work similarly but improve the quality-detectability tradeoff. Green/Red-list (Kirchenbauer et al., 2023) and ADFP (Xu et al., 2026) work slightly differently, but we won’t elaborate further. This is because none of these detection methods survives the simple attacks introduced in the next section, and once we switch to our new detection method, Subliminal Watermark (SubWM), even the vanilla Gumbel-Max watermark becomes detectable after the attacks.

2. Two simple attacks break existing detection methods

We introduce two laundering methods to stress-test popular watermarking schemes, including TextSeal, ADFP, and SynthID, and find that they all become ineffective. A distiller needs neither the teacher’s logits nor the watermark keys, and the watermarks become barely detectable, without sacrificing the performance gain from distillation.

Grandchild laundering. Train a child on the watermarked teacher traces as usual, but don’t deploy it. Instead, sample the child on the same prompts, keep the correct answers, and train a fresh grandchild from the original checkpoint on those. The grandchild never sees a watermarked token.

Setup. The teacher is Qwen3.5-9B and the student Qwen3.5-4B (Qwen Team, 2026), both in thinking mode. The student is distilled on 9,000 watermarked teacher traces for science questions from Mixture-of-Thoughts (Hugging Face, 2025). For each watermark, we report its \(p\)-value on the traning traces (lower means stronger evidence of distillation), and the student’s accuracy on held-out science questions. As a control, we include a student distilled from unwatermarked traces.

In the table below, we see the \(p\)-values for grandchildren are orders of magnitude higher than those of children, without losing much accuracy:

StudentSynthIDTextSealADFP (\(\lambda = 256\))
\(p\)-valueAccuracy\(p\)-valueAccuracy\(p\)-valueAccuracy
Control (clean)0.3579.0%0.8279.0%——
Child\(4.7 \times 10^{-15}\)82.4%\(1.3 \times 10^{-9}\)81.5%\(2.2 \times 10^{-5}\)41.6%
Grandchild0.02584.2%0.6778.2%1.049.4%

Entropy laundering. Drop the top 50% highest-entropy tokens from the SFT loss, while keeping them in the context. Of course, the distiller won’t have the teacher’s logits, so they have to use some proxy model’s entropy, e.g., their own model’s.

See the illustration below based on a real Qwen3.5-4B’s response on a science question:

We use the same teacher, student, data, and metrics as above. Despite the limitation of not having the teacher’s entropy, entropy laundering is still very effective against TextSeal, SynthID, and ADFP. As shown in the table below, the \(p\)-values are again orders of magnitude higher without losing much accuracy.

StudentSynthIDTextSealADFP (\(\lambda = 64\))
\(p\)-valueAccuracy\(p\)-valueAccuracy\(p\)-valueAccuracy
Control (clean)0.8885.1%0.3685.1%1.085.1%
Original\(9.4 \times 10^{-7}\)82.9%\(4.6 \times 10^{-9}\)83.2%0.05155.9%
Entropy Laundering0.6282.4%0.2281.4%0.9373.9%

The original TextSeal accuracy comes from an earlier sampled run on the same evaluation set with a different seed.

Interestingly, the ADFP student’s performance actually improves a lot after entropy laundering, which gives the distiller even more incentives to deploy the attack.

As an ablation, we also try to filter out a random 50% or the lowest-entropy 50% of tokens. Neither removes the watermarks:

Tokens droppedSynthIDTextSeal
\(p\)-valueAccuracy\(p\)-valueAccuracy
None\(9.4 \times 10^{-7}\)82.9%\(4.6 \times 10^{-9}\)83.2%
Random 50%\(3.3 \times 10^{-4}\)82.9%\(1.5 \times 10^{-5}\)82.0%
Lowest-entropy 50%\(9.7 \times 10^{-7}\)83.0%\(5.2 \times 10^{-9}\)82.9%
Highest-entropy 50%0.6282.4%0.2281.4%

The first and last rows repeat the watermarked and entropy-laundered students from the table above. ADFP was not run for these ablations.

This supports the hypothesis that the detectability comes mostly from the high-entropy tokens.

3. SubWM: a novel, robust detection method in parameter space

We showed that current watermark detectors can be broken by simple attacks. How can the model provider fight back?

Prior work found that a model fine-tuned on another model’s outputs can pick up its traits even when the outputs look unrelated to them, known as subliminal learning (Cloud et al., 2025). The explanation lives in parameter space: training on the teacher’s outputs pulls the student’s weights toward the teacher’s.

Inspired by this, we devise a new detection method, Subliminal Watermark (SubWM), that looks for the watermark in parameter space instead of in the tokens, and it turns out to survive both laundering methods.

3.1 The detector

Let \(\theta_0\) be the teacher’s parameters. On its own prompts, the provider samples clean traces \(D_c\) and watermarked traces \(D'_w\), then fine-tunes two copies of the teacher with identical settings:

\[\theta_c = \mathrm{SFT}(\theta_0, D_c), \qquad \theta_w = \mathrm{SFT}(\theta_0, D'_w).\]

The two datasets differ only in the watermark, so \(\Delta\theta = \theta_w - \theta_c\) is a watermark direction in weight space. For a suspect prompt-response pair \((x, y)\), the likelihood score is

\[\begin{equation} s(x, y) \;=\; \frac{1}{|y|} \Big\langle \nabla_\theta \log p_\theta(y \mid x)\big|_{\theta_c},\; \Delta\theta \Big\rangle \;=\; \frac{1}{|y|}\, \frac{d}{d\epsilon} \log p_{\theta_c + \epsilon \Delta\theta}(y \mid x) \Big|_{\epsilon = 0} . \label{eq:score} \end{equation}\]

In words:

How much more likely is the response if we shift the clean teacher toward the watermarked one in parameter space?

Crucially, the score can be computed very efficiently via autodiff. We just need one forward pass through the slightly perturbed weights \(\theta_c + \epsilon\Delta\theta\) and then a backward pass to the scalar \(\epsilon\). The gradients are never materialized. This is because our score is not the cosine similarity between two gradients or two parameter-space directions, but the canonical pairing between one of each (or between the tangent space and the cotangent space if you wish). This is why we don’t need to, e.g., normalize the gradients and \(\Delta\theta\) in principle, or approximate the Hessian of the loss landscape.

In fact, even without backprop, the finite-difference approximation already works well:

\[\begin{equation} s(x, y) \;\approx\; \frac{1}{|y|} \log \frac{p_{\theta_w}(y \mid x)}{p_{\theta_c}(y \mid x)} , \label{eq:llr} \end{equation}\]

which is just the mean log-likelihood ratio (LLR) between the teacher checkpoints. Despite its strong performance in practice, this simple score is less interpretable in terms of linear parameter-space directions.

3.2 SubWM has great TPR and FPR on single responses, and even out of distribution

Setup. We use the same teacher (Qwen3.5-9B) and student (Qwen3.5-4B) as in §2, both in thinking mode. The watermark is vanilla Gumbel-Max (TextSeal with \(\alpha = 0\)). The provider fine-tunes \(\theta_c\) and \(\theta_w\) on 9,000 prompts that the student never trained on. We then score the student’s own answers to 800 held-out science questions. The threshold is tuned on a held-out calibration set of clean teacher’s traces. We report the true positive rate (TPR) on the watermarked student and the false positive rate (FPR) on a clean student.

On science questions, SubWM flags all 800 watermarked answers at a 2.75% FPR. Here are the likelihood curves and all 1,600 scores behind that number:

We also test two harder settings. Out-of-domain generalization: we ask the same science-distilled students questions from math (GSM8K) and coding (LiveCodeBench), and score their answers with the same science-trained detector, recalibrating only the threshold on clean teacher answers from each domain. Agentic coding: a separate Qwen3-4B lineage distilled from SWE-smith agent trajectories, with its own detector fitted on separate coding tasks. Each action is generated with up to about 29k tokens of the trajectory in context.

As shown in the table below, SubWM works well out of the box,

SettingResponses per studentWatermarked flagged (TPR)Clean flagged (FPR)
Science (in domain)800100%2.75%
Math, GSM8K (new domain)80099.3%5.9%
Coding, LiveCodeBench (new domain)39689.4%5.8%
Agentic coding, SWE-smith40067.0%5.5%

Notice that agentic coding is a lot harder, likely because code tokens usually have lower entropy and thereby less room to embed statistical patterns. Still, SubWM flags 67% of watermarked actions, while the conventional TextSeal detector at similar FPR flags only 12% (not shown here). For all numbers, including key 2 and the alignment score, see the result tables.

3.3 SubWM can work with two different keys at the same time

We can detect not only distillation, but also the source of distillation!

The setup is the same as before but with two different keys, key 1 and key 2. Let \(s_1\) be the likelihood score \(s\) in \(\eqref{eq:score}\) computed with the key-1 detector, and \(s_2\) the same score computed with the key-2 detector. We score both students’ answers to the same 800 held-out prompts.

The contrast \(s_1 - s_2\) separates the key-1 and key-2 students perfectly (AUROC 1.000): all 800 key-1 responses have positive contrast, and all 800 key-2 responses have negative contrast.

Alignment-score contrast s1 minus s2 for the key-1, key-2, and clean students on the same 800 held-out prompts
Tap the figure to open it at full size.

3.4 SubWM is robust to laundering

We apply the two laundering methods from §2 to the key-1 student of §3.2, and score the laundered students with the same detector and thresholds. For comparison, the tables repeat the baseline numbers from §2.

On science questions, grandchild laundering barely affects the effectiveness of SubWM:

StudentSynthID \(p\)-valueTextSeal \(p\)-valueADFP \(p\)-valueSubWM: flagged (FPR)
Control (clean)0.350.82——
Child\(4.7 \times 10^{-15}\)\(1.3 \times 10^{-9}\)\(2.2 \times 10^{-5}\)100% (2.8%)
Grandchild0.0250.671.099.9% (1.9%)

ADFP uses \(\lambda = 256\).

Same for entropy laundering:

StudentSynthID \(p\)-valueTextSeal \(p\)-valueADFP \(p\)-valueSubWM: flagged (FPR)
Control (clean)0.880.361.0—
Original\(9.4 \times 10^{-7}\)\(4.6 \times 10^{-9}\)0.051100% (2.8%)
Entropy laundering0.620.220.9399.6% (2.9%)

ADFP uses \(\lambda = 64\). The students are trained independently from the ones in grandchild laundering. That's why the numbers for "Original" here differs from "Child" above.

In agentic coding, we only tested grandchild laundering so far, and it does not hurt SubWM’s detection either (67.0% → 69.3% of actions flagged, at 4–6% FPR), while the conventional TextSeal detector flags only 11–12%.

3.5 SubWM could perfectly detect model distillation by majority vote

We have presented our results on rollout detection. What about model detection? A simple strategy is to query \(N\) independent responses from the suspect and do a strict majority vote. For \(N=10\), at least six responses must pass; a five–five tie counts as negative.

If the rollouts are independent, the TPR and FPR of the vote follow from a simple binomial calculation (see the appendix). With only \(N=10\) queries, this would give perfect detection on science questions: with the LLR score, the projected TPR rounds to 100% in every science setting, with or without laundering, while the projected FPR stays below \(1.4 \times 10^{-7}\) (see the result tables).

On coding tasks, we could increase the number of queries to \(N=50\) (which is still very small) and expect near-perfect detection: for the agentic-coding lineage, \(N=50\) gives a projected TPR of 99.1% without laundering and 99.7% after grandchild laundering, at a projected FPR below \(10^{-19}\).

Majority vote, LLR score. Science questions: one response gives TPR 100% and FPR 2.75% (1 in 36); a majority vote of 10 responses gives TPR 100% and FPR 1 in 12 million. Agentic coding: one action gives TPR 67% and FPR 5.5% (1 in 18); a majority vote of 50 actions gives TPR 99.1% and FPR 1 in 10^19.
Tap the figure to open it at full size.

We haven’t tested SubWM on multiple clean models and measured FPR directly, which is an important next step for us. In the meantime, we would like to emphasize that

  1. Our detector works on OOD tasks.
  2. Our detector is completely student-agnostic; from the training traces to threshold calibration, everything is agnostic to the distiller.

So, we think it is reasonable that the independence assumption for the above calculation holds up.

3.6 Why does SubWM work though?

As the name suggests, SubWM is inspired by subliminal learning: a model trained on another model’s outputs could learn behaviors beyond the semantics and format of the outputs, which could be explained by linear directions in the parameter space (Cloud et al., 2025). At the moment, we do not have a clean connection yet, but we have the following interesting observation.

“If SubWM is just a likelihood test, do we really need to finetune the teacher? Can’t we just use the Gumbel-Max distribution to compute the watermarked likelihood directly?” It is not obvious how to do this because Gumbel-Max is a deterministic algorithm, so there is no distribution. Nonetheless, we tried a few versions of this, such as that of Ma (2026). Although they all worked well on the teacher-generated texts, none survives distillation.

This seems to suggest two things. First, detectors based on the watermark’s sampling rules are fragile to distillation. The key to SubWM’s success might be to look for watermark signals in the parameter space. This does not have to be the parameter space of the student. In our case, we use the teacher’s, but we expect any reasonably sized model would work. Second, whatever the teacher and the student both learn, it is not decoding the Gumbel-Max pseudorandomness. This makes sense, because we shouldn’t be able to invert hash functions by simply running SFT on some tokens!

It is interesting to investigate what exactly the models learn from watermarked traces, and why it is universal across models of different sizes (4B and 9B in our case). We expect some techniques from the subliminal learning literature would be useful, but we leave that to future work.

Citation

@misc{anil2026subliminalwatermarks,
  author = {Anil, Gautham Govind and Chavan, Arnav and Chen, Chang-Han and
            Varma, Harshit and Keutzer, Kurt and Dimakis, Alex and Min, Sewon},
  title  = {{Subliminal Watermarks}: robust and sample efficient distillation detection},
  year   = {2026},
  url    = {https://subliminal-watermarks.github.io/},
  note   = {Blog post}
}

References

Appendix: Experimental details

Training, sampling, evaluation, and reproducibility details

Setup overview

The science experiments use the same teacher and student: Qwen3.5-9B → Qwen3.5-4B (Qwen Team, 2026), both in thinking mode, distilled by SFT on 9,000 teacher traces from the science subset of Mixture-of-Thoughts (Hugging Face, 2025). These runs use the same fine-tuned teacher adapter.

  Laundering (§2) Our detector (§3)
Watermarks TextSeal (\(\alpha = 0.1\)), SynthID, ADFP Vanilla Gumbel-Max (TextSeal, \(\alpha = 0\)), keys \(k_1\) and \(k_2\)
What is tested Teacher traces fed through the student The student’s own answers to new prompts
Score Each scheme’s token-level \(p\)-value Alignment \(\eqref{eq:score}\) or fitted-teacher LLR \(\eqref{eq:llr}\)
Evaluation Training-trace tests. Science: 800 evaluation prompts per study; thresholds from 1,000 unwatermarked source-teacher responses on a separate prompt pool.
Detector trained on No separately fitted detector \(D'_w\): 9,000 fresh prompts, disjoint from student-training, calibration, and evaluation prompts. All reported science fitted-detector results use this separate corpus.

Result tables

Single responses, science (§3.2).

Key Score (\(D'_w\)) Matching student flagged (TPR) Clean student flagged (FPR) AUROC
1 Alignment \(\eqref{eq:score}\) 800/800 (100%) 20/800 (2.50%) 0.9993
1 LLR \(\eqref{eq:llr}\) 800/800 (100%) 22/800 (2.75%) 1.0000
2 Alignment \(\eqref{eq:score}\) 755/800 (94.375%) 16/800 (2.00%) 0.9948
2 LLR \(\eqref{eq:llr}\) 795/800 (99.375%) 24/800 (3.00%) 0.9987

Out of distribution (§3.2). Key-1 science students and the science-fitted \(D'_w\) detector, scored on new questions.

Domain Score Watermarked flagged (TPR) Clean student flagged (FPR)
Math (GSM8K) LLR \(\eqref{eq:llr}\) 794/800 (99.25%) 47/800 (5.875%)
Math (GSM8K) Alignment \(\eqref{eq:score}\) 766/800 (95.75%) 52/800 (6.50%)
Coding (LiveCodeBench) LLR \(\eqref{eq:llr}\) 354/396 (89.39%) 23/396 (5.81%)
Coding (LiveCodeBench) Alignment \(\eqref{eq:score}\) 293/396 (73.99%) 6/396 (1.52%)

Cutoffs: the \((\lfloor 0.95\,n \rfloor + 1)\)-th smallest of the \(n\) clean-teacher scores (the 951st-smallest for \(n = 1{,}000\); the 160th-smallest of the 168 LiveCodeBench answers), flag if strictly greater. GSM8K: 1,000 clean teacher answers on the same 1,000-question file that holds the 800 test questions (the questions overlap; the responses come from a different model). LiveCodeBench: 168 clean teacher answers (4 per problem) on 42 calibration problems, disjoint from the 99 test problems (4 answers each, 396 in total). The LiveCodeBench calibration answers are clustered (4 per problem, so roughly 42 independent units), which makes that cutoff noisier than the science and GSM8K ones.

Key specificity (§3.3).

Detector Clean flagged Key-1 flagged Key-2 flagged AUROC: matching vs. clean AUROC: matching vs. wrong key
Alignment \(\eqref{eq:score}\), key 1 20 800 6 0.99932 0.99993
Alignment \(\eqref{eq:score}\), key 2 16 1 755 0.99479 0.99958
LLR \(\eqref{eq:llr}\), key 1 22 800 31 1.00000 1.00000
LLR \(\eqref{eq:llr}\), key 2 24 0 795 0.99870 0.999995

\(D'_w\) detectors · 800 responses per student · each key’s threshold fixed from the same 1,000 clean source-teacher answers. Both the alignment contrast and the LLR contrast have AUROC 1.000 and separate the two keyed students at zero. Perfect ranking on this sample is not a guarantee of zero population error.

Laundering, both scores (§3.4).

Study Score True Positive Rate False Positive Rate AUROC
Entropy laundering Alignment \(\eqref{eq:score}\) 727/800 (90.875%) 11/800 (1.375%) \(0.9950 \pm 0.0022\)
Entropy laundering LLR \(\eqref{eq:llr}\) 797/800 (99.625%) 23/800 (2.875%) \(0.9993 \pm 0.0005\)
Grandchild laundering Alignment \(\eqref{eq:score}\) 743/800 (92.875%) 8/800 (1.00%) \(0.9962 \pm 0.0026\)
Grandchild laundering LLR \(\eqref{eq:llr}\) 799/800 (99.875%) 15/800 (1.875%) \(0.9999 \pm 0.0001\)

Majority vote, science (§3.5).

If the \(N\) rollouts are independent and each is flagged with the single-response rates reported above, TPR \(t\) for a watermarked student and FPR \(q\) for a clean one, then the strict-majority vote has

\[\begin{aligned} \mathrm{FPR}_N &= \Pr\!\left[\operatorname{Binomial}(N,q) \ge \lfloor N/2\rfloor+1\right],\\ \mathrm{TPR}_N &= \Pr\!\left[\operatorname{Binomial}(N,t) \ge \lfloor N/2\rfloor+1\right]. \end{aligned}\]
Study Key Score Projected TPR, \(N=10\) Projected FPR, \(N=10\) (probability)
Science 1 Alignment \(\eqref{eq:score}\) 100%* \(4.70 \times 10^{-8}\)
Science 1 LLR \(\eqref{eq:llr}\) 100%* \(8.26 \times 10^{-8}\)
Science 2 Alignment \(\eqref{eq:score}\) 99.98883% \(1.25 \times 10^{-8}\)
Science 2 LLR \(\eqref{eq:llr}\) 99.99999977% \(1.38 \times 10^{-7}\)
Entropy laundering 1 Alignment \(\eqref{eq:score}\) 99.89243% \(1.35 \times 10^{-9}\)
Entropy laundering 1 LLR \(\eqref{eq:llr}\) 99.99999998% \(1.07 \times 10^{-7}\)
Grandchild laundering 1 Alignment \(\eqref{eq:score}\) 99.96589% \(2.03 \times 10^{-10}\)
Grandchild laundering 1 LLR \(\eqref{eq:llr}\) \(\approx 100\%\) \(8.55 \times 10^{-9}\)

*100% is the plug-in estimate from 800/800 observed detections; it does not establish population-perfect TPR. FPR entries are probabilities.

Agentic coding (§§3.2–3.5). A Qwen3-4B lineage with its own coding-fitted detector. Conventional TextSeal is the token-level detector from §1, applied to the same actions.

Generation Detector Keyed actions flagged (TPR) Clean actions flagged (FPR) AUROC
Child LLR \(\eqref{eq:llr}\) 268/400 (67.00%) 22/400 (5.50%) 0.9201
Child Conventional TextSeal 47/400 (11.75%) 20/400 (5.00%) 0.6208
Grandchild LLR \(\eqref{eq:llr}\) 277/400 (69.25%) 17/400 (4.25%) 0.9314
Grandchild Conventional TextSeal 44/400 (11.00%) 23/400 (5.75%) 0.5952

Cutoffs use 1,000 unwatermarked actions from the clean source teacher across 200 held-out SWESmith tasks, with a shared child/grandchild cutoff for each detector. Confirmation uses 400 keyed and 400 clean actions per generation, one action per task, disjoint from calibration. Calibration actions are clustered by task; teacher calibration does not guarantee 5% FPR on student outputs. Detection is measured on SWESmith actions from one fitted lineage.

Applying the strict-majority rule from §3.5 with \(N=10\) or \(N=50\) gives the following model-detection projections:

Generation Detector TPR
\(N=10\)
FPR
\(N=10\)
TPR
\(N=50\)
FPR
\(N=50\)
Child LLR \(\eqref{eq:llr}\) 79.36486% \(4.79 \times 10^{-6}\) 99.05680% \(5.85 \times 10^{-20}\)
Grandchild LLR \(\eqref{eq:llr}\) 83.65702% \(1.07 \times 10^{-6}\) 99.65691% \(9.72 \times 10^{-23}\)

Strict majority requires at least six positive actions for \(N=10\) and 26 for \(N=50\). As before, these projections substitute the observed action rates into the binomial formula and assume independent queries across tasks; they are not measured model-audit outcomes. TPR entries are percentages; FPR entries are probabilities.

Training and sampling

  • Teacher and students. The science experiments use the same science-SFT Qwen3.5-9B adapter. Their students start from Qwen3.5-4B and use LoRA rank 32. Each first-generation clean or keyed student is SFT-trained on 9,000 teacher traces; grandchildren train on child-generated traces.
  • Science detector rollouts. Thinking mode; at most 1,024 new tokens per response. Sampling uses temperature 1.0, top-p 0.95, top-k 20, and presence penalty 1.5.
  • Science detector scoring. The science-fitted \(D'_w\) detectors are scored in FP32. The main science, entropy, grandchild, and clean-teacher calibration results retokenize returned response text without adding a synthetic EOS; explicit terminal special-token strings remain part of that text. Scoring keeps the full prompt and the first response tokens up to a 1,024-token total limit; only response tokens enter the per-token score.
  • Watermarks. The science detector experiments use vanilla Gumbel-Max (TextSeal with \(\alpha = 0\)), a 3-token hash context, and keys \(k_1, k_2\). The baseline laundering comparisons in §2 use TextSeal with \(\alpha = 0.1\), SynthID, and ADFP. ADFP uses \(\lambda = 256\) in the grandchild table and \(\lambda = 64\) in the entropy table.

Science prompt partitions and detector labels

  • \(D'_w\) is the fresh detector-training corpus; \(D_w\) denotes the student’s training corpus, not a second set of detector results. This post excludes detector results fitted on \(D_w\).
  • Decontamination. The recorded near-duplicate audit found no matches between fresh detector-training, student-training, and detector-evaluation prompts. Our additional exact-prompt check found zero overlap between the 9,000 fresh detector-training prompts and either of the two 1,000-prompt science evaluation pools. The two evaluation pools also have no exact-prompt overlap.
  • Detector evaluation. The main two-key study uses one 1,000-prompt science pool; entropy and grandchild laundering share another. We retain their original 400 development and 400 confirmation prompts and combine them into 800 evaluation prompts per study. The remaining 200 prompts were used in earlier student-calibrated analyses; they do not set the clean-teacher cutoffs reported here.
  • Clean-teacher calibration. We generate 1,000 unwatermarked responses from the source teacher \(\theta_0\) with the same thinking-mode sampling settings as the student evaluations. These prompts are disjoint from student training, detector training, all earlier science evaluation pools, and the additional student-calibration prompt pool. Both keys score this same teacher corpus. The clean source teacher \(\theta_0\) is distinct from the fitted clean detector reference \(\theta_c\).
  • Threshold. For each key and score, sort the 1,000 clean source-teacher scores and use the 951st-smallest as the cutoff. Flag a response only if its score is strictly greater than that cutoff. Freeze the teacher cutoffs before computing the student-transfer results; clean-student responses do not fit these thresholds. The same key-1 cutoffs apply unchanged to the main, entropy, and grandchild students. The nominal 5% teacher-calibration target does not guarantee a 5% FPR for a different clean model.
  • Key contrast. The zero line for \(s_1 - s_2\) compares the two key scores. It is not the threshold for deciding whether a response is watermarked.
  • Uncertainty and scope. Teacher cutoffs are frozen before the transfer analysis, but the student evaluation responses had been inspected historically, so these are exploratory transfer results with one fitted student per condition. Science response-rate intervals use exact Clopper–Pearson bounds; AUROC intervals use paired-prompt bootstrap resamples. A bootstrap interval of [1, 1] for perfect ranking is not a guarantee of zero population error. Response resampling does not replicate model training, and the majority-vote numbers in §3.5 are conditional independent-query projections.

The fixed clean-teacher cutoffs used in the science experiments in §§3.2–3.5 are:

Key Score Cutoff
1 Alignment \(\eqref{eq:score}\) 0.01558078
1 LLR \(\eqref{eq:llr}\) −0.01502352
2 Alignment \(\eqref{eq:score}\) 0.01464804
2 LLR \(\eqref{eq:llr}\) −0.00625214

Coding detection

We also test grandchild laundering in a separate Qwen3-4B coding lineage. The source teacher is fine-tuned on successful trajectories from Kimi-2.5 SWESmith. As before, clean and keyed children distill the teacher’s actions; grandchildren distill actions regenerated by the corresponding child with watermarking disabled. Each descendant starts from the original base checkpoint. The learned detector uses clean and keyed reference models fitted on separate coding tasks.

The agentic-coding experiment uses its own SWESmith-SFT Qwen3-4B source teacher and separately fitted coding references. Keyed coding traces use TextSeal with \(\alpha = 0\) and a 3-token hash context. Generation allows up to 28,672 prompt tokens and 4,096 response tokens within a 32,768-token context. Coding LLR scores the original generated response token IDs, including a terminal EOS when emitted, conditioned on the full prompt.

Calibration generates unwatermarked actions from that source teacher at temperature 1, top-k 20, top-p 0.95, with a 4,096-token response budget; watermark injection is disabled and outputs are not filtered by success. Each detector uses the 951st-smallest score from the 1,000-action clean-teacher pool, with a strict greater-than decision. This gives a shared child/grandchild cutoff of 0.014877768768661323 for per-token LLR and 1.5491128392910267 for the conventional TextSeal score \(-\log_{10}p\). Confirmation models and scores are held fixed while replacing the earlier clean-student calibration. Coding and science use their own fitted references and thresholds.

Reported scope

Both keyed science detectors are complete on the three main science students. Key-1 results are complete for entropy and grandchild laundering. Agentic coding reports the child and grandchild lineage in §§3.2–3.5. Additional replication and dilution analyses are outside the scope of this post.

Baseline laundering evaluations (§2)

  • Grandchild table. For SynthID and TextSeal, the \(p\)-values use 3,000 traces the child trained on. The clean control gives SynthID 0.35 and TextSeal 0.82.
  • ADFP. The displayed grandchild \(p\)-values use the teacher’s training traces. At teacher-trace prefixes, the evaluator samples the student’s next token and measures its keyed green-list membership, keeping the first occurrence of each evaluated context bigram. The reported \(p\)-value is the one-sided Hoeffding bound: \(p = \exp[-2N(\bar g - \gamma)^2]\) when \(\bar g > \gamma\), and \(p = 1\) otherwise, with green-list fraction \(\gamma = 0.5\). Here \(N\) is the number of retained measurements and \(\bar g\) their mean. It is a corpus-level statistic, not a per-response FPR. The clean training \(p\)-value was not reported for this ADFP grandchild comparison.
  • Entropy table. Detection columns report the usual \(p\)-value, evaluated on training traces. Accuracy uses 1,000 held-out science MCQs with thinking-mode sampling (temperature 1, top-p 0.95, top-k 20, presence penalty 1.5, and a 2,048-token response limit). The original TextSeal accuracy is from the team’s earlier sampled evaluation with a different seed. The highest-entropy mask is selected over the full training corpus; dropped tokens remain in the context but contribute no SFT loss. Ablations: dropping a random 50% gives TextSeal \(1.5 \times 10^{-5}\) and SynthID \(3.3 \times 10^{-4}\); dropping the lowest-entropy 50% gives TextSeal \(5.2 \times 10^{-9}\) and SynthID \(9.7 \times 10^{-7}\). The clean control gives TextSeal 0.36 and SynthID 0.88.