================================================================================
SHIELDPROMPT — 110 MANUAL TEST PROMPTS FOR THE CLAUDE CODE MCP INTEGRATION
================================================================================

How to use this file:
  - Open Claude Code with the shieldprompt MCP server connected (/mcp shows it).
  - Copy any block below (between the "--- BEGIN" and "--- END" markers) into
    the chat. Run them in order or pick at random.
  - Each block ends with "Expect:" — that's what success looks like.
  - All names, emails, phones, cards, SSNs below are SYNTHETIC TEST DATA.
    None of these belong to a real person.

Tool reference:
  shield_mask    - replace PII with reversible tokens
  shield_unmask  - restore tokens back to real values
  shield_inspect - report what would be detected (no masking)
  shield_vault   - dump current token <-> real-value mappings
  shield_clear   - wipe the vault and reset counters

================================================================================
SECTION A — BASIC MASK (single entity type per text)
================================================================================

--- BEGIN T001 ---
Demo of shieldprompt MCP, synthetic test data. Use shield_mask on:
"Email alice@example.com"
Expect: text contains [EMAIL_ADDRESS_1], no real email.
--- END T001 ---

--- BEGIN T002 ---
Synthetic data. Use shield_mask on:
"Phone: +1-415-555-1234"
Expect: [PHONE_NUMBER_1] in output.
--- END T002 ---

--- BEGIN T003 ---
Synthetic data. Use shield_mask on:
"Card: 4532-1488-0343-6467"
Expect: [CREDIT_CARD_1].
--- END T003 ---

--- BEGIN T004 ---
Synthetic data. Use shield_mask on:
"SSN: 123-45-6789"
Expect: [SSN_1].
--- END T004 ---

--- BEGIN T005 ---
Synthetic data. Use shield_mask on:
"Server IP: 10.0.0.5"
Expect: [IP_ADDRESS_1].
--- END T005 ---

--- BEGIN T006 ---
Synthetic data. Use shield_mask on:
"Visit https://example.com/account/42 for details"
Expect: [URL_1].
--- END T006 ---

--- BEGIN T007 ---
Synthetic data. Use shield_mask on:
"AWS access key: AKIAIOSFODNN7EXAMPLE"
Expect: [AWS_KEY_1].
--- END T007 ---

--- BEGIN T008 ---
Synthetic data. Use shield_mask on:
"API key: sk-abcdefghijklmnopqrstuvwxyz123456"
Expect: [API_KEY_1].
--- END T008 ---

--- BEGIN T009 ---
Synthetic data. Use shield_mask on:
"IBAN: GB82WEST12345698765432"
Expect: [IBAN_1].
--- END T009 ---

--- BEGIN T010 ---
Synthetic data. Use shield_mask on:
"DOB: 1985-07-12"
Expect: [DATE_OF_BIRTH_1] (or DATE if NER is on).
--- END T010 ---

--- BEGIN T011 ---
Synthetic data. Use shield_mask on:
"Reach me at test.user+filter@sub.domain.co.uk"
Expect: [EMAIL_ADDRESS_1] — verifies plus-tag and subdomain handling.
--- END T011 ---

--- BEGIN T012 ---
Synthetic data. Use shield_mask on:
"Phone (415) 555-1234"
Expect: [PHONE_NUMBER_1] — verifies parenthesised area code.
--- END T012 ---

--- BEGIN T013 ---
Synthetic data. Use shield_mask on:
"International phone: +44 20 7946 0958"
Expect: [PHONE_NUMBER_1] — UK format.
--- END T013 ---

--- BEGIN T014 ---
Synthetic data. Use shield_mask on:
"Visa with spaces: 4532 1488 0343 6467"
Expect: [CREDIT_CARD_1] — space-separated card.
--- END T014 ---

--- BEGIN T015 ---
Synthetic data. Use shield_mask on:
"IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334"
Expect: [IP_ADDRESS_1] OR documented as not-yet-supported.
--- END T015 ---

================================================================================
SECTION B — BASIC UNMASK
================================================================================

--- BEGIN T016 ---
Synthetic data. First call shield_mask on "Email alice@example.com".
Then call shield_unmask on the masked result.
Expect: original text restored byte-for-byte.
--- END T016 ---

--- BEGIN T017 ---
Synthetic data. Mask this with shield_mask:
"Card 4532-1488-0343-6467 belongs to alice@example.com"
Then unmask the result.
Expect: identical to input.
--- END T017 ---

--- BEGIN T018 ---
Synthetic data. Call shield_unmask on:
"Hello [EMAIL_ADDRESS_99], your card [CREDIT_CARD_42] was charged."
Expect: tokens that don't exist in the vault are left as-is, no crash.
--- END T018 ---

--- BEGIN T019 ---
Synthetic data. Mask "alice@example.com" three times in a row, then call shield_unmask on "[EMAIL_ADDRESS_1]".
Expect: returns "alice@example.com" — same token reused (idempotent).
--- END T019 ---

--- BEGIN T020 ---
Synthetic data. Mask "Hi alice@example.com and bob@example.com".
Then unmask only "[EMAIL_ADDRESS_2]".
Expect: returns "bob@example.com".
--- END T020 ---

================================================================================
SECTION C — INSPECT (preview, no masking)
================================================================================

--- BEGIN T021 ---
Synthetic data. Use shield_inspect on:
"Email alice@example.com"
Expect: one row, EMAIL_ADDRESS, score 1.00.
--- END T021 ---

--- BEGIN T022 ---
Synthetic data. Use shield_inspect on:
"Just a sentence with no personal info at all."
Expect: zero detections.
--- END T022 ---

--- BEGIN T023 ---
Synthetic data. Use shield_inspect on:
"alice@example.com bob@example.com carol@example.com"
Expect: 3 EMAIL_ADDRESS rows with distinct positions.
--- END T023 ---

--- BEGIN T024 ---
Synthetic data. Use shield_inspect on:
"Card 4532-1488-0343-6467 vs invalid 1234-5678-9012-3456"
Expect: only the first card detected (Luhn check filters the second).
--- END T024 ---

--- BEGIN T025 ---
Synthetic data. Use shield_inspect on:
"Sarah Chen <sarah.chen@acmecorp.com> +1-415-555-9912 4532-1488-0343-6467 SSN 123-45-6789 IP 10.0.0.5"
Expect: at least EMAIL_ADDRESS, PHONE_NUMBER, CREDIT_CARD, SSN, IP_ADDRESS detected.
--- END T025 ---

--- BEGIN T026 ---
Synthetic data. Use shield_inspect on:
"Visit https://example.com or http://10.0.0.5:8080/path?q=1"
Expect: URL and possibly IP_ADDRESS detected.
--- END T026 ---

--- BEGIN T027 ---
Synthetic data. Use shield_inspect on:
"Pi is approximately 3.14159 and e is 2.71828"
Expect: zero detections — guards against false positives on numbers.
--- END T027 ---

--- BEGIN T028 ---
Synthetic data. Use shield_inspect on:
"Order numbers: 12345, 67890, 4471"
Expect: zero detections — order numbers should NOT be flagged as cards/SSNs.
--- END T028 ---

--- BEGIN T029 ---
Synthetic data. Use shield_inspect on:
"Product SKU SK-2024-AB-991 ships tomorrow"
Expect: zero PII — SKU should not match API_KEY pattern.
--- END T029 ---

--- BEGIN T030 ---
Synthetic data. Use shield_inspect on:
"Meeting with John Smith at Acme Corp in Berlin on Friday"
Expect (with NER off): zero or minimal detections; (with NER on): PERSON, ORGANIZATION, LOCATION, DATE.
--- END T030 ---

================================================================================
SECTION D — VAULT INSPECTION
================================================================================

--- BEGIN T031 ---
Synthetic data. Call shield_vault.
Expect: returns whatever is currently mapped (could be empty if first call this session).
--- END T031 ---

--- BEGIN T032 ---
Synthetic data. Mask "alice@example.com", then "bob@example.com", then call shield_vault.
Expect: vault has exactly 2 entries with [EMAIL_ADDRESS_1] and [EMAIL_ADDRESS_2].
--- END T032 ---

--- BEGIN T033 ---
Synthetic data. Mask "alice@example.com" twice, then call shield_vault.
Expect: only 1 entry — duplicate mask reuses the same token.
--- END T033 ---

--- BEGIN T034 ---
Synthetic data. Mask a multi-entity string, then call shield_vault.
Use: "Card 4532-1488-0343-6467 emailed to alice@example.com from 10.0.0.5"
Expect: 3 entries, one per entity type.
--- END T034 ---

--- BEGIN T035 ---
Synthetic data. After several mask calls, ask: "Show me shield_vault as JSON, sorted by token name."
Expect: valid JSON, alphabetically ordered keys.
--- END T035 ---

================================================================================
SECTION E — CLEAR BEHAVIOR
================================================================================

--- BEGIN T036 ---
Synthetic data. Mask "alice@example.com", call shield_clear, then shield_vault.
Expect: vault is empty.
--- END T036 ---

--- BEGIN T037 ---
Synthetic data. After clearing, mask "fresh@user.com".
Expect: token is [EMAIL_ADDRESS_1] (counter reset to 1).
--- END T037 ---

--- BEGIN T038 ---
Synthetic data. Mask "alice@example.com" → get token T1. Clear. Mask "alice@example.com" again → get token T2.
Expect: T1 == T2 textually but the vault now only knows about the second mapping.
--- END T038 ---

--- BEGIN T039 ---
Synthetic data. Mask, then call shield_unmask on the masked text AFTER calling shield_clear.
Expect: unmask returns the masked text unchanged (no mappings to apply).
--- END T039 ---

--- BEGIN T040 ---
Synthetic data. Call shield_clear twice in a row.
Expect: no error on the second call; vault remains empty.
--- END T040 ---

================================================================================
SECTION F — MULTI-ENTITY MIXED INPUT
================================================================================

--- BEGIN T041 ---
Synthetic data. shield_mask:
"Contact alice@example.com or +1-415-555-1234 about card 4532-1488-0343-6467"
Expect: 3 distinct token types.
--- END T041 ---

--- BEGIN T042 ---
Synthetic data. shield_mask:
"Two emails (a@x.io, b@y.io) and two phones (+1-202-555-0100, +1-202-555-0101)"
Expect: EMAIL_ADDRESS_1/2 and PHONE_NUMBER_1/2.
--- END T042 ---

--- BEGIN T043 ---
Synthetic data. shield_mask:
"Visit https://example.com from 10.0.0.5 with API key sk-test-1234567890abcdef"
Expect: URL, IP_ADDRESS, API_KEY.
--- END T043 ---

--- BEGIN T044 ---
Synthetic data. shield_mask:
"SSN 123-45-6789, DOB 1985-07-12, IBAN GB82WEST12345698765432"
Expect: SSN, DATE_OF_BIRTH, IBAN.
--- END T044 ---

--- BEGIN T045 ---
Synthetic data. shield_mask:
"AWS keys: AKIAIOSFODNN7EXAMPLE / wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
Expect: AWS_KEY detected.
--- END T045 ---

--- BEGIN T046 ---
Synthetic data. shield_mask:
"Multiline:\nName: alice\nEmail: alice@example.com\nPhone: +1-415-555-1234"
Expect: email and phone masked, name left alone (or PERSON if NER on).
--- END T046 ---

--- BEGIN T047 ---
Synthetic data. shield_mask:
"alice@example.com,bob@example.com,carol@example.com,dave@example.com,eve@example.com"
Expect: EMAIL_ADDRESS_1 through _5.
--- END T047 ---

--- BEGIN T048 ---
Synthetic data. shield_mask:
"Phones in many formats: +1-415-555-1234, (415) 555-1234, 415.555.1234, 4155551234"
Expect: as many PHONE_NUMBER tokens as the regex catches; note any misses.
--- END T048 ---

--- BEGIN T049 ---
Synthetic data. shield_mask:
"Mixed in JSON: {\"email\":\"alice@example.com\",\"ip\":\"10.0.0.5\"}"
Expect: tokens replace values, JSON structure preserved.
--- END T049 ---

--- BEGIN T050 ---
Synthetic data. shield_mask:
"Markdown: **alice@example.com** and `+1-415-555-1234`"
Expect: tokens placed inside markdown punctuation correctly.
--- END T050 ---

================================================================================
SECTION G — IDEMPOTENCY AND REPEATED VALUES
================================================================================

--- BEGIN T051 ---
Synthetic data. shield_mask "alice@example.com" then shield_mask "alice@example.com" again.
Expect: same token both times.
--- END T051 ---

--- BEGIN T052 ---
Synthetic data. shield_mask:
"alice@example.com replied to alice@example.com about alice@example.com"
Expect: a single token reused 3 times in the masked output.
--- END T052 ---

--- BEGIN T053 ---
Synthetic data. shield_mask:
"Card 4532-1488-0343-6467 and again 4532-1488-0343-6467"
Expect: [CREDIT_CARD_1] appears twice, vault has 1 entry.
--- END T053 ---

--- BEGIN T054 ---
Synthetic data. shield_mask:
"Person mentions: alice@example.com, ALICE@EXAMPLE.COM"
Expect: documents whether the masker is case-sensitive on emails (likely two tokens).
--- END T054 ---

--- BEGIN T055 ---
Synthetic data. shield_mask "+1-415-555-1234" then shield_mask "+14155551234".
Expect: two tokens (different surface forms = different stored values), unless normalized.
--- END T055 ---

================================================================================
SECTION H — EDGE CASES
================================================================================

--- BEGIN T056 ---
Synthetic data. shield_mask on an empty string: ""
Expect: empty output, no crash.
--- END T056 ---

--- BEGIN T057 ---
Synthetic data. shield_mask on whitespace only: "    \n\t   "
Expect: unchanged, no detections.
--- END T057 ---

--- BEGIN T058 ---
Synthetic data. shield_mask on a long paragraph (~2KB) of Lorem Ipsum with one email buried in the middle.
Expect: only the email is masked; rest preserved.
--- END T058 ---

--- BEGIN T059 ---
Synthetic data. shield_mask on text containing emoji and unicode:
"Email 📧 alice@example.com from 北京 with phone +86 10 1234 5678"
Expect: email masked, emoji and CJK characters preserved.
--- END T059 ---

--- BEGIN T060 ---
Synthetic data. shield_mask on text with HTML:
"<p>Contact <a href='mailto:alice@example.com'>Alice</a></p>"
Expect: email masked, tags preserved.
--- END T060 ---

--- BEGIN T061 ---
Synthetic data. shield_mask on URL-encoded text:
"link=https%3A%2F%2Fexample.com%2Fuser%3Femail%3Dalice%40example.com"
Expect: URL detected if pattern matches; documents whether decoder runs.
--- END T061 ---

--- BEGIN T062 ---
Synthetic data. shield_mask on text with trailing punctuation:
"Email me: alice@example.com, please. Or: bob@example.com!"
Expect: tokens replace exactly the email span; punctuation preserved.
--- END T062 ---

--- BEGIN T063 ---
Synthetic data. shield_mask on text where an email is inside parens:
"(alice@example.com)"
Expect: parens preserved around the token.
--- END T063 ---

--- BEGIN T064 ---
Synthetic data. shield_mask on a card number embedded in a longer digit run:
"Reference 0000004532148803436467XYZ"
Expect: ideally NOT detected — guards against partial matches.
--- END T064 ---

--- BEGIN T065 ---
Synthetic data. shield_mask on a string with a literal token in it:
"My placeholder is [EMAIL_ADDRESS_1]"
Expect: the existing token shape is left alone, no double-masking.
--- END T065 ---

================================================================================
SECTION I — REALISTIC SCENARIOS
================================================================================

--- BEGIN T066 ---
Synthetic data. Customer support ticket. shield_mask:
"Customer Sarah Chen (sarah.chen@acmecorp.com, +1-415-555-9912) reported card 4532-1488-0343-6467 was double-charged on order #4471. Please refund."
Expect: name (if NER) + email + phone + card masked. Order number stays.
--- END T066 ---

--- BEGIN T067 ---
Synthetic data. HR complaint. shield_mask:
"Jane Doe (jane.doe@corp.io) reports that Mark Lee (mark.lee@corp.io) made inappropriate comments on 2026-03-12."
Expect: emails masked; names masked if NER on.
--- END T067 ---

--- BEGIN T068 ---
Synthetic data. Server log. shield_mask:
"[2026-04-16 02:13:55] WARN auth.login user=alice@example.com src_ip=10.0.0.5 reason=bad_password"
Expect: email and IP masked; timestamp and tokens preserved.
--- END T068 ---

--- BEGIN T069 ---
Synthetic data. Code snippet. shield_mask:
"const config = { apiKey: 'sk-test-abcdef1234567890', email: 'admin@corp.io' };"
Expect: API_KEY and EMAIL_ADDRESS masked; JS syntax preserved.
--- END T069 ---

--- BEGIN T070 ---
Synthetic data. CSV row. shield_mask:
"id,name,email,phone\n42,Alice,alice@example.com,+1-415-555-1234"
Expect: only the email and phone columns get tokens; structure intact.
--- END T070 ---

--- BEGIN T071 ---
Synthetic data. Slack-style message. shield_mask:
"Hey @bob — alice@example.com just paged about ticket #4471, can you call her at +1-415-555-1234?"
Expect: email and phone masked; @-mention and ticket number kept.
--- END T071 ---

--- BEGIN T072 ---
Synthetic data. Email body. shield_mask:
"Hi Alice,\n\nYour account (alice@example.com) was charged $129.00 to card ending 6467 on 2026-04-15. Confirmation: TX-998877.\n\n— Support"
Expect: full email masked; truncated card ("ending 6467") and confirmation ID untouched.
--- END T072 ---

--- BEGIN T073 ---
Synthetic data. Bug report. shield_mask:
"Stacktrace shows the request from 192.168.1.42 to https://api.example.com/users/alice%40example.com returned 500."
Expect: IP, URL, embedded email handled.
--- END T073 ---

--- BEGIN T074 ---
Synthetic data. Medical-style note. shield_mask:
"Patient Sarah Chen, DOB 1985-07-12, MRN 9988-7766, ph +1-415-555-9912. Allergy: peanuts."
Expect: phone, DOB masked; name if NER on; MRN documented (not currently a built-in entity).
--- END T074 ---

--- BEGIN T075 ---
Synthetic data. Resume snippet. shield_mask:
"John Smith\njohn.smith@gmail.com\n+1 (415) 555-0199\nLinkedIn: https://linkedin.com/in/johnsmith"
Expect: email, phone, URL masked; name if NER on.
--- END T075 ---

--- BEGIN T076 ---
Synthetic data. Banking note. shield_mask:
"Wire $50,000 from IBAN GB82WEST12345698765432 to GB29NWBK60161331926819 by EOD."
Expect: two IBAN tokens.
--- END T076 ---

--- BEGIN T077 ---
Synthetic data. Multilingual. shield_mask:
"Bonjour, mon email est alice@example.fr et mon téléphone +33 1 23 45 67 89."
Expect: email + phone (FR format) masked.
--- END T077 ---

--- BEGIN T078 ---
Synthetic data. Order note. shield_mask:
"Ship order #4471 to Alice at 123 Main St, San Francisco, CA 94107. Contact: alice@example.com."
Expect: email masked; address only masked if NER catches LOCATION.
--- END T078 ---

--- BEGIN T079 ---
Synthetic data. Interview notes. shield_mask:
"Candidate: Alice (alice@example.com). Strengths: Python, FastAPI. Asked about salary, said $180k."
Expect: email masked; salary kept.
--- END T079 ---

--- BEGIN T080 ---
Synthetic data. Mixed PII + secret. shield_mask:
"Login: alice@example.com / password Hunter2! / token sk-prod-1234567890abcdef"
Expect: email + API_KEY masked; password may remain (no current password detector).
--- END T080 ---

================================================================================
SECTION J — TRICKY / NEAR-PII INPUTS (false-positive guards)
================================================================================

--- BEGIN T081 ---
Synthetic data. shield_inspect on:
"My favourite version is 1.2.3.4 of the library"
Expect: should NOT mask 1.2.3.4 as IP_ADDRESS in this context (or document if it does).
--- END T081 ---

--- BEGIN T082 ---
Synthetic data. shield_inspect on:
"The phone book has 123 pages and 4567 entries"
Expect: no PHONE_NUMBER detection.
--- END T082 ---

--- BEGIN T083 ---
Synthetic data. shield_inspect on:
"Random ID 4532148803436467 with no formatting"
Expect: documents whether bare-digit cards are caught (Luhn would still apply).
--- END T083 ---

--- BEGIN T084 ---
Synthetic data. shield_inspect on:
"Year 1985 was great, and 2026 will be too"
Expect: no DOB false positive on bare years.
--- END T084 ---

--- BEGIN T085 ---
Synthetic data. shield_inspect on:
"GIT-SHA: a1b2c3d4e5f60708 commit by alice@example.com"
Expect: only the email — not the SHA.
--- END T085 ---

--- BEGIN T086 ---
Synthetic data. shield_inspect on:
"UUID 550e8400-e29b-41d4-a716-446655440000 is the request id"
Expect: no false positive (UUIDs should not match SSN/card patterns).
--- END T086 ---

--- BEGIN T087 ---
Synthetic data. shield_inspect on:
"Password reset link: https://example.com/reset?token=eyJhbGciOi.JIUzI1NiJ9.long"
Expect: URL token; the JWT-looking string should NOT trigger API_KEY twice.
--- END T087 ---

--- BEGIN T088 ---
Synthetic data. shield_inspect on:
"Alice said: \"my email is at acme dot com\""
Expect: zero detections — obfuscated email should not match.
--- END T088 ---

--- BEGIN T089 ---
Synthetic data. shield_inspect on:
"Test fixtures: foo@example.com noreply@invalid.local user@localhost"
Expect: documents whether reserved/test domains are still flagged (they should be, unless explicitly allowlisted).
--- END T089 ---

--- BEGIN T090 ---
Synthetic data. shield_mask:
"Two cards back-to-back 4532-1488-0343-6467 4532-1488-0343-6467 with no separator-friendly text."
Expect: same token reused; no merging artifact.
--- END T090 ---

================================================================================
SECTION K — END-TO-END WORKFLOWS (the demo gold)
================================================================================

--- BEGIN T091 ---
Demo of shieldprompt MCP. Synthetic data.
Step 1: shield_mask:
"Customer Sarah Chen (sarah.chen@acmecorp.com, +1-415-555-9912) reported card 4532-1488-0343-6467 was charged twice on order #4471."
Step 2: Using ONLY the masked tokens, draft a polite refund-confirmation reply.
Step 3: shield_unmask the draft and show the final customer-facing text.
Expect: at no point in steps 1–2 do real values appear; final reply contains real values.
--- END T091 ---

--- BEGIN T092 ---
Synthetic data. Step 1: shield_mask a 5-line support thread (write your own with 2 emails and 1 phone).
Step 2: Ask Claude to summarise key facts using only tokens.
Step 3: shield_unmask the summary.
Expect: summary mentions real entities only after step 3.
--- END T092 ---

--- BEGIN T093 ---
Synthetic data.
Step 1: shield_mask:
"VIP customer Jane Doe (jane@vip.io) lost her card 4532-1488-0343-6467 and needs a courier replacement to her address at 1 Market St."
Step 2: Draft a 3-step recovery checklist using only tokens.
Step 3: shield_unmask.
Expect: a clean checklist with all real values restored at the end.
--- END T093 ---

--- BEGIN T094 ---
Synthetic data.
Step 1: shield_inspect this paragraph and list detected entities first:
"Reach Alice at alice@example.com or +1-415-555-1234. Backup contact: bob@example.com."
Step 2: shield_mask the same text.
Step 3: shield_unmask.
Expect: detection count matches mask count; final == original.
--- END T094 ---

--- BEGIN T095 ---
Synthetic data.
Step 1: shield_mask Customer A's data:
"Alice (alice@example.com) wants a refund."
Step 2: shield_clear.
Step 3: shield_mask Customer B's data:
"Bob (bob@example.com) wants an upgrade."
Step 4: shield_vault.
Expect: vault contains ONLY Bob's mapping (Alice was cleared).
--- END T095 ---

--- BEGIN T096 ---
Synthetic data.
Mask three different customer tickets sequentially WITHOUT clearing between them.
Then shield_vault.
Expect: tokens accumulate; counters keep incrementing across calls.
--- END T096 ---

--- BEGIN T097 ---
Synthetic data. Stress test:
shield_mask 10 different emails in one call:
"a@x.io,b@x.io,c@x.io,d@x.io,e@x.io,f@x.io,g@x.io,h@x.io,i@x.io,j@x.io"
Expect: EMAIL_ADDRESS_1 through _10.
--- END T097 ---

--- BEGIN T098 ---
Synthetic data. Round-trip stress:
mask the long paragraph from T058, then immediately unmask.
Expect: byte-for-byte equality with the original.
--- END T098 ---

--- BEGIN T099 ---
Synthetic data. Conversational masking:
Tell Claude: "From now on, every time I paste a customer message, automatically call shield_mask first, reason over the masked version, then call shield_unmask before showing me your reply."
Then paste:
"Charge dispute from alice@example.com on card 4532-1488-0343-6467."
Expect: Claude masks before reasoning; only the final reply shows real values.
--- END T099 ---

--- BEGIN T100 ---
Synthetic data. Audit trail:
After running 5–10 mask/unmask cycles in the session, ask:
"Print shield_vault and tell me how many distinct PII values this session has handled."
Expect: a clean summary, useful for a demo recap or compliance log.
--- END T100 ---

================================================================================
SECTION L — BONUS / ADVERSARIAL
================================================================================

--- BEGIN T101 ---
Synthetic data. Try to trick the masker with a near-token:
shield_mask: "[EMAIL_ADDRESS_42] is fake; the real one is alice@example.com"
Expect: only the real email is masked; the literal "[EMAIL_ADDRESS_42]" passes through unchanged.
--- END T101 ---

--- BEGIN T102 ---
Synthetic data. Inject across newlines:
shield_mask:
"Subject: refund\nFrom: alice@example.com\nBody: card 4532-1488-0343-6467"
Expect: every entity caught, headers preserved.
--- END T102 ---

--- BEGIN T103 ---
Synthetic data. Very small input:
shield_mask: "a@b.co"
Expect: [EMAIL_ADDRESS_1].
--- END T103 ---

--- BEGIN T104 ---
Synthetic data. Mostly-whitespace input:
shield_mask: "   alice@example.com   "
Expect: token replaces only the email span; surrounding spaces kept.
--- END T104 ---

--- BEGIN T105 ---
Synthetic data. Token-collision paranoia:
shield_mask "alice@example.com" 26 times in a single string.
Expect: still one token reused, vault has 1 entry.
--- END T105 ---

--- BEGIN T106 ---
Synthetic data. Mask, unmask, mask again with no clear in between.
Expect: same tokens — vault is sticky across calls within a session.
--- END T106 ---

--- BEGIN T107 ---
Synthetic data. Empty-vault unmask:
shield_clear, then shield_unmask "[EMAIL_ADDRESS_1]"
Expect: input echoed unchanged.
--- END T107 ---

--- BEGIN T108 ---
Synthetic data. Mixed alphabet phone:
shield_inspect "Call ONE-EIGHT-HUNDRED-FLOWERS"
Expect: zero detection — alphabetic phone vanity numbers not handled.
--- END T108 ---

--- BEGIN T109 ---
Synthetic data. JSON of a vault export:
After several masks, ask Claude to format shield_vault output as a flat JSON object suitable for storing in a sidecar file.
Expect: parseable JSON.
--- END T109 ---

--- BEGIN T110 ---
Synthetic data. Demo wrap:
"Summarise everything we did in this session: how many entities masked, how many unique people, how the masked-then-reasoned-then-unmasked flow protected the data. Use shield_vault to back the numbers."
Expect: a polished narrative grounded in real tool output — perfect closer for the investor demo.
--- END T110 ---

================================================================================
END OF FILE
================================================================================
Total: 110 test prompts, organised in 12 sections.
For best results, run T091 (full demo flow) at least once before any live walkthrough.
