Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does 12:00:30 fail a time input until step changes?

Our time input retains 12:00:30 but reports stepMismatch with the default configuration. Setting step to 1 accepts it. Cleaning an interrupted seconds field restores its spelling, while second precision remains a separate destination requirement.

Tested October 25, 2026 · v24.22.1 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked seconds

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 were measured separately in Chromium 156 using detached native controls and programmatic value assignment. Node reruns the actual homepage callback and reads the saved browser observations; it does not independently rerun the browser. No form was submitted. 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 seconds
direct string / keep / invisible true
"12:00:​30"
U+0031 U+0032 U+003A U+0030 U+0030 U+003A U+200B U+0033 U+0030
"12:00:30"
Removed 1 invisible character
{"minuteStep":{"stepMismatch":false,"valid":true,"value":""},"secondStep":{"stepMismatch":false,"valid":true,"value":""}}
{"minuteStep":{"stepMismatch":true,"valid":false,"value":"12:00:30"},"secondStep":{"stepMismatch":false,"valid":true,"value":"12:00:30"}}
Half minute
direct string / keep / invisible true
"12:00:30"
U+0031 U+0032 U+003A U+0030 U+0030 U+003A U+0033 U+0030
"12:00:30"
No selected invisible characters found
{"minuteStep":{"stepMismatch":true,"valid":false,"value":"12:00:30"},"secondStep":{"stepMismatch":false,"valid":true,"value":"12:00:30"}}
{"minuteStep":{"stepMismatch":true,"valid":false,"value":"12:00:30"},"secondStep":{"stepMismatch":false,"valid":true,"value":"12:00:30"}}
Full minute
direct string / keep / invisible true
"12:01"
U+0031 U+0032 U+003A U+0030 U+0031
"12:01"
No selected invisible characters found
{"minuteStep":{"stepMismatch":false,"valid":true,"value":"12:01"},"secondStep":{"stepMismatch":false,"valid":true,"value":"12:01"}}
{"minuteStep":{"stepMismatch":false,"valid":true,"value":"12:01"},"secondStep":{"stepMismatch":false,"valid":true,"value":"12:01"}}
Empty optional
direct string / keep / invisible true
""
""
No selected invisible characters found
{"minuteStep":{"stepMismatch":false,"valid":true,"value":""},"secondStep":{"stepMismatch":false,"valid":true,"value":""}}
{"minuteStep":{"stepMismatch":false,"valid":true,"value":""},"secondStep":{"stepMismatch":false,"valid":true,"value":""}}

Preserved seconds can still be invalid

The marked source interrupts the seconds component with U+200B. Before cleanup the browser sanitizes that attempted time to empty text. The actual homepage callback produces 12:00:30, which the receiving control retains. Its minuteStep snapshot then records stepMismatch true and valid false. The seconds did not disappear, and the cleaner did not introduce a new time. A retained value and an accepted value are different observations at this receiving boundary.

The one-second setting changes only the constraint

The observer changes step to 1 after capturing the default state. The same 12:00:30 value becomes valid with stepMismatch false. The plain half-minute control confirms that this is independent of marker removal. The full-minute reference 12:01 passes both settings. These controls isolate alignment to the selected time step rather than an issue with local timezone formatting, date arithmetic or string-to-epoch conversion. No conversion to a timestamp appears anywhere in the measured function.

Optional empty time needs an explicit interpretation

Both the interrupted original and empty control yield a valid empty optional field under the measured configurations. That flag must not be described as acceptance of the original seconds spelling. Our observer leaves min, max, required and value attributes unset, using fresh elements so a previous test cannot influence the step base. We did not exercise a graphical time picker, fractional seconds, midnight-wrapping ranges or localized manual entry. Those are additional questions requiring their own controls.

Retain precision requirements with cleanup evidence

A workflow that expects seconds should specify that contract when constructing its destination field and inspect the retained value before reporting success. The browser reproducer creates detached native controls without network submission. The Node reproducer independently reruns the saved cleaner but reads the stored browser record for destination results. Earlier epoch-unit and DateTimeFormat guides address different stages. Here all strings are synthetic and the test makes no claim about Claude output, statistical marking or a detector.

Reproduce this test

For a fresh native-control measurement, save and open reproduce-browser.html in your browser. It embeds the exact fixture observer and saved homepage script, runs locally, and shows its user agent. For the Node cleanup rerun, save reproduce.cjs, tested-app.js and browser-observations.json 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

WHATWG HTML time-state-(type=time) 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.