Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Does the cleaned result update when I edit the source?

The current homepage updates the source counter but leaves the previous result after a source edit. Press Clean again before copying; our callback sequence reproduces the stale-result state.

Tested October 7, 2026 · v24.19.0 · 3 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for New plain source

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. File API and event-lifecycle tests include an additional stage described in the analysis. 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
New plain source
direct string / keep / invisible true
"CD"
U+0043 U+0044
"CD"
No selected invisible characters found
{"newSource":"CD","sourceCounter":"2 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}
{"newSource":"CD","sourceCounter":"2 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}
New marked source
direct string / keep / invisible true
"C​D"
U+0043 U+200B U+0044
"CD"
Removed 1 invisible character
{"newSource":"C​D","sourceCounter":"3 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}
{"newSource":"CD","sourceCounter":"2 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}
Empty new source
direct string / keep / invisible true
""
""
No selected invisible characters found
{"newSource":"","sourceCounter":"0 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}
{"newSource":"","sourceCounter":"0 characters","result":"AB","status":"Removed 1 invisible character","copyValue":"AB","copyEnabled":true}

The previous result remains until the next clean

Our observer first cleans A, U+200B and B to produce AB. It then replaces the source with each row input, triggers the source input callback and invokes the copy callback against a local clipboard mock. The source counter changes, but the result and copied value remain AB. That also happens when the newly edited source is empty. The observer rebuilds an independent page harness for each observation; the before and after columns differ only in whether the supplied new source has passed through the separate cleaner test. The saved sequence exposes the lifecycle issue explicitly.

A local callback test has defined limits

The input listener in the current script updates the input count only; it does not recompute or clear the result. The copy callback reads the result field rather than the source field. The mock records that passed value and does not touch the system clipboard. A separate live-browser source edit confirms the visible stale result. This experiment concerns event ordering and displayed state, not whether applying Clean twice to an unchanged string is stable. We do not measure other browser extensions, focus behavior, operating-system clipboard history or an application receiving the copied text.

Clean the final source before copying it

After editing or replacing the input, press Clean and review the resulting field before using Copy. Compare that field with the version you actually intend to send. A previously successful removal report describes an earlier input and should not be reused as evidence about a new one. Keep meaningful originals if you need a before-and-after record. The current behavior is documented here so the workflow can be reproduced; this article does not silently change the homepage implementation. A future UI repair should clear or recompute stale results and be verified against both edit and file-load sequences.

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

HTML input events 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.