The tipping-off wall · 81 disguises · 14 honest keys

81 ways to hide a filing decision. All 81 refused.

Telling anyone that a suspicious-activity report was filed is a tipping-off offence in most jurisdictions, so Mirror is built to be unable to hold that decision, however it is spelled - Cyrillic look-alikes, fullwidth letters, zero-width joiners, camelCase. This is the published corpus the door is tested against, and the 14 honest field names it must never refuse.

81 refused14 must pass12 techniques8 hidden terms

12 disguises

It reads keys the way a parser does, not the way an eye does.

Width, font and look-alike letters are folded by Unicode normalisation and a confusables table; invisible characters are stripped before anything else; camelCase, hyphens, dots and spaces all become one separator. Under each disguise, the characters that are not what they look like.

The plain spelling the wall always caught

8 refused
  • sar→ sar
  • str→ str
  • sar_filed→ sar_filed
  • filing_decision→ filing_decision
  • suspicious_activity→ suspicious_activity
  • fincen→ fincen
  • goaml_ref→ goaml_ref
  • tipping_off→ tipping_off

Uppercase

8 refused
  • SAR→ sar
  • STR→ str
  • SAR_FILED→ sar_filed
  • FILING_DECISION→ filing_decision
  • SUSPICIOUS_ACTIVITY→ suspicious_activity
  • FINCEN→ fincen
  • GOAML_REF→ goaml_ref
  • TIPPING_OFF→ tipping_off

Cyrillic homoglyphs — render identically to Latin

8 refused
  • ѕаr→ sar2 Cyrillic look-alikes
  • ѕtr→ str1 Cyrillic look-alike
  • ѕаr_fіlеd→ sar_filed4 Cyrillic look-alikes
  • fіlіng_dесіѕіоn→ filing_decision8 Cyrillic look-alikes
  • ѕuѕрісіоuѕ_асtіvіtу→ suspicious_activity13 Cyrillic look-alikes
  • fіnсеn→ fincen3 Cyrillic look-alikes
  • gоаml_rеf→ goaml_ref3 Cyrillic look-alikes
  • tірріng_оff→ tipping_off5 Cyrillic look-alikes

Greek homoglyphs

8 refused
  • sαr→ sar1 Greek look-alike
  • sτr→ str1 Greek look-alike
  • sαr_fιlεd→ sar_filed3 Greek look-alikes
  • fιlιng_dεcιsιοn→ filing_decision6 Greek look-alikes
  • susριcιοus_αcτιvιτy→ suspicious_activity9 Greek look-alikes
  • fιncεn→ fincen2 Greek look-alikes
  • gοαml_rεf→ goaml_ref3 Greek look-alikes
  • τιρριng_οff→ tipping_off6 Greek look-alikes

Fullwidth forms, folded by NFKC

8 refused
  • sar→ sar3 fullwidth characters
  • str→ str3 fullwidth characters
  • sar_filed→ sar_filed9 fullwidth characters
  • filing_decision→ filing_decision15 fullwidth characters
  • suspicious_activity→ suspicious_activity19 fullwidth characters
  • fincen→ fincen6 fullwidth characters
  • goaml_ref→ goaml_ref9 fullwidth characters
  • tipping_off→ tipping_off11 fullwidth characters

Mathematical bold, folded by NFKC

8 refused
  • 𝐬𝐚𝐫→ sar3 math-alphabet characters
  • 𝐬𝐭𝐫→ str3 math-alphabet characters
  • 𝐬𝐚𝐫_𝐟𝐢𝐥𝐞𝐝→ sar_filed8 math-alphabet characters
  • 𝐟𝐢𝐥𝐢𝐧𝐠_𝐝𝐞𝐜𝐢𝐬𝐢𝐨𝐧→ filing_decision14 math-alphabet characters
  • 𝐬𝐮𝐬𝐩𝐢𝐜𝐢𝐨𝐮𝐬_𝐚𝐜𝐭𝐢𝐯𝐢𝐭𝐲→ suspicious_activity18 math-alphabet characters
  • 𝐟𝐢𝐧𝐜𝐞𝐧→ fincen6 math-alphabet characters
  • 𝐠𝐨𝐚𝐦𝐥_𝐫𝐞𝐟→ goaml_ref8 math-alphabet characters
  • 𝐭𝐢𝐩𝐩𝐢𝐧𝐠_𝐨𝐟𝐟→ tipping_off10 math-alphabet characters

Zero-width joiners between letters — invisible on screen

8 refused
  • s‍a‍r→ sar2 invisible characters
  • s‍t‍r→ str2 invisible characters
  • s‍a‍r_f‍i‍l‍e‍d→ sar_filed6 invisible characters
  • f‍i‍l‍i‍n‍g_d‍e‍c‍i‍s‍i‍o‍n→ filing_decision12 invisible characters
  • s‍u‍s‍p‍i‍c‍i‍o‍u‍s_a‍c‍t‍i‍v‍i‍t‍y→ suspicious_activity16 invisible characters
  • f‍i‍n‍c‍e‍n→ fincen5 invisible characters
  • g‍o‍a‍m‍l_r‍e‍f→ goaml_ref6 invisible characters
  • t‍i‍p‍p‍i‍n‍g_o‍f‍f→ tipping_off8 invisible characters

CamelCase — a JavaScript integrator's reflex

5 refused
  • sarFiled→ sar_filed
  • filingDecision→ filing_decision
  • suspiciousActivity→ suspicious_activity
  • goamlRef→ goaml_ref
  • tippingOff→ tipping_off

PascalCase

5 refused
  • SarFiled→ sar_filed
  • FilingDecision→ filing_decision
  • SuspiciousActivity→ suspicious_activity
  • GoamlRef→ goaml_ref
  • TippingOff→ tipping_off

Hyphen instead of underscore

5 refused
  • sar-filed→ sar_filed
  • filing-decision→ filing_decision
  • suspicious-activity→ suspicious_activity
  • goaml-ref→ goaml_ref
  • tipping-off→ tipping_off

Dot separator

5 refused
  • sar.filed→ sar_filed
  • filing.decision→ filing_decision
  • suspicious.activity→ suspicious_activity
  • goaml.ref→ goaml_ref
  • tipping.off→ tipping_off

Space separator

5 refused
  • sar filed→ sar_filed
  • filing decision→ filing_decision
  • suspicious activity→ suspicious_activity
  • goaml ref→ goaml_ref
  • tipping off→ tipping_off

What the disguises hide

8 terms, and the full vocabulary behind them.

The corpus disguises these 8; the wall itself refuses every term in its vocabulary, nested at any depth in any request.

sar

Suspicious Activity Report (US)

str

Suspicious Transaction Report (EU/UK/FATF)

sar_filed

the act of filing a SAR

filing_decision

the decision itself, the core of the offence

suspicious_activity

the finding a report rests on

fincen

the US receiving body

goaml_ref

a reference into the UNODC goAML system

tipping_off

naming the offence directly

What must pass

A wall that refused honest fields would be switched off.

So it is a parser, not a substring scan: instructions contains str and registrar contains sar, and both sail through. These 14 are tested on every build.

shipment_refthe one identifier the operator legitimately needs
commitmentsthe salted digests themselves
corridor_commitmentthe corridor binding
instructionscontains the substring 'str' — must not be read as a Suspicious Transaction Report
constructorcontains 'str'; also a prototype-pollution shibboleth, still an honest word
registrarcontains 'str' and 'sar'-adjacent letters
sartorial_notesstarts with 'sar' but is not 'sar'
star_ratingan anagram-adjacent honest key
activity_logcontains 'activity' but not 'suspicious_activity'
financingstarts like 'fincen' but is not it
filing_cabinetcontains 'filing' but is not a filing_decision
rolethe leg's role
tolerancethe corridor tolerance
kidthe signing key id

Rendered at build time from /sar-smuggles.json · sha256 c02daa1ea88f02bd… · written by conformance/build-sar-corpus.js; conformance/sar-wall.test.js sends every entry through the real operator code path