CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Will cleaning make JavaScript-style numeric notation valid JSON?
No for our 1_000 and +12 JSON literals. Both stay invalid. A U+200B splitting 12 is removed and that fixture parses, while 1e3 already parses as 1000.
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 |
|---|---|---|---|
| Marker inside literal direct string / keep / invisible true | "{\"n\":12}"U+007B U+0022 U+006E U+0022 U+003A U+0031 U+200B U+0032 U+007D | "{\"n\":12}"Removed 1 invisible character | {"accepted":false,"errorName":"SyntaxError"}{"accepted":true,"value":12,"type":"number"} |
| Numeric separator direct string / keep / invisible true | "{\"n\":1_000}"U+007B U+0022 U+006E U+0022 U+003A U+0031 U+005F U+0030 U+0030 U+0030 U+007D | "{\"n\":1_000}"No selected invisible characters found | {"accepted":false,"errorName":"SyntaxError"}{"accepted":false,"errorName":"SyntaxError"} |
| Leading plus direct string / keep / invisible true | "{\"n\":+12}"U+007B U+0022 U+006E U+0022 U+003A U+002B U+0031 U+0032 U+007D | "{\"n\":+12}"No selected invisible characters found | {"accepted":false,"errorName":"SyntaxError"}{"accepted":false,"errorName":"SyntaxError"} |
| Exponent reference direct string / keep / invisible true | "{\"n\":1e3}"U+007B U+0022 U+006E U+0022 U+003A U+0031 U+0065 U+0033 U+007D | "{\"n\":1e3}"No selected invisible characters found | {"accepted":true,"value":1000,"type":"number"}{"accepted":true,"value":1000,"type":"number"} |
Numeric spellings are format-specific
Each fixture is an object containing the same property n and a different numeric spelling. The deliberately marked literal fails JSON.parse until the cleaner joins its digits into twelve. The underscore separator and leading-plus fixtures remain rejected, with no selected invisible character to delete. The exponent reference is valid and returns the Number value 1000 before and after cleanup. Explicit accepted flags and error names distinguish the rejected objects from an absent property. The table measures parsing of complete JSON source, rather than converting a raw field or asking whether a JavaScript expression could represent the intended number.
JSON is not the entire JavaScript expression grammar
Our existing JSON pages concern structural whitespace, string escapes and key identity. None measures these numeric literal spellings. JSON.parse follows the JSON grammar, so examples legal in another context should not be inserted into a document without its serializer. We do not evaluate the object strings as executable JavaScript and do not test a schema, server endpoint or numeric range policy. The cleaner only performs its named character deletion; it cannot rewrite a separator or choose an intended number. ECMAScript provides the JSON parsing definition used by the local observer, with exact fixtures available for independent reruns.
Serialize a validated value rather than patching syntax
Preserve the original document and identify whether the fault belongs to JSON syntax or the value contract. Build JSON through the intended serializer after checking the value, instead of globally removing punctuation from a source document until parsing succeeds. A parsed object still requires application validation for field type, range and precision. Deletion of a known accidental marker should be followed by a complete parse and a check against the intended record. These four spellings demonstrate specific acceptance boundaries; they do not guarantee semantic correctness, integer exactness or compatibility with every downstream data importer.
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 JSON.parse 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.