CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why is cleaned false still true with Boolean()?
Our cleaned string false remains truthy, as does the string 0. Only the marker-only input becomes an empty, falsy string. Parse an explicit allowed flag vocabulary when the destination needs booleans; cleanup does not change the string type.
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 run independently on the exact input and cleaned strings in the recorded Node runtime. 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 |
|---|---|---|---|
| Marked false direct string / keep / invisible true | "false"U+0066 U+0061 U+200B U+006C U+0073 U+0065 | "false"Removed 1 invisible character | {"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":null,"length":6}{"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":false,"length":5} |
| Literal false direct string / keep / invisible true | "false"U+0066 U+0061 U+006C U+0073 U+0065 | "false"No selected invisible characters found | {"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":false,"length":5}{"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":false,"length":5} |
| Literal zero direct string / keep / invisible true | "0"U+0030 | "0"No selected invisible characters found | {"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":null,"length":1}{"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":null,"length":1} |
| Only marker direct string / keep / invisible true | ""U+200B | ""Removed 1 invisible character | {"type":"string","boolean":true,"doubleNegation":true,"explicitTrueFalse":null,"length":1}{"type":"string","boolean":false,"doubleNegation":false,"explicitTrueFalse":null,"length":0} |
The letters false are still a nonempty string
The marked false fixture initially has six code units and does not match our explicit true/false parser. After the homepage deletes U+200B, it has five code units and the explicit parser returns boolean false. Boolean and double negation still return true. We record typeof as string before and after, showing why those operations disagree without requiring a failed cleanup. Truthiness is answering whether this string is empty under the tested coercion rule, while the explicit parser is interpreting its exact spelling according to a deliberately tiny application vocabulary.
Zero text and empty text are distinct controls
The literal false reference reproduces the disagreement without a selected marker. The string 0 is also truthy, while the explicit parser returns null because zero is outside its accepted vocabulary. The marker-only source is truthy before deletion and becomes the empty string afterwards; both Boolean and double negation then become false, with null still indicating an unrecognized explicit flag. Those separate fields prevent a caller from confusing an invalid flag with an accepted false value. We never call Boolean on a numeric zero or actual boolean in this matrix: every observer argument is a string.
Define accepted flags and an invalid state
A destination promising true and false text should validate those spellings explicitly and preserve a separate result for unsupported input. Decide its case and whitespace policies deliberately rather than letting generic truthiness decide them. Our parser is case-sensitive, accepts exactly two strings and uses null for everything else. It is a demonstration contract, not a configuration format standard. The cleaner neither parses booleans nor trims ordinary spaces. Review what should happen when cleanup changes an all-marker field into empty text, particularly when omission, invalid input and an explicit false value carry different application meanings.
A flag parser is separate from empty-field filtering
The older filtering page examines removal of empty list positions and resulting alignment. Here no list item is removed and the question is semantic conversion of a single flag. Four authored strings expose a type boundary that a removal count cannot certify. We do not test a browser checkbox, environment-variable library, database boolean column or every configuration parser. No external preference is changed. The exact tiny parser and its null branch are available for reproduction. These results neither identify Claude-origin text nor measure authorship, AI classification or any form of statistical watermark removal.
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 ToBoolean 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.