Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Can cleaning a replacement string activate a dollar template?

Yes. Deleting U+200B between $ and & creates the replacement template $&, which inserts the matched text. A replacement callback can instead return the same characters literally.

Tested October 9, 2026 · v24.19.0 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Interrupted template

Measured inputs and outputs

These are locally constructed test strings, not evidence that Claude inserts these characters. We executed the saved homepage script snapshot with a minimal DOM harness and compared exact strings. The invisible-checkbox state and dash mode appear in each row. The observations below test this page's specific question. Destination observations run independently on the exact input and cleaned strings in the recorded Node runtime. We make no detector-score or statistical-watermark removal claim.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Interrupted template
direct string / keep / invisible true
"$​&"
U+0024 U+200B U+0026
"$&"
Removed 1 invisible character
{"stringReplacement":"a$​&c","callbackReplacement":"a$​&c"}
{"stringReplacement":"abc","callbackReplacement":"a$&c"}
Match template
direct string / keep / invisible true
"$&"
U+0024 U+0026
"$&"
No selected invisible characters found
{"stringReplacement":"abc","callbackReplacement":"a$&c"}
{"stringReplacement":"abc","callbackReplacement":"a$&c"}
Literal dollar template
direct string / keep / invisible true
"$$"
U+0024 U+0024
"$$"
No selected invisible characters found
{"stringReplacement":"a$c","callbackReplacement":"a$$c"}
{"stringReplacement":"a$c","callbackReplacement":"a$$c"}
Ordinary text
direct string / keep / invisible true
"X"
U+0058
"X"
No selected invisible characters found
{"stringReplacement":"aXc","callbackReplacement":"aXc"}
{"stringReplacement":"aXc","callbackReplacement":"aXc"}

The replacement string has a grammar too

The fixed input is abc and the fixed search text is b. Before cleanup, the interrupted dollar-and-ampersand spelling is inserted as literal replacement data, including its marker. Cleanup joins the characters into the recognized dollar template that inserts the matched b, so the string-replacement output becomes abc. Returning that cleaned spelling from a callback instead inserts the literal dollar and ampersand. The ordinary template, double-dollar and X references reveal the two return paths independently. We record both complete outputs so the marker deletion and the replacement interpretation cannot be confused with a change in the search match.

Matching behavior is held constant

Our earlier regex guide measures changes to a compiled pattern and its positive or negative matches. This test holds a simple string search constant and edits only the replacement argument. No regular expression, capture group, replacement file, editor macro or external template engine is invoked. ECMAScript specifies replacement-string substitutions and callback return behavior. The cleaner does not know which argument its output will become and cannot protect dollar sequences from interpretation. The fixtures are synthetic local strings, not real documents or evidence of a Claude marker. The recorded runtime identifies the exact String.replace behavior measured here.

Decide whether the replacement is syntax or data

When a replacement is intended to be literal text, use the destination API mechanism that preserves that intention and test a minimal before-and-after example. If template substitutions are intentional, keep their syntax explicit and inspect a selected-character edit before applying it to many matches. Preserve the original template and representative expected outputs. A successful cleanup does not imply that a replacement operation has the same meaning afterward. These four cases demonstrate one newly activated template and the difference from callback data; they do not evaluate every dollar substitution, nested serializer or search-and-replace application.

Reproduce this test

Save reproduce.cjs and tested-app.js in the same folder. Run the command below with Node.js. The harness prints its runtime, script SHA-256 and every measured row. Compare those rows with the original record. Using a newer script or runtime creates a new experiment; retain the version information with your rerun.

node reproduce.cjs

Reference and next check

ECMAScript String.replace provides the relevant primary definition. The table and fixture analysis are original measurements. For broader inspection, use our Unicode inspector. Read the scope distinction before interpreting cleanup as a watermark result.