CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why does a cleaned 127.1 URL become 127.0.0.1?
Our URL parser canonicalizes 127.1 and hexadecimal 0x7f000001 to 127.0.0.1. Even the marked hostname reaches that result before cleanup in this runtime. The hostname change belongs to URL parsing, and none of these addresses is fetched.
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 short IPv4 direct string / keep / invisible true | "http://127.1/p"U+0068 U+0074 U+0074 U+0070 U+003A U+002F U+002F U+0031 U+0032 U+0037 U+002E U+200B U+0031 U+002F U+0070 | "http://127.1/p"Removed 1 invisible character | {"hostname":"127.0.0.1","href":"http://127.0.0.1/p"}{"hostname":"127.0.0.1","href":"http://127.0.0.1/p"} |
| Short IPv4 direct string / keep / invisible true | "http://127.1/p"U+0068 U+0074 U+0074 U+0070 U+003A U+002F U+002F U+0031 U+0032 U+0037 U+002E U+0031 U+002F U+0070 | "http://127.1/p"No selected invisible characters found | {"hostname":"127.0.0.1","href":"http://127.0.0.1/p"}{"hostname":"127.0.0.1","href":"http://127.0.0.1/p"} |
| Hex IPv4 direct string / keep / invisible true | "http://0x7f000001/p"U+0068 U+0074 U+0074 U+0070 U+003A U+002F U+002F U+0030 U+0078 U+0037 U+0066 U+0030 U+0030 U+0030 U+0030 U+0030 U+0031 U+002F U+00 … | "http://0x7f000001/p"No selected invisible characters found | {"hostname":"127.0.0.1","href":"http://127.0.0.1/p"}{"hostname":"127.0.0.1","href":"http://127.0.0.1/p"} |
| Dotted reference direct string / keep / invisible true | "http://127.0.0.1/p"U+0068 U+0074 U+0074 U+0070 U+003A U+002F U+002F U+0031 U+0032 U+0037 U+002E U+0030 U+002E U+0030 U+002E U+0031 U+002F U+0070 | "http://127.0.0.1/p"No selected invisible characters found | {"hostname":"127.0.0.1","href":"http://127.0.0.1/p"}{"hostname":"127.0.0.1","href":"http://127.0.0.1/p"} |
The parsed hostname differs from the supplied spelling
The first fixture places U+200B inside the short numeric host 127.1. The cleaner returns a string containing 127.1 with that marker deleted. Both the original and cleaned strings produce hostname 127.0.0.1 and the same serialized URL under our independent URL constructor. The parser therefore already converges on the dotted address before the homepage performs its edit. This is an explicit counterexample to crediting every visible difference in a later URL object to cleanup. We save the cleaner output and parsed href separately so their transformation stages remain distinguishable.
Alternate numeric notation reaches the same host
The plain short-address reference also serializes to 127.0.0.1. The hexadecimal control uses 0x7f000001 as its complete host and reaches the same result. The fully dotted reference remains in that spelling. All paths are the fixed /p and all schemes are http, which keeps the question focused on numeric host representation. These four spellings are not four network destinations in the experiment: no connection is attempted. In particular, the use of a loopback address is only a parsing control and never a request to a service running on the machine.
Inspect parsed components when representation matters
If a workflow accepts URLs, decide whether it permits alternate numeric address notation and inspect the parsed hostname under that policy. Keep the raw source beside the canonical form when reviewing a surprising destination. String-prefix assumptions about an unparsed input do not reproduce the parser result shown here. This page supplies a local representation test, not a complete URL access-control design or a recommendation to fetch arbitrary input. The cleaner neither expands IPv4 components nor interprets a hexadecimal host. The independent URL constructor is the operation that returns the canonical address in every recorded row.
Host canonicalization has a separate evidence boundary
Our older hostname guide examines Unicode and IDNA behavior. This page adds numeric IPv4 notation controls and shows that two visibly different numeric forms converge. We do not test every historical address spelling, DNS resolution, redirect, proxy or browser navigation rule. The URL standard is linked for its parsing definitions; the saved runtime and strings establish what this observer returned. A successfully constructed URL does not establish that a destination is appropriate to contact. These synthetic strings identify no Claude message, hidden author information or statistical watermark and do not imply a network test occurred.
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
WHATWG IPv4 parser 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.