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.
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. 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.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Soft hyphen direct string / keep | "cooperation"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.cjsReference 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.