The hidden-text control word
RTF has a control word whose entire job is "do not display this", and the text it hides is ordinary text in the file.
How the text is hidden
\v turns hiding on for the rest of the current group; \v0 turns it off again. Because RTF scopes formatting with braces, whether a given character is hidden depends on every group above it — the parser copies state on { and restores it on }. A word processor honours the flag by not painting the run; nothing about the characters themselves changes.
Why a model still reads it
The run is stored as plain literal text, so any reader that strips control words and keeps the characters emits it verbatim. A reviewer sees a document with the passage missing; an extractor sees the passage.
What we do about it
The parser is a tokenizer with a group stack rather than a scan, so \v0 un-hides correctly and a nested group cannot be misread. A run whose group has hiding on is given the reason hidden-attr, and the pack rule rtf-hidden-v turns that into a high finding for any non-empty text; no threshold is involved. The action is flag, not strip — the words stay in text.canonical and the technique is listed in summary.concealedRetained. Visibility is reported as editing-only, because Word's "show hidden text" checkbox reveals it.
How often it fires
1% 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