The engine reads a text in several views at once: as typed, with look-alike characters folded, with separators joined, with digits read as letters, reversed, and split into words. A match remembers which transforms it took to reach it, and the response names them.
| Tag | Fires when | Example |
|---|---|---|
homoglyph |
A non-Latin look-alike was folded to a Latin letter inside a Latin word | fυck (Greek upsilon) |
zero_width |
A zero-width or direction-control character was removed | shit |
separator |
A spelled-out run was joined | f.u.c.k, s h i t |
leetspeak |
A digit or symbol was read as a letter | sh1t, a$$ |
repeated_chars |
A run of three or more of one character was squeezed | shiiiit |
diacritics |
A letter lost its accent | shït |
mixed_script |
A word carried letters from more than one script | Latin with Cyrillic |
fullwidth |
A fullwidth form was folded | shit |
combining_marks |
A combining mark was removed | s̶h̶i̶t̶ |
phonetic |
ph, kk or a z for s was read |
phuck |
reversed |
The match came from the reversed string (usernames only) | tihs_xX |
concatenation |
The match sits at a boundary inferred by splitting a username into words | ilovesh1t |
case_mixing |
The match sits under unusual capitalisation | ShIt |
self_censored |
The writer censored the word themselves | sh*t, f*** |
obfuscated is true when any match carried a tag. evasion at the top of the response is the union over all matches; each match lists its own.
Using the tags
A username with leetspeak or homoglyph in it is someone trying: many products block it outright whatever the policy says. A self_censored match is usually the opposite: someone being polite. The tags are also how a correction is understood: when you report a false positive on Scunthorpe, the fact that no tag fired tells us it is a dictionary problem, not a transform problem.
What each tag costs
Every transform is a chance to over-read innocent text, so each carries a weight in the engine, and a match reached through a weak transform on its own (a lone diacritics fold, say) scores lower than the same word typed plainly. The disguise discount is part of the calibration a version pins.