CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Does deleting U+200B repair a broken JavaScript identifier?
In our test, acc + U+200B + ount fails JavaScript parsing and becomes a valid account identifier after cleaning. A U+200C identifier is valid and remains distinct; do not delete every invisible character.
Open the Claude text cleaner · Full measured data
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. Invisible removal is enabled; the dash mode appears in each row. The observations below test this page's specific question. We make no detector-score or statistical-watermark removal claim.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Invalid hidden separator direct string / keep | "const account = 7; return account;"U+0063 U+006F U+006E U+0073 U+0074 U+0020 U+0061 U+0063 U+0063 U+200B U+006F U+0075 U+006E U+0074 U+0020 U+003D U+0020 U+0037 U+00 … | "const account = 7; return account;"Removed 2 invisible characters | {"parses":false,"error":"SyntaxError"}{"parses":true,"value":7} |
| Valid non-joiner identifier direct string / keep | "const account = 7; return account;"U+0063 U+006F U+006E U+0073 U+0074 U+0020 U+0061 U+0063 U+0063 U+200C U+006F U+0075 U+006E U+0074 U+0020 U+003D U+0020 U+0037 U+00 … | "const account = 7; return account;"No selected invisible characters found | {"parses":true,"value":7}{"parses":true,"value":7} |
| Baseline identifier direct string / keep | "const account = 7; return account;"U+0063 U+006F U+006E U+0073 U+0074 U+0020 U+0061 U+0063 U+0063 U+006F U+0075 U+006E U+0074 U+0020 U+003D U+0020 U+0037 U+003B U+00 … | "const account = 7; return account;"No selected invisible characters found | {"parses":true,"value":7}{"parses":true,"value":7} |
Two invisible characters, different grammar
Our observer constructs a Function from each locally authored fixture and executes it only if parsing succeeds. The U+200B fixture throws SyntaxError before cleaning and returns 7 afterward. The U+200C fixture returns 7 both times and keeps its code points because this character is outside the homepage deletion map. The visible account reference also returns 7 unchanged. This contrasts an invalid separator with a permitted identifier component using the actual engine rather than a visual guess.
Parsing success is a narrow outcome
The ECMAScript lexical grammar allows specific Unicode identifier components, including contextual joiner characters. A valid identifier containing an invisible component is still a different string from the visible spelling. Our test defines and references the same identifier, so it does not claim interoperability with another file or module. The three functions contain no external data or side effects. Do not execute unknown pasted code merely to diagnose it; use a parser or isolated lint workflow for untrusted source.
Repair the named symbol consistently
Inspect every definition and reference of the affected symbol with editor tooling. If an accidental U+200B is identified, review the diff and rerun the program tests after editing. If a valid joiner is deliberate in a language-specific name, preserve it. Renaming a symbol requires checking scope and collisions rather than cleaning arbitrary source files. The homepage is a text filter, without JavaScript parsing, scope analysis or identifier-renaming support. These fixtures establish one syntax repair and one preservation case, not general code safety.
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.cjsReference and next check
ECMAScript lexical grammar 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.