$ scriptshield --demo --packs "published evaluation packs"

Field notes from the village water pilot

One page, two views of the same bytes: the glyphs your browser renders for a human, and the codepoints a fetcher actually gets. Toggle below.

230PUA codepoints in shipped bytes
1,096chars encoded at build time
0readable chars left in wrapped spans (gated)
284plaintext chars BY DESIGN (partly-wrap + carve-outs)
2081 KBpack fonts (woff2, unicode-range'd)

$ one wrapI18n call — mixed Khmer + English, routed per script run

The compose segments the text into script runs; Khmer runs go to the km word tier (then km parts for residue), English runs to the en word tier (then en chars). One call handles the whole sentence.

km word 7km parts 3en word 2

-- the exact mixed-script sentence from docs/examples/editor-and-i18n.mjs. Its Khmer OOV name (unkeyable by the word tier) encodes through the parts tier — see the tier pills below.

􃒝 󰈶󰊊󱘄􎢔󰇃󴤤󳌵󰻩 􎢀􎡹 — 􎗸!

$ full-region shield — pure runs: Khmer paragraph, English paragraphs

Whole prose regions wrapped at build time. Khmer gets full coverage from the parts tier (2,809 corpus-attested clusters); English from the word tier plus the 52-letter char tier.

󰈶󰊉󳪘󳘵󴤤󳌵􎢔󰇃󴤤󲾼󲕭󰻩􎢐 󲕭󲬏󵲮󲉿󲹋󴂁󵳴󴝋󰿠 󳉒󴒗󴬭󰻃􎧄󴉀󵡧􎣫󲹚􎢐

􏍷􏎍􏎉 􏍨􏍿􏎐􏍿 􎔅 􍵇 􎕼 􋓭 􎜉 􋽷 􍫦 􍱨 􊸒 􄔀. 􃖅 􊇙 􋕋 􊸒 􏍯􏎀􏍿􏎊 􏍷􏎎􏎃􏍿􏎌 􎑇, 􈒥 􍵇 􋵂 􉹾 􌅨 􍵇 􋩽, 􈉉 􊀐 􊱠 􋺓 􊭻 􋔥 􋶆 􊨜 􇻚 􌃍 􊓧 􈉉 􇻚 􉮜 􍹳 􉂹 􍹳. 􃐌 􋅆 􍵇 􉄩 􋑷 􊒚 􍶩 􌍥, 􈉉 􇻚 􍣢 􎙴 􉏘 􍶩 􌁯 􊜠 􋴦 􋹉 􊭻 􍽒.

􇆿 􌲁 􋺓 􍵾 􌁱 􈎕 􌠍 􋺓 􌡳, 􈭈 􍵇 􌈻 􊸒 􍵒 􉥞 􋵓 􈺗 􍹳 􈛳 􌄧 􋹉 􇻚 􉚭. 􏍷􏎁􏎐􏍿􏎎􏎃􏎐􏎑 􉬻 􋵓 􈧱 􊸒; 􍶂 􌧩 􎘤 􋅆 􌠍 􈉉 􍢉 􇻚 􍽒 􍺃 􊖷 􋜫 􍏻. 􆗿-􎞢 􌁱 􈎕 􍵇 􌾶 􉂏, 􍵇 􌾶 􍉒, 􍵇 􌾶 􎝖 􍹳 􇻚 􊲓 􌧫 — 􈉉 􋰺-􎞐 􈭱 􍹳 􇻚 􋙗.

$ partly wrap — one shielded sentence inside a plaintext paragraph

The authoring pattern from docs/examples: you write normal markdown, mark the private region (<!-- ss:begin --> / <!-- ss:end --> or <span class="ss-shield">), and the build script wraps ONLY that region. Everything around it stays plaintext by design — searchable, indexable, yours.

km word 7km parts 2

I registered the household on Tuesday and the form went to the district office. 󰈶󰊊󱘄􎢔󰇃󴤤󳌵󰻩􎢐 The next steps were documented the following week.

$ partly wrap — protect ONE name only (PII char tier)

The per-site PII pattern from docs/examples/partial-shielding.mjs: wrap exactly the name, leave the sentence plaintext. The English name encodes through the en chars tier (52 letter aliases); through the km char tier, a dictionary-OOV Khmer name whose clusters all map. Everything else stays readable and searchable.

en-chars 7 cpskm-chars 2 cps

The community liaison on this pilot is 􏍷􏎍􏎉 􏍨􏍿􏎐􏍿, and the district office keeps every roster in a paper binder.

󿴎ុំ󿴍 បានទៅសាលារៀន។

$ carve-outs — wrap everything except the spans you keep plain

The keep-plain spans (pink underline) ship plaintext by explicit decision: emails, form IDs, prices, code. Survey form IDs and phone numbers contain digits, and the shipped English tiers cover letters, not digits — those regions are carved out, never half-shielded.

en word 21

􄺌 􉌎 􊒚 􍵇 􌍥: water.pilot@example.org — 􉷖 􋅆 􋁀 􌏆. 􆻩 􊓧 􃞁 􋓌 FORM-2026-0041 􉌔 􉦋 􈉉 􈎕 􈲭 􋽼 􈭧 􉜡.

published evaluation packs — NOT seed-permuted (a real site bakes its own pack behind a secret seed)build-time encode; the page ships zero shielding JavaScriptdecode key in production = your site seed — held by you, not shipped