CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Will invisible cleanup remove the tabs separating TSV columns?
No. Our direct-string tests retain tabs and empty TSV fields. They remove an authored U+200B inside a field without changing the number of tab-delimited columns.
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. Three destination checks use separately recorded browser observations; those pages explain the distinction. 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 |
|---|---|---|---|
| Interior empty field direct string / keep / invisible true | "A\t\tB"U+0041 U+0009 U+0009 U+0042 | "A\t\tB"No selected invisible characters found | {"fields":["A","","B"],"columns":3}{"fields":["A","","B"],"columns":3} |
| Trailing empty field direct string / keep / invisible true | "A\tB\t"U+0041 U+0009 U+0042 U+0009 | "A\tB\t"No selected invisible characters found | {"fields":["A","B",""],"columns":3}{"fields":["A","B",""],"columns":3} |
| Marker inside field direct string / keep / invisible true | "AB\tC"U+0041 U+200B U+0042 U+0009 U+0043 | "AB\tC"Removed 1 invisible character | {"fields":["AB","C"],"columns":2}{"fields":["AB","C"],"columns":2} |
| Space instead of tab direct string / keep / invisible true | "A B\tC"U+0041 U+0020 U+0042 U+0009 U+0043 | "A B\tC"No selected invisible characters found | {"fields":["A B","C"],"columns":2}{"fields":["A B","C"],"columns":2} |
Empty fields remain observable
The observer splits each authored row at a literal tab. Two consecutive tabs in the first fixture yield three fields, with the middle field empty. A final tab in the second also yields three fields, with an empty final field. Cleanup leaves both tab sequences intact. The third fixture removes U+200B inside the first field and still produces two columns. The fourth contains an ordinary space within its first field, so it remains a two-column row as well. We record complete field arrays, not only a count that could conceal shifted or empty values.
This is a deliberately narrow TSV model
The homepage removes five named characters and does not treat tabs as removable formatting. This test concerns one line split by a single-character delimiter. It does not parse quoted TSV, escaped tabs, multiline records or a spreadsheet export dialect. Our existing CSV guides address other delimiter and quoting questions and should not be used as a TSV parser specification. The saved JavaScript split operation supplies the exact rules used here. No spreadsheet application, database importer or real Claude export was opened, and retained column count does not establish that field contents are semantically correct.
Validate the destination column contract
Keep an original export and inspect separators before editing a working copy. Compare each resulting field with the destination column definition, including whether empty and trailing fields are allowed. Replacing tabs with spaces changes the delimiter structure even when the line appears visually similar. Removing a selected marker within a field can also change its identifier or value, so review that edit separately from the stable column count. Run the actual importer after cleanup and preserve its validation result. This page demonstrates retention of tab boundaries in known strings; it does not promise round-trip fidelity for every tabular format or spreadsheet.
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 String split 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.