Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does a date range show one date when the timestamps differ?

Our date-only UTC formatter displays Oct 16, 2026 for noon to 13:00 even though the instants differ. Every displayed part is shared. Cleanup repairs the marked hour; the formatter’s selected fields explain the collapsed label.

Tested October 16, 2026 · v24.19.0 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked hour

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.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Marked hour
direct string / keep / invisible true
"1​2"
U+0031 U+200B U+0032
"12"
Removed 1 invisible character
{"numberLabel":"NaN","errorName":"RangeError"}
{"numberLabel":"12","sameInstant":false,"startIso":"2026-10-16T12:00:00.000Z","endIso":"2026-10-16T13:00:00.000Z","range":"Oct 16, 2026","partSources":["shared"]}
Noon control
direct string / keep / invisible true
"12"
U+0031 U+0032
"12"
No selected invisible characters found
{"numberLabel":"12","sameInstant":false,"startIso":"2026-10-16T12:00:00.000Z","endIso":"2026-10-16T13:00:00.000Z","range":"Oct 16, 2026","partSources":["shared"]}
{"numberLabel":"12","sameInstant":false,"startIso":"2026-10-16T12:00:00.000Z","endIso":"2026-10-16T13:00:00.000Z","range":"Oct 16, 2026","partSources":["shared"]}
Earlier hour
direct string / keep / invisible true
"10"
U+0031 U+0030
"10"
No selected invisible characters found
{"numberLabel":"10","sameInstant":false,"startIso":"2026-10-16T10:00:00.000Z","endIso":"2026-10-16T13:00:00.000Z","range":"Oct 16, 2026","partSources":["shared"]}
{"numberLabel":"10","sameInstant":false,"startIso":"2026-10-16T10:00:00.000Z","endIso":"2026-10-16T13:00:00.000Z","range":"Oct 16, 2026","partSources":["shared"]}
Invalid hour
direct string / keep / invisible true
"bad"
U+0062 U+0061 U+0064
"bad"
No selected invisible characters found
{"numberLabel":"NaN","errorName":"RangeError"}
{"numberLabel":"NaN","errorName":"RangeError"}

Different instants can have the same selected display fields

The observer fixes October 16, 2026 in UTC and an end instant at 13:00. The repaired marked hour becomes noon. Its start and end ISO strings differ by one hour, and sameInstant is false, yet formatRange returns the single date Oct 16, 2026. The noon control repeats the result without cleanup; the earlier-hour control differs by three hours but still displays that same date. We also collect the source labels returned by formatRangeToParts. Each successful row contains only shared, which ties the single label to the formatter output instead of inferring equality from the rendered words. The invalid-hour control remains invalid.

The formatter intentionally has no time fields

We request year, month and day, with English US locale and UTC timezone. Because no hour or minute is displayed, all successful pairs are indistinguishable at the chosen formatting precision. We record ISO strings separately to retain the finer temporal evidence. The malformed hour is converted through Number and creates an invalid Date; its row records RangeError within the observation, without claiming that a range label was produced. Earlier guides discuss timestamp units and relative-time language. This test formats a pair of actual fixed instants and measures range presentation. It does not read the current clock, schedule an event, cross a daylight-saving boundary or predict wording for every locale.

Retain instants separately from their human-readable label

Use the underlying timestamp values for equality and duration checks instead of comparing a date-only range string. If users need to see the time difference, deliberately select suitable time fields and verify the intended timezone and actual output; that alternative formatter is not measured in this matrix. Preserve the complete start and end values wherever a later decision depends on them. Our runtime and ICU metadata accompany the data because locale wording can vary across versions. A successful cleanup changes the input hour’s parseability here, while the repeated single-date output comes from display options. Neither observation proves a watermark was detected, removed or altered in a real Claude passage.

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.cjs

Reference and next check

ECMA-402 Intl.DateTimeFormat formatRange 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.