CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why does an ISO date still fail after cleanup?
Our ISO timestamp with U+200B parses after deletion. The retained NBSP and U+200D fixtures still return NaN; cleanup is not a date-format validator.
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. Three destination checks use separately recorded browser observations; those pages explain the distinction. 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 | "2026-10-08T09:00:00Z"U+0032 U+0030 U+0032 U+0036 U+002D U+0031 U+0030 U+002D U+0030 U+0038 U+0054 U+0030 U+0039 U+003A U+200B U+0030 U+0030 U+003A U+00 … | "2026-10-08T09:00:00Z"Removed 1 invisible character | {"accepted":false,"timestamp":null,"iso":null}{"accepted":true,"timestamp":1791450000000,"iso":"2026-10-08T09:00:00.000Z"} |
| Retained NBSP direct string / keep / invisible true | "2026-10-08T09: 00:00Z"U+0032 U+0030 U+0032 U+0036 U+002D U+0031 U+0030 U+002D U+0030 U+0038 U+0054 U+0030 U+0039 U+003A U+00A0 U+0030 U+0030 U+003A U+00 … | "2026-10-08T09: 00:00Z"No selected invisible characters found | {"accepted":false,"timestamp":null,"iso":null}{"accepted":false,"timestamp":null,"iso":null} |
| Retained joiner direct string / keep / invisible true | "2026-10-08T09:00:00Z"U+0032 U+0030 U+0032 U+0036 U+002D U+0031 U+0030 U+002D U+0030 U+0038 U+0054 U+0030 U+0039 U+003A U+200D U+0030 U+0030 U+003A U+00 … | "2026-10-08T09:00:00Z"No selected invisible characters found | {"accepted":false,"timestamp":null,"iso":null}{"accepted":false,"timestamp":null,"iso":null} |
| UTC reference direct string / keep / invisible true | "2026-10-08T09:00:00Z"U+0032 U+0030 U+0032 U+0036 U+002D U+0031 U+0030 U+002D U+0030 U+0038 U+0054 U+0030 U+0039 U+003A U+0030 U+0030 U+003A U+0030 U+00 … | "2026-10-08T09:00:00Z"No selected invisible characters found | {"accepted":true,"timestamp":1791450000000,"iso":"2026-10-08T09:00:00.000Z"}{"accepted":true,"timestamp":1791450000000,"iso":"2026-10-08T09:00:00.000Z"} |
The character is inserted at a known position
All fixtures use the same explicit UTC date and time. The first three insert one character immediately after the hour colon. Date.parse rejects the selected U+200B input, then accepts its cleaned timestamp. The NBSP and U+200D inputs remain unchanged and rejected. The ordinary reference parses before and after cleanup. We save a null timestamp for rejection rather than allowing JSON serialization of NaN to obscure what happened; a separate accepted field records the result. The ISO output confirms the timestamp interpretation for accepted rows without depending on the machine local timezone.
Parsing is specific to this representation
The test uses an explicit Z timezone and a fixed ISO-style format. ECMAScript defines its date time string format and also permits implementation-specific handling for other strings. These four results therefore should not be generalized to locale-formatted dates, two-digit years or every invalid calendar day. Our earlier numeric conversion guide does not check a date grammar and cannot replace this destination test. The homepage neither calls Date.parse nor validates timezones. No calendar application, server framework or scheduling system was used. A parsed timestamp also does not establish that the intended event time was entered correctly.
Validate the intended date contract
Preserve the source timestamp and confirm its expected format and timezone with the originating system. Inspect a known suspicious position, then perform a deliberate edit and rerun the same destination parser. Do not delete all spaces from an arbitrary date to force acceptance, because an application may use a different syntax or timezone policy. Compare the accepted timestamp with the intended instant and apply stricter calendar validation where required. A no-findings report concerns only the selected deletion map; retained characters can still invalidate this format. These fixtures illustrate a reproducible local parsing boundary rather than a universal date repair algorithm.
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
ECMAScript Date.parse 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.