CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why does a cleaned date formatter still reject a time zone?
Deleting U+200B repairs our marked UTC option, but the invented Mars/Olympus zone still throws RangeError. The valid New York reference formats the same instant on the preceding calendar date.
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 time zone direct string / keep / invisible true | "UTC"U+0055 U+200B U+0054 U+0043 | "UTC"Removed 1 invisible character | {"accepted":false,"errorName":"RangeError"}{"accepted":true,"resolvedTimeZone":"UTC","formatted":"01/01/2026, 00"} |
| Plain UTC direct string / keep / invisible true | "UTC"U+0055 U+0054 U+0043 | "UTC"No selected invisible characters found | {"accepted":true,"resolvedTimeZone":"UTC","formatted":"01/01/2026, 00"}{"accepted":true,"resolvedTimeZone":"UTC","formatted":"01/01/2026, 00"} |
| Named time zone direct string / keep / invisible true | "America/New_York"U+0041 U+006D U+0065 U+0072 U+0069 U+0063 U+0061 U+002F U+004E U+0065 U+0077 U+005F U+0059 U+006F U+0072 U+006B | "America/New_York"No selected invisible characters found | {"accepted":true,"resolvedTimeZone":"America/New_York","formatted":"12/31/2025, 19"}{"accepted":true,"resolvedTimeZone":"America/New_York","formatted":"12/31/2025, 19"} |
| Unknown zone direct string / keep / invisible true | "Mars/Olympus"U+004D U+0061 U+0072 U+0073 U+002F U+004F U+006C U+0079 U+006D U+0070 U+0075 U+0073 | "Mars/Olympus"No selected invisible characters found | {"accepted":false,"errorName":"RangeError"}{"accepted":false,"errorName":"RangeError"} |
The option string is validated independently of the date
The first fixture places a marker inside UTC. Intl.DateTimeFormat rejects that option before cleanup and accepts the exact UTC spelling afterward. Its resolved zone is UTC and our fixed instant formats as January first at hour zero. The plain UTC reference already has that result. America/New_York is accepted and formats the same instant as December thirty-first at hour nineteen. The invented Mars/Olympus option remains rejected. Each row records either a successful resolved zone and formatted value or the exception name. No current wall-clock time enters the test, so its output is reproducible for this recorded runtime and locale data.
A locale tag does not substitute for a time zone
The observer sets en-US explicitly and varies only the timeZone option. It uses a fixed ISO instant with a Z suffix and does not parse a user-entered date. Our older Date.parse article checks input grammar, while Intl.Locale validates language tags; neither supplies this formatter’s zone contract. The New York date difference is an output of the chosen zone, not a change to the instant or a cleanup effect. We do not infer the user’s location, use the host’s default zone or test daylight-saving transitions. The cleaner removes selected code points and cannot choose a suitable zone from a misspelled or unsupported identifier.
Keep the zone policy with the formatting request
Retain the original option and verify the intended zone against the destination runtime’s accepted identifiers. After a targeted edit, inspect the resolved option and format a known instant before trusting a calendar date. A successfully cleaned string can still be an invalid zone, as the invented reference shows. Conversely, two accepted zones can display different dates for the same instant. These four fixtures establish option validation and one explicit contrast in Node, without asserting support in every browser, predicting future zone database changes or implementing a date scheduling policy. The test’s locality and fixed arguments should accompany any exported result.
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.DateTimeFormat 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.