spam.likely_spam
A model classifier scored this text as likely spam.
Source: model — filter it out with findings.filter(f => f.source !== 'model') if you only want the free rule layer.
What it looks at#
A hosted language model judges whether the text is an unsolicited
advertisement, scam, phishing attempt, or promotional solicitation sent
without a genuine relationship with the recipient. The model sees the raw
text you sent — nothing else — and returns a score from 0 to 1; this
finding fires at 0.5 or higher.
This runs alongside every rule check in this gate, not after them: there is no cascade that skips the model call when a rule already found something (D-82).
Why it matters#
The free rule layer (spam.link_density, spam.known_phrase, and the rest)
catches recognisable patterns. A model call catches spam that doesn’t match
any of those patterns but still reads as spam to a person — novel phrasing,
a scam with no known-phrase overlap, a message that’s spam in intent but
not in any one detectable feature.
What to do#
Medium severity — a model finding never blocks on its own (design
rule 3, D-82). Only a rule-based finding can push the verdict to block;
this alone only reaches suspect. On our measured hard-negative set, the model
false-alarms on roughly 1 in 30–50 clean messages — too often to auto-reject
on this signal alone. Use it as a second opinion alongside the rule
findings, not as a standalone block condition.
A paid check — real marginal cost per call, unlike every rule check in this gate.