Provenance Is Not Correctness Anthropic has begun watermarking text output from Claude, embedding imperceptible watermarks in text and attaching C2PA metadata to files, with models launched on or after 2 August 2026 supporting marking at launch worldwide. The article argues that watermarking, which intervenes in the token sampling loop, does not inherently degrade code quality, but raises structural concerns about provenance versus correctness. Provenance Is Not Correctness As of this month, Claude watermarks its text output. Anthropic’s documentation is direct about the mechanism: for text, “it weaves an imperceptible watermark directly into the text itself. You won’t see it, and it doesn’t change the meaning, quality, or readability.” For files, it attaches signed provenance metadata following the C2PA standard. Models launched on or after 2 August 2026 support marking at launch, and the rollout is worldwide rather than scoped to the EU regime that prompted it. 1 fn:1 I want to take that seriously as a systems fact rather than a policy talking point, because a watermark is not a label attached to a document. It is an intervention in the sampling loop. Something is changing which token gets emitted, and that is a different kind of object from a metadata field. The interesting question is what happens when the artifact being marked is a program. What a token watermark actually does Anthropic has not published its scheme — the documentation says details on detection mechanisms are coming in “forthcoming technical documentation.” 1 So the honest thing is to reason about the class of schemes rather than assert a specific implementation. The published literature is small and consistent enough to make that worthwhile. The canonical construction is Kirchenbauer et al.’s green-list watermark. 2 At each generation step, you hash the preceding token under a secret key, use that hash to pseudorandomly partition the vocabulary into a “green list” some fraction γ of tokens and a “red list,” and then add a constant δ to the logits of every green token before the softmax: 1 2 3 4 5 6 7 8 9 10 11 1. Seed a PRNG from the previous token under the watermark key. Deterministic, so a detector holding the key can replay the same partition later. rng.manual seed hash key prev token id 2. Pseudorandomly split the vocabulary. Green gets gamma of the tokens. green ids = torch.randperm vocab size, generator=rng : int gamma vocab size 3. Nudge green tokens up before sampling. This is the entire intervention -- delta is a bias on the logits, not a filter on the output. logits green ids += delta next token = sample softmax logits Detection needs no model. Re-derive the partition at each position, count how many emitted tokens landed in green, and run a z-test against the γ you would expect by chance. A long enough passage from a watermarked model shows a green fraction far above γ; unwatermarked text does not. Google’s SynthID-Text, the only production system with a peer-reviewed description, replaces the additive bias with tournament sampling: draw several candidate tokens, run them through keyed pairwise tournaments, and emit the winner. Tokens that consistently win see their sampling probability increased, and in one configuration the scheme is non-distortionary — the output token distribution matches the unwatermarked model’s. 3 fn:3 That word deserves care, because it is where most reasoning about watermarking and code goes wrong. “Non-distortionary” is a weaker promise than it sounds Non-distortionary means the distribution is preserved. It does not mean you get the same output. Sample twice from an unchanged distribution and you get two different programs. Both are legitimate draws. Neither is more likely to be correct than the other, and — this is the part that matters — the model’s distribution over programs already contains buggy programs. A watermark that samples faithfully from that distribution has not made your code worse. It has given you a different draw from a bag that always contained bad draws. So the naive claim — “watermarking injects vulnerabilities into generated code” — is wrong, and I want to dispose of it before building anything on top. A distribution-preserving watermark does not bias generation toward insecure constructs. There is no adversary in the sampler. The real problem is more structural, and you find it by asking where a watermark can hide. Entropy is the whole game A watermark is a signal smuggled into your choice among tokens. That only works when there is a choice. Kirchenbauer et al. make this explicit in the design of their own scheme. The obvious construction — a “hard” watermark that simply forbids red-list tokens — fails badly: for low-entropy sequences where the next token is nearly deterministic, hard watermarking may prevent the model from producing it at all, degrading output quality. 2 The soft watermark, with its finite δ, exists precisely so that a sufficiently confident model can still overrule the bias and emit the red token it was going to emit anyway. Read that as a design constraint and it says something sharp: a watermark is only free when the model was uncertain. Where the model is confident, you either corrupt the output or you skip it. Every credible scheme skips it. The consequence is measured, not merely theoretical. An independent analysis of SynthID-Text notes that “in regions where entropy is low, watermarking is typically less effective, which is also advantageous for the attacker,” and reports that all existing methods perform poorly on short text — SynthID-Text reaches only about 0.3 true-positive rate at a 1% false-positive rate on 50-token passages. 4 fn:4 Now hold that next to the shape of source code. Source code is a low-entropy artifact with high-stakes tokens Prose is forgiving because it is redundant. Swap “however” for “but” and the paragraph survives. That redundancy is the entropy the watermark lives in. Code is not like that. Its distinguishing property is that enormous stretches are nearly deterministic given context, and a large share of the positions where the model is confident are exactly the positions that carry the semantics: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 1. After "for size t i = 0; i" the model is close to certain about the // next token. It is also the token that decides whether this loop // reads one element past the end of the buffer. for size t i = 0; i <= n; i++ / '<' vs '<=' -- one token, one overflow / dst i = src i ; // 2. Same shape, different failure. Bitwise-and evaluates both sides and // drops short-circuiting, so the null check stops protecting the deref. if p = NULL & p- len 0 / '&' vs '&&' -- one token, one segfault / use p ; // 3. Overlap-safety is a single identifier. Both compile; one is UB. memcpy buf, buf + 4, len ; / 'memcpy' vs 'memmove' / // 4. Signedness is one token and changes the comparison's meaning entirely. int len = get length ; / 'int' vs 'size t' / if len < MAX copy buf, src, len ; / negative len passes the check / Each of these is a single-token difference. Each compiles. Each is a well-known CWE. And in each case the surrounding context makes the model quite confident about which token it wants — which is to say, these are precisely the low-entropy positions where a watermark has nowhere to hide. That gives two horns, and they are not symmetric: If a scheme does perturb high-confidence positions, it can flip a semantically load-bearing token, and in code there is no such thing as a harmless synonym. Well-designed schemes avoid this, which is why the soft watermark exists at all. If a scheme does not perturb high-confidence positions — the correct engineering choice, and what every credible construction does — then it carries almost no signal in code. Not a little less than in prose: qualitatively less, because the low-entropy fraction of a program is so much larger, and because the useful unit of generated code is often a 30-line function rather than a 500-word essay. The second horn is the true one, and it is worse for the industry than the first. The failure mode is institutional, not cryptographic Put the pieces together. Watermarking is strongest on long, high-entropy, redundant text. It is weakest on short, low-entropy, structured text. Code is short, low-entropy, and structured. So the provenance signal is weakest exactly on the artifact class where the provenance question has real consequences — and it is arriving at the moment when regulation, procurement, and CI pipelines are starting to build policy on top of it. php graph LR A "High entropy