CLAUDE WATERMARK REMOVER · DESTINATION TEST
Does String.raw turn a hidden character in a variable into a visible escape?
No. The measured interpolation retains the actual marker; cleaning that interpolated result removes it.
What the test establishes
A variable carries the actual marker before the tagged template runs. String.raw preserves raw template segments but inserts the variable value as text. The recorded units therefore still include 200b until cleanup runs. To build diagnostic displays, explicitly escape code points instead of assuming a raw template tag renders every interpolated invisible character visibly.
Reproduce the observation
Save tested-app.js and reproduce.cjs together, then run node reproduce.cjs. Compare its output with the recorded observation. The harness executes the actual homepage callback in a minimal DOM and records its resulting field values and method calls. Destination operations run in Node.js; the homepage DOM is a controlled substitute. Runtime: v24.22.1. No submitted text or genuine Claude output is used.
{
"rawUnits": [
"41",
"200b",
"42"
],
"cleaned": "AB"
}Capability boundary
This tests interpolation, not raw versus cooked literal segments already documented elsewhere. The synthetic string is not captured Claude output and establishes no provenance claim.
This Claude watermark remover edits a small selected character set. These callback observations do not establish authorship, detector scores, statistical-watermark removal or end-to-end browser behavior. For real work, keep the original and compare the exact result at its destination.
Primary material and next step
The tested first-party source snapshot and complete harness are the primary material for this page. For broader scope, read invisible Unicode versus AI watermarks, or return to the cleaner.