Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Can cleaning a label reduce the number of distinct Set values?

Yes. Our Set contains alpha and alpha + U+200B as two strings before cleaning. After deletion they become one value; case differences and retained U+200D remain distinct.

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

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked label

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
Marked label
direct string / keep / invisible true
"alpha​"
U+0061 U+006C U+0070 U+0068 U+0061 U+200B
"alpha"
Removed 1 invisible character
{"inputCount":2,"uniqueCount":2,"uniqueValues":["alpha","alpha​"]}
{"inputCount":2,"uniqueCount":1,"uniqueValues":["alpha"]}
Plain label
direct string / keep / invisible true
"alpha"
U+0061 U+006C U+0070 U+0068 U+0061
"alpha"
No selected invisible characters found
{"inputCount":2,"uniqueCount":1,"uniqueValues":["alpha"]}
{"inputCount":2,"uniqueCount":1,"uniqueValues":["alpha"]}
Retained joiner
direct string / keep / invisible true
"alpha‍"
U+0061 U+006C U+0070 U+0068 U+0061 U+200D
"alpha‍"
No selected invisible characters found
{"inputCount":2,"uniqueCount":2,"uniqueValues":["alpha","alpha‍"]}
{"inputCount":2,"uniqueCount":2,"uniqueValues":["alpha","alpha‍"]}
Different case
direct string / keep / invisible true
"Alpha"
U+0041 U+006C U+0070 U+0068 U+0061
"Alpha"
No selected invisible characters found
{"inputCount":2,"uniqueCount":2,"uniqueValues":["alpha","Alpha"]}
{"inputCount":2,"uniqueCount":2,"uniqueValues":["alpha","Alpha"]}

A selected edit collapses a collection member

Each observer starts with the fixed label alpha and adds the tested string as its second item. The marked row initially yields two distinct Set values because the second spelling includes U+200B. After cleanup, the two strings are identical, the Set size becomes one and the surviving value is alpha. The plain reference starts with one unique value at both stages. U+200D remains in its own label and leaves two values. Capitalized Alpha also remains distinct because the cleaner does not lowercase it. Recording both size and the surviving values exposes information that a removal counter alone cannot describe.

The test does not select a record to keep

Our array contains labels only, with no attached customer record, timestamp or payload. The measured operation is JavaScript Set construction on strings, using the recorded runtime. We do not measure database uniqueness, a merge algorithm, locale collation or object identity. The existing JSON collision guide asks what happens to object keys during parsing; here no JSON object is parsed and the observable consequence is a collection losing a distinct member. The homepage callback neither deduplicates an array nor warns about labels that become equal. All labels are authored examples and provide no evidence about actual Claude output.

Compare multiplicity before applying batch edits

Retain the original label list and associate each edited label with its originating record before deduplication. If two edited values coincide, decide whether that equality is intended and what should happen to their separate payloads. Avoid silently discarding a record merely because a string-only Set has one surviving label. The case and retained-joiner controls show that this cleaner is not a universal identity normalizer. Our experiment supplies exact strings and collection counts for four small cases; it does not specify a production merge policy or prove that visually similar labels refer to the same entity.

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 Set 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.