CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Does an accepted Intl currency code prove it is a supported currency?
No. Cleaning repairs our marked USD option, but Intl.NumberFormat also accepts the synthetic ZZZ code. Lowercase usd resolves to USD; two-letter US is rejected. Validate destination policy separately from formatter syntax.
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 USD direct string / keep / invisible true | "USD"U+0055 U+200B U+0053 U+0044 | "USD"Removed 1 invisible character | {"accepted":false,"errorName":"RangeError"}{"accepted":true,"currency":"USD","formatted":"USD 12.50"} |
| Lowercase usd direct string / keep / invisible true | "usd"U+0075 U+0073 U+0064 | "usd"No selected invisible characters found | {"accepted":true,"currency":"USD","formatted":"USD 12.50"}{"accepted":true,"currency":"USD","formatted":"USD 12.50"} |
| Syntactically valid unknown code direct string / keep / invisible true | "ZZZ"U+005A U+005A U+005A | "ZZZ"No selected invisible characters found | {"accepted":true,"currency":"ZZZ","formatted":"ZZZ 12.50"}{"accepted":true,"currency":"ZZZ","formatted":"ZZZ 12.50"} |
| Wrong code length direct string / keep / invisible true | "US"U+0055 U+0053 | "US"No selected invisible characters found | {"accepted":false,"errorName":"RangeError"}{"accepted":false,"errorName":"RangeError"} |
An accepted option has a narrower meaning than support
Our first option places U+200B inside USD. The formatter rejects it with RangeError before deletion and accepts the repaired spelling afterward. Lowercase usd is accepted and resolves to uppercase USD at both stages. The synthetic ZZZ code is also accepted and appears in the formatted output, while the two-letter US control remains rejected. We use currencyDisplay code so the actual code is visible, and hold the numeric value at an invented 12.5. The formatted outputs include a nonbreaking space. That is produced by the destination after cleanup, not evidence that the cleaner failed to remove a character from its input.
The formatter checks a string option rather than a payment
Intl.NumberFormat receives English United States locale, currency style and the tested option. It does not contact a payment service or assert that a code belongs to an accepted commercial list. The ZZZ control is a syntax demonstration and makes no claim about an actual monetary unit. Our time-zone guide varies a DateTimeFormat option with different validation semantics; the numeric guide converts input strings to numbers. Here neither date parsing nor input number conversion occurs. These authored fixtures do not measure exchange rates, settlement support, browser checkout behavior or every ISO currency identifier. The saved observations are limited to the concrete formatter construction and fixed value.
Keep syntax and destination allowlists separate
Retain the requested currency string and validate it against the actual application’s accepted codes when that policy is required. After a deliberate spelling repair, inspect the resolved option and output rather than assuming construction success guarantees meaningful support. Do not infer a missing letter or intended currency from the rejected US control. Our downloads reproduce four option outcomes and disclose the Node locale runtime. They do not provide financial advice, verify amounts or select a payment currency. As with the other character tests, success means a specified local API accepted a specified string; it does not establish removal of a model-level watermark or the provenance of that string.
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.NumberFormat 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.