Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Will cleanup make a pasted email address valid?

Only the selected-marker fixture becomes valid in our browser email input. A retained joiner and a missing @ remain invalid. Format acceptance does not verify mailbox ownership or delivery.

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

Open the Claude text cleaner · Full measured data

Code-point comparison for Selected marker

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. Three destination checks use separately recorded browser observations; those pages explain the distinction. 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
Selected marker
direct string / keep / invisible true
"u​ser@example.com"
U+0075 U+200B U+0073 U+0065 U+0072 U+0040 U+0065 U+0078 U+0061 U+006D U+0070 U+006C U+0065 U+002E U+0063 U+006F U+006D
"user@example.com"
Removed 1 invisible character
{"typeMismatch":true,"valid":false,"value":"u​ser@example.com"}
{"typeMismatch":false,"valid":true,"value":"user@example.com"}
Retained joiner
direct string / keep / invisible true
"u‍ser@example.com"
U+0075 U+200D U+0073 U+0065 U+0072 U+0040 U+0065 U+0078 U+0061 U+006D U+0070 U+006C U+0065 U+002E U+0063 U+006F U+006D
"u‍ser@example.com"
No selected invisible characters found
{"typeMismatch":true,"valid":false,"value":"u‍ser@example.com"}
{"typeMismatch":true,"valid":false,"value":"u‍ser@example.com"}
Ordinary address
direct string / keep / invisible true
"user@example.com"
U+0075 U+0073 U+0065 U+0072 U+0040 U+0065 U+0078 U+0061 U+006D U+0070 U+006C U+0065 U+002E U+0063 U+006F U+006D
"user@example.com"
No selected invisible characters found
{"typeMismatch":false,"valid":true,"value":"user@example.com"}
{"typeMismatch":false,"valid":true,"value":"user@example.com"}
Missing at
direct string / keep / invisible true
"user.example.com"
U+0075 U+0073 U+0065 U+0072 U+002E U+0065 U+0078 U+0061 U+006D U+0070 U+006C U+0065 U+002E U+0063 U+006F U+006D
"user.example.com"
No selected invisible characters found
{"typeMismatch":true,"valid":false,"value":"user.example.com"}
{"typeMismatch":true,"valid":false,"value":"user.example.com"}

The browser validates the edited address

Each observation creates a detached HTML input, sets its type to email and assigns the exact fixture string. The selected U+200B address produces a typeMismatch before cleanup and no mismatch after the output becomes user@example.com. The U+200D address stays invalid because that joiner is retained. The ordinary reference is valid at both stages, while the missing-at fixture remains invalid. We save the actual input value, typeMismatch and validity.valid from the browser. No form is submitted, no mailbox is contacted and no address is inferred from a real user account.

This check has a defined destination grammar

The HTML Standard defines the email input state and its validity rules. The homepage performs selected character deletion without implementing those rules, and it cannot repair missing syntax such as an at sign. The recorded Chromium version and browser JSON identify this experiment independently from the Node cleanup harness. These inputs are simple ASCII addresses with one chosen inserted character, not a test of every internationalized address, multiple-address input or server-side validation library. Browser format validity is only this grammar result; it does not establish existence, ownership, deliverability or the address that a person intended to provide.

Confirm the intended identity before editing

Preserve the original pasted address and ask its owner or originating system for the intended spelling when uncertain. After an evidence-based edit, validate through the destination application and use its normal verification workflow if ownership matters. Do not treat every invisible character as permission to rewrite an account identifier automatically. A change can select a different identity even when the resulting string is accepted by a form. Our downloadable browser harness reruns these detached-element checks locally, and the Node harness independently rechecks cleanup. The results establish one selected-character repair and two unchanged failures, rather than a general email sanitizer.

Reproduce this test

Download the independent browser test and open it locally to rerun the destination observer. Original Chromium record identifies the browser version. The Node harness rechecks the cleanup callback and joins its outputs with those saved browser observations; it does not rerun the browser validator. Save browser-record.json beside the other downloads for that join. 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

HTML email input state 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.