CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why can a filename look like a .txt file but fail an extension check?
A hidden character can occur within or after the suffix. Cleaning U+200B repairs our exact .txt checks; a trailing non-breaking space remains. This tests names as strings, without renaming files.
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. Invisible removal is enabled; the dash mode appears in each row. The observations below test this page's specific question. 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 |
|---|---|---|---|
| Hidden suffix fragment direct string / keep | "report.txt"U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0074 U+200B U+0078 U+0074 | "report.txt"Removed 1 invisible character | {"extension":".txt","endsWithTxt":false,"equalsBaseline":false}{"extension":".txt","endsWithTxt":true,"equalsBaseline":true} |
| Hidden trailing marker direct string / keep | "report.txt"U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0074 U+0078 U+0074 U+200B | "report.txt"Removed 1 invisible character | {"extension":".txt","endsWithTxt":false,"equalsBaseline":false}{"extension":".txt","endsWithTxt":true,"equalsBaseline":true} |
| Trailing NBSP direct string / keep | "report.txt "U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0074 U+0078 U+0074 U+00A0 | "report.txt "No selected invisible characters found | {"extension":".txt ","endsWithTxt":false,"equalsBaseline":false}{"extension":".txt ","endsWithTxt":false,"equalsBaseline":false} |
| Baseline name direct string / keep | "report.txt"U+0072 U+0065 U+0070 U+006F U+0072 U+0074 U+002E U+0074 U+0078 U+0074 | "report.txt"No selected invisible characters found | {"extension":".txt","endsWithTxt":true,"equalsBaseline":true}{"extension":".txt","endsWithTxt":true,"equalsBaseline":true} |
Placement changes the original suffix
For the first fixture, path.posix.extname returns a suffix containing U+200B between t and xt. In the second, that character follows txt. Both fail an exact endsWith check before cleaning and pass afterward. The trailing non-breaking space fixture fails before and after because U+00A0 is outside our deletion map. The visible reference stays unchanged. The data records each complete extension rather than relying on how the filename looks in a file browser.
String tests are not filesystem operations
We apply the Node path parser to locally constructed names. No file is created, opened, renamed or assigned a MIME type in these tests. Windows, macOS, a cloud drive and an upload service can each apply additional filename rules. A repaired suffix does not certify the underlying file format. Our source reference documents the path API; the exact before and after values are original observations. The homepage has no batch-rename or file-content verification feature.
Validate both the name and the content
Before changing a real filename, keep the original and check that the proposed name does not collide with an existing file. Identify its format from the appropriate application or file signature rather than the suffix alone. For an upload restriction, compare the actual name accepted by the service and test a working copy. If a trailing space is intentional, decide on a name mapping explicitly. Cleaning text in this homepage only returns a new string; it does not apply that string to a filesystem object.
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
Node.js path.extname 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.