Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Can cleaning a category label merge groupBy buckets?

Yes. Our marked red label forms its own bucket before cleaning. Object.groupBy then places both A and B under red after deletion. Both records survive; the number of categories changes.

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

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked group

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 group
direct string / keep / invisible true
"re​d"
U+0072 U+0065 U+200B U+0064
"red"
Removed 1 invisible character
{"keys":["red","re​d"],"groups":{"red":["A"],"re​d":["B"]},"nullPrototype":true}
{"keys":["red"],"groups":{"red":["A","B"]},"nullPrototype":true}
Plain group
direct string / keep / invisible true
"red"
U+0072 U+0065 U+0064
"red"
No selected invisible characters found
{"keys":["red"],"groups":{"red":["A","B"]},"nullPrototype":true}
{"keys":["red"],"groups":{"red":["A","B"]},"nullPrototype":true}
Retained joiner
direct string / keep / invisible true
"re‍d"
U+0072 U+0065 U+200D U+0064
"re‍d"
No selected invisible characters found
{"keys":["red","re‍d"],"groups":{"red":["A"],"re‍d":["B"]},"nullPrototype":true}
{"keys":["red","re‍d"],"groups":{"red":["A"],"re‍d":["B"]},"nullPrototype":true}
Other group
direct string / keep / invisible true
"blue"
U+0062 U+006C U+0075 U+0065
"blue"
No selected invisible characters found
{"keys":["red","blue"],"groups":{"red":["A"],"blue":["B"]},"nullPrototype":true}
{"keys":["red","blue"],"groups":{"red":["A"],"blue":["B"]},"nullPrototype":true}

Two records survive while their category boundary changes

The observer authors record A with category red and record B with the tested category. A marked red spelling initially produces two keys and separate one-record buckets. After the selected deletion, there is one red bucket containing A followed by B. The plain category already groups both records together. The retained-joiner control still has two buckets, as does the blue reference. We record bucket keys, every record ID and whether the result has a null prototype. This establishes that the observed merge combines membership rather than discarding B or replacing A. A category count alone would not reveal that distinction.

Grouping preserves records under a callback result

Object.groupBy runs on our two authored objects with a callback returning each group string. Only B’s label varies between stages; A and both IDs stay fixed. Our Map article overwrites an attached value when a key already exists, whereas this operation collects both matching items in an array. The Set article removes an equal label from a string collection. Neither describes these bucket contents. The homepage itself performs no aggregation, totals or grouping. We do not compute a real sales report, test integer-like key ordering or pass object-valued categories. The experiment concerns this callback, these string keys and the recorded runtime’s implementation.

Check membership before accepting repaired categories

Retain original category labels beside record IDs, then compare grouped membership after an intended edit. If two categories become one, confirm that the merged bucket represents the destination’s meaning rather than treating a smaller key count as automatic improvement. The null-prototype result is recorded as an implementation observation, not permission to skip schema validation. Our four cases show a selected spelling merge and unchanged controls while retaining both records. They do not define a reporting taxonomy, reconcile totals or infer that a marker was inserted by Claude. A statistical watermark assessment would require a different verifier from either this grouping operation or the character cleaner.

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 Object.groupBy 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.