Text below readable size
A run set to a font size no one reads at, still carrying full words to anything that parses the file.
How the text is hidden
\fs sets the font size in half-points and is inherited by nested groups like every other piece of RTF state. Dropping it to a sub-readable value leaves the run on the page, painted, at a size a human does not resolve at any zoom. Nothing else about the run changes — it is neither hidden nor recoloured.
Why a model still reads it
Size is a rendering property. The characters occupy the same place in the file whatever \fs says, so an extractor returns them at full weight.
What we do about it
The parser stores \fs as half-points, halves it, and computeReason marks the run sub-readable when the size is at or below limits.subReadableMaxFontSizePt — read from the rule pack, not hard-coded; the comment at that line records that this was a literal in three formats and made RTF unreachable by a pack publish. ` publishes a different threshold and asserts the RTF path follows it in both directions, and pins every format's boundary to the same place. The pack rule is medium with action flag`: the text is reported and kept, never removed. Reasons are ordered, so hidden text, a document property, a non-rendered destination and an off-page frame each claim a run before size does.
How often it fires
0.51% of 195 real RTF files from four national open-data portals (CA, UK, GR, AU), measured 2026-08-28.
This is an alert-volume number and nothing else. It says how often the alarm sounds on documents as found — not how often it is right, and not whether what it found was harmless. Documents as found may themselves carry concealment. Read it against the population named above rather than as a property of documents in general.
Check your own file
Three commands: a key, credit, a verdict.
Start with the API