De-identify every prompt and stored chunk, and measure it per component
Do. Remove direct identifiers (the 18 HIPAA Safe Harbor categories) from every document and every question before any model call or embedding, and measure de-identification recall per component (street, city, ZIP), not per whole string.
Why. Arbiter's whole-string recall read 0.967 while ZIP codes survived in 14 of 20 documents; only a per-component metric caught it. A stock date recognizer also redacted "daily" and broke 11 of 12 medication answers, so test what de-identification removes as well as what it misses.
How to build it, and how to check it
- Run the de-identifier at ingest and on every question; store only de-identified text and embeddings.
- Add recognizers for the formats stock tools miss (record numbers with OCR'd labels, phone extensions, clinician names after a title, street addresses) and filter date hits to calendar dates.
- Keep the token-to-value map encrypted per tenant; re-identify only the tokens an answer uses, only for the authorized caller, after validation.
- Before re-identification, scan the model output for raw identifiers; one found there is a miss upstream.
Check. Seed synthetic records with known identifiers, report recall per component, and block a release below 0.99.
Sources: 45 CFR 164.514(b)(2) (Safe Harbor identifiers); Arbiter post-mortem, 2026-09-04: whole-string recall hid ZIP codes in 14 of 20 documents
Enforced in Arbiter's agent by HIPAA-OUTPUT-LEAKF-STRICT-RECALL