Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does searching for cooperation miss a visible match?

A stored U+00AD soft hyphen can interrupt exact matching. Our cooperation fixture fails an ordinary substring search until cleanup. A visible hyphen and a non-breaking hyphen remain separate spelling decisions.

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

Open the Claude text cleaner · Full measured data

Code-point comparison for Soft hyphen

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. Invisible removal is enabled; the dash mode appears in each row. The observations below test this page's specific question. 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
Soft hyphen
direct string / keep
"co­operation"
U+0063 U+006F U+00AD U+006F U+0070 U+0065 U+0072 U+0061 U+0074 U+0069 U+006F U+006E
"cooperation"
Removed 1 invisible character
{"query":"cooperation","matchIndex":-1,"codePointCount":12}
{"query":"cooperation","matchIndex":0,"codePointCount":11}
Ordinary visible hyphen
direct string / keep
"co-operation"
U+0063 U+006F U+002D U+006F U+0070 U+0065 U+0072 U+0061 U+0074 U+0069 U+006F U+006E
"co-operation"
No selected invisible characters found
{"query":"cooperation","matchIndex":-1,"codePointCount":12}
{"query":"cooperation","matchIndex":-1,"codePointCount":12}
Non-breaking hyphen
direct string / keep
"co‑operation"
U+0063 U+006F U+2011 U+006F U+0070 U+0065 U+0072 U+0061 U+0074 U+0069 U+006F U+006E
"co‑operation"
No selected invisible characters found
{"query":"cooperation","matchIndex":-1,"codePointCount":12}
{"query":"cooperation","matchIndex":-1,"codePointCount":12}
Uninterrupted reference
direct string / keep
"cooperation"
U+0063 U+006F U+006F U+0070 U+0065 U+0072 U+0061 U+0074 U+0069 U+006F U+006E
"cooperation"
No selected invisible characters found
{"query":"cooperation","matchIndex":0,"codePointCount":11}
{"query":"cooperation","matchIndex":0,"codePointCount":11}

What the search test established

We used JavaScript indexOf with the literal query cooperation. The soft-hyphen source returns -1; after cleanup it returns 0. The ordinary-hyphen and non-breaking-hyphen fixtures both continue returning -1 because the homepage preserves those characters when dash mode is Keep. The uninterrupted reference returns 0 before and after. The recorded code points distinguish U+00AD, U+002D and U+2011, which may look similar or appear only under particular line wrapping.

This is an exact string test, not a search-engine study

The fixtures are hand-constructed strings, not observed Claude outputs. We tested neither Google rankings nor the search implementation in Word, a PDF reader or a website. Those systems may normalize or tokenize text differently. Unicode line-breaking rules describe the discretionary use of soft hyphen and the no-break behavior of U+2011. Our experiment answers only whether this cleaner changes the string so that this exact JavaScript query matches. No detector score or indexing claim follows from that result.

Choose the intended spelling

For an accidental discretionary hyphen inside an otherwise uninterrupted word, removing U+00AD can restore the intended exact form. For an intentionally hyphenated term, retain the visible punctuation or choose an editorial spelling consistently. If the source is a PDF extraction, inspect for inserted ordinary hyphens and line breaks as well; removing soft hyphens alone may leave other obstacles. The homepage does not run spellchecking, dehyphenate line-end words or merge paragraphs. Keep a source copy and test the exact destination query after approving the repair. The results show why one universal hyphen-removal rule would conflate different characters and intentions.

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

Unicode line breaking 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.