CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Can repairing a Map key replace an existing value?
Yes. Our marked name key adds a second entry before cleaning. After deletion it becomes name, and Map.set replaces the original value with incoming. The cleaner itself does not choose which payload survives.
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. 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.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Marked key direct string / keep / invisible true | "name"U+006E U+0061 U+200B U+006D U+0065 | "name"Removed 1 invisible character | {"size":2,"entries":[["name","original"],["name","incoming"]],"nameValue":"original"}{"size":1,"entries":[["name","incoming"]],"nameValue":"incoming"} |
| Plain key direct string / keep / invisible true | "name"U+006E U+0061 U+006D U+0065 | "name"No selected invisible characters found | {"size":1,"entries":[["name","incoming"]],"nameValue":"incoming"}{"size":1,"entries":[["name","incoming"]],"nameValue":"incoming"} |
| Retained joiner direct string / keep / invisible true | "name"U+006E U+0061 U+200D U+006D U+0065 | "name"No selected invisible characters found | {"size":2,"entries":[["name","original"],["name","incoming"]],"nameValue":"original"}{"size":2,"entries":[["name","original"],["name","incoming"]],"nameValue":"original"} |
| Other key direct string / keep / invisible true | "alias"U+0061 U+006C U+0069 U+0061 U+0073 | "alias"No selected invisible characters found | {"size":2,"entries":[["name","original"],["alias","incoming"]],"nameValue":"original"}{"size":2,"entries":[["name","original"],["alias","incoming"]],"nameValue":"original"} |
Attached values expose more than a duplicate count
Each observer starts with a Map containing name mapped to original and then sets the tested key to incoming. The marked spelling initially creates a second entry and preserves the original name value. After deletion, the repaired name targets the existing entry: the size becomes one and name now resolves to incoming. The plain name control has that overwrite at both stages. A retained U+200D key and the alias reference each leave two entries. Saving the ordered entries and the specific name lookup makes the surviving payload explicit. A size-only report would hide which authored value had been replaced by the insertion.
This experiment mutates a fresh in-memory Map
The original and incoming strings are invented payload labels. A fresh Map is created for each stage, so the before insertion cannot influence the after observation. Our prior Set guide has no attached values and loses a distinct label; the JSON key article studies a document parser. This page instead measures an explicit Map.set mutation with a fixed existing value. The cleaner does not manipulate the collection, store records or decide that two repaired names identify the same entity. We do not exercise object keys, database upserts, persistence or concurrent writers. These limits matter when translating the small demonstration into an actual import workflow.
Choose a collision policy before inserting repaired keys
Associate every original key with its payload and compare repaired keys against the destination’s existing entries before mutation. When a repaired spelling collides, decide whether replacement, rejection or a deliberate merge is intended. A Map size of one cannot prove that the correct payload survived. The controls show that visually similar retained joiners remain distinct under this cleaner and ordinary exact names already overwrite without a marker. Our downloads establish one insertion order and four local outcomes. They do not select a business merge rule, identify duplicate people or guarantee lossless batch cleanup. Review the value policy separately from the targeted text edit.
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 keyed collections and 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.