Comment that says two things
A PDF comment carries two bodies — the formatted one a reviewer reads and the plain one an extractor reads — and they do not agree.
How the text is hidden
A markup annotation may carry both /Contents, a plain-text body, and /RC, an XHTML rich-text body. Acrobat and Preview render /RC in the comment pane; the specification requires no consistency between the two. So one annotation object can show a reviewer "standard terms, no changes" while /Contents carries something else entirely. Nothing here is hidden — the two halves simply disagree.
Why a model still reads it
Annotation-aware pipelines read /Contents, which is the half a viewer does not put in front of the reader. The person and the machine are looking at different strings from the same object.
What we do about it
richTextDiverges decodes /RC, strips tags, resolves named and numeric character references, collapses whitespace, and compares the result against /Contents with whitespace collapsed; a mismatch sets richTextDivergent, and only on the run whose text is the /Contents string. The rule pdf-annotation-rich-text fires on that flag at medium, action flag — nothing is stripped. Severity is deliberately below its structural sibling because this compares two strings through a lossy stripper rather than proving anything from the font tables.
How often it fires
0% of 630 real PDFs — 510 SEC-sourced contracts plus 120 Common Crawl web PDFs (35 producers), measured 2026-08-21.
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