The fallback your client discarded
The same discarded multipart/alternative half, reported when it says nothing the displayed half did not — a disclosure that the part is there, not a claim about what is in it.
How the text is hidden
The concealment surface is identical to the divergence case: a multipart/alternative group's non-winning children are marked visible: false with invisibleReason: 'non-rendered-part', and their text enters canonical text in the hidden-text bucket, so a caller gets both halves back and can see which one their model read. What separates the two techniques is the comparison result, not the structure — the parser sets flags.alternativeDiverges on the run and the rule pack splits on it. visibilityOf maps non-rendered-part to editing-only, because view-source and a text editor both show the part.
Why a model still reads it
An extractor walking the message tree reads the discarded part like any other body text, and many take text/plain preferentially. The words are in a model's context whether or not they diverge from what the person was shown.
What we do about it
The rule mime-alternative-part is the exact complement of the divergence rule: document.format == 'eml' && run.invisibleReason == 'non-rendered-part' && run.flags.alternativeDiverges == false && run.text != ''. It is informational with action disclose, so the finding arrives as action: "disclosed", the verdict stays clean, and it is absent from summary.concealedRetained — nothing is concealed when the discarded half says what the rendered half already said. It exists because gating the divergence rule without putting anything in its place left those runs unclaimed and a generic invisible-run rule took them at high, grading ordinary email worse than under the bug being fixed. It publishes no prevalence.rate, deliberately: that field is the number callers are told to route on, and a disclosure is not a signal to route on.
How often it fires
Not measured. We publish a rate only where one has been measured against a named corpus of the right format, and no figure exists for this technique yet. Absence means unknown — never low.
Check your own file
Three commands: a key, credit, a verdict.
Start with the API