CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Can two strings compare equal for sorting but differ exactly?
Yes in our recorded English Intl.Collator tests: AB and A + U+200B + B compare as equal for collation while strict string equality fails. Save both comparisons when diagnosing a mismatch.
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. 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 |
|---|---|---|---|
| Selected marker direct string / keep / invisible true | "AB"U+0041 U+200B U+0042 | "AB"Removed 1 invisible character | {"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}{"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}} |
| Retained direction mark direct string / keep / invisible true | "AB"U+0041 U+200E U+0042 | "AB"No selected invisible characters found | {"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}{"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}} |
| Visible reference direct string / keep / invisible true | "AB"U+0041 U+0042 | "AB"No selected invisible characters found | {"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}{"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}} |
Two different equivalence decisions
The observer compares each string against AB twice: strict equality checks the sequence, while Intl.Collator compares according to its configured locale rules. In this runtime, the selected-marker and retained-direction-mark fixtures both compare as collation zero before cleaning while strict equality is false. Cleanup makes the selected-marker fixture strictly equal to AB. The direction-mark fixture remains strictly unequal because U+200E is retained. The visible reference is equal by both methods throughout. Each row includes the resolved collator settings rather than silently assuming them.
Zero is a sorting result, not an identical sequence
Intl.Collator can treat some characters as ignorable under a locale implementation. That is a distinct question from whether two strings contain the same code points. We did not test a database collation, operating-system file ordering, another locale or another ICU version. The runtime and resolved options in results.json delimit the observation. The homepage does not call a collator; it deletes selected code points. A visually identical sort grouping can therefore coexist with a failed exact match in a different stage of a workflow.
Record the comparator your destination uses
When a sorted list seems correct but a lookup fails, compare exact strings and record the sorting comparator separately. Do not deduplicate records just because a locale comparator returns zero. Confirm the identifier policy and inspect original code points before applying a targeted edit. If the destination defines its own collation, test that actual implementation. This experiment explains one discrepancy and preserves its reproduction data; it does not prescribe a universal equality policy or certify that a sorted collection contains unique identifiers.
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
ECMA-402 Intl.Collator 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.