CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Why does 21 get different plural categories for a count and a ranking?
For en-US, our cleaned 21 selects other under cardinal rules and one under ordinal rules. The number 11 remains other for ordinals. Choose the rule type deliberately; a category label is not a ready-made suffix.
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 ordinal direct string / keep / invisible true | "21"U+0032 U+200B U+0031 | "21"Removed 1 invisible character | {"number":"NaN","cardinal":"other","ordinal":"other"}{"number":"21","cardinal":"other","ordinal":"one"} |
| Twenty one direct string / keep / invisible true | "21"U+0032 U+0031 | "21"No selected invisible characters found | {"number":"21","cardinal":"other","ordinal":"one"}{"number":"21","cardinal":"other","ordinal":"one"} |
| Eleven direct string / keep / invisible true | "11"U+0031 U+0031 | "11"No selected invisible characters found | {"number":"11","cardinal":"other","ordinal":"other"}{"number":"11","cardinal":"other","ordinal":"other"} |
| Two direct string / keep / invisible true | "2"U+0032 | "2"No selected invisible characters found | {"number":"2","cardinal":"other","ordinal":"two"}{"number":"2","cardinal":"other","ordinal":"two"} |
The same accepted number selects different categories
The marked 21 initially converts to NaN and both rule types select other in this runtime. Once its U+200B is removed, Number yields 21, cardinal selection remains other and ordinal selection becomes one. The plain 21 control confirms that difference without any transformation. The important distinction is therefore not that a marker creates a special linguistic category. It is that two configured rule types ask different grammatical questions of the same accepted number. The observer records both results together so a category change cannot be attributed entirely to string cleanup.
Eleven prevents a last-digit shortcut
For eleven, the ordinal category is other; for two it is two. Both cardinal results are other in our en-US configuration. These controls show why an ordinal category cannot be inferred from the final visible digit alone. The test does not generate st, nd, rd or th. It returns category identifiers supplied by Intl.PluralRules, which an application may use to select a message or language-specific form. Reading one as the quantity one would also be a mistake: our accepted twenty-one selects that category under the ordinal configuration while retaining its numeric value of 21.
Validate the quantity before choosing a message
A production workflow should validate its numeric field before selecting grammar, then choose cardinal or ordinal according to whether it expresses a quantity or an ordered position. Our NaN result produces a category instead of a validation exception, so receiving other is not proof that the input was accepted as a meaningful rank. Keep the conversion result and domain restrictions separate from grammar. For example, an application may require positive integer rankings; this observer does not impose that policy. Test the selected locale with representative exceptions instead of hardcoding an English last-digit rule into a shared formatter.
Locale and output boundaries
Our earlier plural guide measures cardinal category selection after cleanup. This page measures the independent type option, with an eleven control that exposes a naive suffix shortcut. The evidence is limited to the recorded runtime, locale en-US and four authored strings. Other languages and option combinations require their own checks; category labels alone are not localized phrases or a complete ordinal formatter. The cleaner performs no grammatical analysis and does not select message templates. These fixtures are reproducible local data, not evidence about real Claude output, watermark detection, search demand or the quality of an application translations.
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
ECMA-402 PluralRules 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.