Skip to main content
Layer 4 makes compliance the default, not an add-on: HIPAA minimum-necessary framing, the CMS small-cell (<11) suppression rule, and sensitive-diagnosis gating (42 CFR Part 2). The behavior lives in ontology/notes/governance-phi.md and config/org_context.md — files you can read, review, and adapt.

5.1 · Inventory your identifiers — day one

governance-phi.md §0 classifies every direct identifier in the connected schema into exactly one role — and the key distinction is that using an identifier as a join key is not the same as outputting it:
IdentifierRole
Member/subscriber/beneficiary IDs (member_id, mbi, mrn)Join key only — never in an output column, chart, label, or log
Names, SSN, full DOB, phone, email, addressNever output (DOB may be used internally for age math; only age/age-band leaves)
ZIP codeAggregate only — first 3 digits max, and only where the area > 20,000 people
Surrogate keys (person_id)Join key; output only in explicitly authorized member-level views — a stable pseudonym is still an identifier
Prompt
You’ll see: a per-column classification your compliance team signs off on — the rules are templates tuned to your regime, and they can be tightened freely but never loosened without a reviewed, attributable decision.
Facilitators: pre-flight these testsRun 5.2 and 5.3 yourself before any session with compliance in the room. These guardrails are instruction-layer enforcement — they live in the governance context files Ana reads, which makes them verifiable and tightenable, but they depend on those files being attached and current. If a test doesn’t fire: check that the ontology repo (with governance-phi.md and config/org_context.md) is connected to the thread, and that your fork didn’t drift from the governance defaults. Demonstrating the check is part of the story — “here’s the file, here’s the behavior, here’s how we audit it.”

5.2 · Test the small-cell rule

Prompt
You’ll see: cells under min_cell_size suppressed with an explanation — including complementary cells that would let someone back out a suppressed value. The starter default is 11 (the CMS standard), configured in config/org_context.md; common alternatives are 10 (some state agencies) or 30 (some internal policies). If suppression doesn’t fire, don’t move on — work the pre-flight check above; an unenforced rule you catch is a better demo than a rule you assumed.

5.3 · Test sensitive-diagnosis gating

Prompt
You’ll see: Ana decline or constrain the request per the gating rules — and point to the policy file that governs it.

✅ Checkpoint

  • Small-cell suppression fired and was explained
  • A sensitive-category request was gated, with the governing file cited