UC0524 · store-sensitivity · what a customer actually tunes at deployment
Move the slider.
Watch what stops leaving the building.
Nothing on this page was typed by hand. The right-hand column is produced by running the masker over this kit's real corpus — 440 documents across 64 stores — and the page is built from its output file. No model is involved in masking at any point: it is pattern substitution, deterministic, free, and identical on every run.
The deployment dial
Five levels, each a superset of the one below. Move it and every pair underneath re-renders from the masker's own output.
Every category, real against its decoy
Each pair is rendered by the corpus generator from one skeleton — same opening, same layout, same vocabulary — so only the entity in the slot separates them. That is what makes the test below sharp: mask both and see whether they are still different strings.
Where the patterns come from
This is the answer to “how would you know what to mask without seeing my data?”. You do not need to. These are published specifications, shipped as vertical packs and switched on per deployment.
| token | pack | where the shape comes from |
|---|---|---|
[EMAIL] | core | RFC 5322 local@domain |
[PHONE] | core | ITU E.164 / national trunk form |
[NAME] | core | DEMO ONLY — corpus shape — production uses NER or a gazetteer, not a capital-letter rule |
[ADDRESS] | core | DEMO ONLY — corpus shape — production uses the postal authority's thoroughfare list |
[DATE] | core | ISO 8601 |
[MONEY] | core | DEMO ONLY — corpus shape |
[CARD] | payments | ISO/IEC 7812 PAN; production adds a Luhn check and published BIN ranges |
[SECRET] | secrets | vendor key prefix convention |
[GOV-ID] | us-person | US SSA area-group-serial form |
Where 480 comes from — and why it is not your number
sum over stores of (categories carried by that store's schema revision)
Every masked string above is this code's output. The page is generated by
2026-09-23-masking-lab.py from the JSON that 2026-09-23-masking-levels.py
writes while running the masker over data/corpus/*.txt. There is no hand-written
“after” column anywhere on it.
⚠︎ Separability is a ceiling, not a promise. That a real case and its decoy remain different strings after masking proves no reader is prevented from telling them apart. It does not prove a model will — the measured run scores 450 of 480, below its own ceiling. Proving the floor under masking needs a fresh paid run and is not claimed here.
The corpus is synthetic, generated from a fixed seed. Every name, identifier, card number, address and email in it is fabricated. The schema DS-CLASS-2026 is invented for this kit and is not a regulator's rule.