Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does every accept an empty cleaned string as all letters?

After our marker-only string becomes empty, every returns true without calling its letter predicate. The separate nonempty-and-letters check stays false. Validate content presence as well as the condition applied to each element.

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

Open the Claude text cleaner · Full measured data

Code-point comparison for Marker only

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
Marker only
direct string / keep / invisible true
"​"
U+200B
""
Removed 1 invisible character
{"elements":["​"],"count":1,"allLetters":false,"calls":1,"nonemptyAndLetters":false,"hasLetter":false}
{"elements":[],"count":0,"allLetters":true,"calls":0,"nonemptyAndLetters":false,"hasLetter":false}
Accepted letters
direct string / keep / invisible true
"AB"
U+0041 U+0042
"AB"
No selected invisible characters found
{"elements":["A","B"],"count":2,"allLetters":true,"calls":2,"nonemptyAndLetters":true,"hasLetter":true}
{"elements":["A","B"],"count":2,"allLetters":true,"calls":2,"nonemptyAndLetters":true,"hasLetter":true}
Rejected digit
direct string / keep / invisible true
"A1"
U+0041 U+0031
"A1"
No selected invisible characters found
{"elements":["A","1"],"count":2,"allLetters":false,"calls":2,"nonemptyAndLetters":false,"hasLetter":true}
{"elements":["A","1"],"count":2,"allLetters":false,"calls":2,"nonemptyAndLetters":false,"hasLetter":true}
Empty text
direct string / keep / invisible true
""
""
No selected invisible characters found
{"elements":[],"count":0,"allLetters":true,"calls":0,"nonemptyAndLetters":false,"hasLetter":false}
{"elements":[],"count":0,"allLetters":true,"calls":0,"nonemptyAndLetters":false,"hasLetter":false}

The true result has no successful letter check behind it

Our marker-only string initially becomes a one-element array whose element fails the ASCII uppercase predicate. Cleanup removes that element entirely. The empty array then reports allLetters true with calls equal to zero. It also reports count zero, nonemptyAndLetters false and hasLetter false. Keeping those fields together demonstrates exactly what the true result establishes: no present element failed. It does not establish that a letter was supplied. The cleaner changes the text, while the validator determines what acceptance means.

Ordinary controls separate presence from universal acceptance

AB passes every after two predicate calls and also passes the explicit nonempty check. A1 fails every but passes hasLetter because its first element is an accepted letter. The empty-string control reproduces every true, no calls and hasLetter false before any cleanup. These three outcomes show why neither every alone nor some alone expresses the combined requirement that input be present and every element be acceptable. Our diagnostic short-circuit expression explicitly combines count with the universal result rather than silently treating empty content as a required field.

Define the grammar as well as the minimum content

The predicate intentionally accepts only ASCII uppercase letters. It is not a general English validator, Unicode name policy or test for meaningful writing. A destination that permits lowercase letters, combining marks or other scripts must choose a different predicate and test it separately. The empty-input issue remains a distinct requirement from whatever character set is selected. The observer constructs a dense array from each supplied string and therefore makes no claim about holes in sparse arrays. Callback counts belong to these exact arrays and this exact predicate.

A genuine question motivates an independent experiment

A historical public question asks why Array.prototype.every returns true on an empty array; our Q&A notes link that question without copying its answers. The new evidence here measures how the actual homepage deletion can create that empty state and compares four explicit diagnostics. All strings and the predicate were authored locally. There is no Claude sample, external form submission or detector result. A validation boolean is an application decision, not evidence that an invisible formatting character was a watermark or that model-level marking has disappeared.

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

ECMAScript Array.prototype.every 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.