CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Does required reject a field containing only an invisible character?
Our required text input accepts a single U+200B before cleanup, then reports valueMissing after that character is deleted. ASCII space and NBSP also pass required. Native presence validation does not establish meaningful visible content.
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 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.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Marker only direct string / keep / invisible true | ""U+200B | ""Removed 1 invisible character | {"units":1,"valid":true,"value":"","valueMissing":false}{"units":0,"valid":false,"value":"","valueMissing":true} |
| ASCII space direct string / keep / invisible true | " "U+0020 | " "No selected invisible characters found | {"units":1,"valid":true,"value":" ","valueMissing":false}{"units":1,"valid":true,"value":" ","valueMissing":false} |
| Nonbreaking space direct string / keep / invisible true | " "U+00A0 | " "No selected invisible characters found | {"units":1,"valid":true,"value":" ","valueMissing":false}{"units":1,"valid":true,"value":" ","valueMissing":false} |
| Empty text direct string / keep / invisible true | "" | ""No selected invisible characters found | {"units":0,"valid":false,"value":"","valueMissing":true}{"units":0,"valid":false,"value":"","valueMissing":true} |
Deletion can expose a missing value
The marker-only fixture initially has one UTF-16 unit and valueMissing false. The selected homepage deletion returns an empty string. Assigning that result to a fresh required text input changes valueMissing to true and valid to false. The browser is reacting to the resulting empty value rather than identifying a suspicious character. We record the literal value and its length alongside validity so a visually blank field can be distinguished from an actually empty string.
Two kinds of space remain present
The ASCII-space and nonbreaking-space controls each retain one unit, remain unchanged by this cleaner and pass the required check. Their acceptance does not show that the field contains a word, a letter or a meaningful answer. It only establishes the tested native presence condition. A destination that wants to reject whitespace-only text needs an additional deliberate policy. That policy should be defined for the language and field rather than assuming every invisible-looking character can be deleted safely.
Do not use a visual impression as the schema
The empty reference fails before any cleanup and reproduces the marked fixture after deletion. That pairing isolates the empty-state transition without relying on what a font displays. Our input uses the default text type with no pattern, length threshold or custom error. Email, select, checkbox and other controls have their own requirements and are outside this experiment. We also did not simulate a user typing spaces or test submission events; the observed values were assigned programmatically to detached elements.
Keep original and required-state evidence
For a real form, retain which string was checked and whether checking occurred before or after cleanup. Otherwise a new missing-value error can be mistaken for unexplained data loss. This page measures a native input rather than the earlier universal array predicate or truthy-string conversion. The browser download reruns the element construction; the Node harness rechecks the saved cleaner against recorded browser observations. All examples are synthetic. Neither presence acceptance nor missing-value rejection says who wrote the text or whether it carries a statistical watermark.
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.cjsReference and next check
WHATWG HTML the-required-attribute 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.