Evidence Pack
System behavior guarantees, a worked failure trace, and the audit readiness model — for teams evaluating adoption. Self-attested, open for community review.
Reference Architectural model of how the layers relate. Layer 2 is specified and implemented in this repository; layer 3 is released as a separate document; layers 1, 4 and 5 are existing standards and are not provided by NHID-Clinical.
Five testable layers that turn trust claims into evidence
0. How Evidence Is Produced — and Why There Are Four Figures
Everything below this section is a number. This is where they come from, and why collapsing them into one “accuracy” figure would misrepresent all four.
The four populations, with live numbers
The same four bodies of evidence the model above describes, measured at generation time rather than transcribed. They are kept apart deliberately: a detection rate on hand-authored scenarios is not a conformance pass rate, and neither is a measure of production performance.
| Population | Size | Result | Reproduce |
|---|---|---|---|
| Governance Evaluation CorpusRule detection on hand-authored scenarios | 25 scenarios · 55 turns | 30/32 expected violations detected 93.8% | python scripts/eval_corpus.py --checktests/evaluation_corpus_v1.json |
| Fabricate baseline corpusPer-control detection and false positives | 550 conversations | DBC-01 183/200 · EIT-01 169/171 · IDG-01 70/70 · PDX-01 41/41 | python scripts/check_baseline.pyfixtures/fabricate/conversations.csv |
| Shadow-pilot corpusObserve-only decision distribution | 60 conversations | Distribution charted on the shadow evaluation guide | python scripts/build_evidence_visuals.py --checkfixtures/fabricate/shadow_pilot.jsonl |
| Conformance suiteImplementation correctness against the specification | 1148 tests | 1148/1148 passing, 0 skipped, 0 xfailed 100.0% | python -m pytest tests/ -qtests/ |
1. System Behavior Guarantees
Identical input event + identical policy version → identical trace output. The policy engine is a pure function with no side effects.
Any stored trace can be replayed. Policy version is embedded in each event header; version mismatches are flagged.
The engine never raises an unhandled exception. Malformed input returns a deterministic error trace; the caller always gets a response.
Submitting the same request_id twice produces the same policy decision. The event store deduplicates at PERSIST.
2. Real-Corpus Detection Rates
The CTS YAML suite validates the policy engine against synthetic, hand‑authored cases. To check behavior against real conversational phrasing, the engine is also replayed against the Fabricate Battle‑Test Corpus — 550 conversations, of which 127 are labelled scenario_type=compliant.
Detection and false positives are measured on disjoint populations, per conversation — not per turn. Detection is the share of conversations declaring a given violation in which that control fired. The false‑positive rate is the share of the 127 compliant conversations in which it fired anyway.
| Control | Detected | Detection rate | False positives | FP rate |
|---|---|---|---|---|
| IDG-01 (Identity Disclosure Gate) | 70/70 | 100.0% | 0/127 | 0.0% |
| PDX-01 (Pre-Data Exchange Gate) | 41/41 | 100.0% | 0/127 | 0.0% |
| DBC-01 (Deceptive Behavior Check) | 183/200 | 91.5% | 5/127 | 3.9% |
| EIT-01 (Escalation Implementation Test) | 169/171 | 98.8% | 5/127 | 3.9% |
ATR-01 is not listed because this corpus cannot measure it. The replay harness drops all 14 ATR‑01 expectations as untestable — audit-field completeness is a property of the live event envelope, not of a replayed transcript. That is a limitation of the measurement, not a score of zero. ATR-01 remains one of the five canonical controls; the supplemental rule is bot‑to‑bot.
The harness also drops 29 PDX‑01 expectations where disclosure occurs at turn 0, because the probe is then post‑disclosure and there is nothing to gate. The 41/41 above is measured after those are removed.
Self-reported and not independently audited. These are replay measurements against a fixed corpus, not a conformance claim and not evidence of field accuracy. DBC-01 misses 17 of 200 declared cases and fires on 5 of 127 compliant ones; deception heuristics remain the least precise of the controls and an active area of work.
3. Anonymized Failure Trace Example
The example below is synthetic — constructed from observed behavior patterns, with all identifying information removed. It shows what an IDG-01 (late disclosure) violation looks like in the NHID-Clinical audit trace, and what a payer auditor would see when reviewing it.
Anonymized Failure Trace — IDG-01 Violation
Source: Synthetic example based on observed behavior patterns. No real PHI, no real provider data.
Generated: 2026-06-07 | Policy version: nhid-clinical-v1.3 | Correlation ID: [REDACTED]
t=00:00.000 INGEST POST /voice/process received
session_id: [REDACTED]
call_sid: [REDACTED]
caller_type: ai_agent
t=00:00.084 VALIDATE SpeechResult normalized
turn_count: 0
content_hash: [REDACTED]
t=00:00.091 STATE Session reconstructed
turn_count: 0
disclosure_timestamp: null
disclosure_confirmed: false
t=00:00.098 POLICY IDG-01 evaluated
rule: "Disclose AI identity before any data exchange"
turn_count: 0
disclosure_confirmed: false
trigger: FIRST_TURN_NO_DISCLOSURE
action: DISCLOSE_IDENTITY
── Violation recorded ──────────────────────────────────────────────
t=00:00.103 VIOLATION IDG-01
severity: critical
message: "AI identity not disclosed at call start"
action_taken: DISCLOSE_IDENTITY (forced)
data_exchanged_before_disclosure: false
recoverable: true
────────────────────────────────────────────────────────────────────
t=00:00.109 EXEC TwiML rendered — forced disclosure statement
text: "This call is being handled by an automated system on behalf of [Provider Name Redacted]."
disclosure_forced: true
t=00:00.114 PERSIST Event written
disclosure_timestamp: 00:00.109
boundary_violations: ["IDG-01"]
partial_failure: true
deterministic_hash: [REDACTED]
── What this means ─────────────────────────────────────────────────
The AI agent did not disclose its automated nature at call start.
The policy engine detected a turn_count=0 exchange with no prior
disclosure and forced a disclosure statement before any data could
be shared. The violation is logged as critical but recoverable.
A payer auditing this session would see:
- disclosure_timestamp set 109ms into the call (forced, not voluntary)
- partial_failure: true
- boundary_violations: ["IDG-01"]
────────────────────────────────────────────────────────────────────
4. Failure & Attack Simulation Coverage
The failure injection harness covers the following scenarios:
| Scenario | Expected behavior |
|---|---|
| Empty SpeechResult | Policy evaluated, event written, no 500 |
| Null bytes in input | Sanitized before engine, sanitized text stored |
| Missing CallSid (session binding failure) | 400 returned, no event written, structured error body |
| Late disclosure (IDG-01 + PDX-01) | DENY_DATA action, 2 critical violations logged |
| Escalation path unavailable (EIT-01) | ESCALATE_HUMAN with TwiML fallback, violation logged |
| Deceptive artifact (DBC-01) | LOG_ONLY, partial_failure=true, session continues |
| Missing audit fields (ATR-01) | Violation logged, pipeline continues, gap recorded |
| Bot-to-bot, undisclosed agent | DENY_DATA, stricter gate for ai_agent counterparty |
| Replay with external_calls_cached=false | Divergence detected, ATR-01 violation, replay flagged FAIL |
| Duplicate request_id (idempotency) | Identical trace returned, no duplicate event written |
5. Audit Readiness Model
An external auditor reconstructing a session from the event store can determine:
- When the call started and when the first disclosure statement was made
- Whether disclosure preceded any PHI or credential exchange
- Whether opt-out or escalation was requested and how it was handled
- Which policy engine version processed each event
- Whether any partial failures or boundary violations were recorded
Example correlation ID lifecycle:
correlation_id: "auth-2026-05-26-001" t=00:00.000 INGEST POST /voice/process received t=00:00.123 VALIDATE SpeechResult normalized t=00:00.131 STATE Session reconstructed: turn_count=0, disclosure=null t=00:00.140 POLICY IDG-01: DISCLOSE_IDENTITY triggered (turn_count=0) t=00:00.145 EXEC TwiML disclosure message rendered t=00:00.152 PERSIST Event written — disclosure_timestamp set
6. Architecture & Scale Notes
FastAPI + SQLite event store. Stateless policy engine. Suitable for development and self-validation. Not load-tested for production at scale.
Replace SQLite with Kafka or S3-backed event log. Policy engine is stateless and horizontally scalable.
Store input payload + policy version with each event. Policy version change detection prevents silent audit corruption.
7. Risk Register
| Risk | Mitigation |
|---|---|
| Timestamps break exact replay | Hash computed over non-timestamp fields only |
| Policy engine version change between runs | Policy version embedded in every event; replay rejects mismatches |
| JSON key ordering variance | Canonical JSON (sorted keys) enforced before hashing |
| LLM re-invocation during replay | JSON Schema enforces external_calls_cached=true when replay_mode=cached |
| partial_failure accumulation undetected | boundary_violations[] written per event; rate trackable across sessions |
8. One-Page Architecture Summary
What it is: A lightweight, stateless service that logs AI voice agent disclosure behavior. Input: call events from Twilio or equivalent. Output: tamper-evident, deterministically reproducible trace with policy decision and boundary violations.
What it is not: A caller identity verifier, a certification body, or a compliance guarantor. Adoption does not confer HIPAA or TCPA compliance.
Event flow:
[AI Voice Agent] → INGEST → VALIDATE → STATE → POLICY → EXEC → PERSIST
↓
[Event Store]
↓
[Auditor / Payer System]
Related Resources
- Developers reference → — API, traces, test suite
- Shadow Evaluation Guide → — the payer observation process
- — deterministic control walkthrough
Procurement checklist
Run the open-source test suite, review a sample failure trace, confirm audit fields in vendor JSON logs, then decide whether to require conformance in the next RFP cycle.
For Payers guide → Operational Blueprint (PDF) →Open for feedback
Questions about implementation or adoption?
Reach out directly or join the community discussion.
Conformance test suite
A conformance claim you cannot verify is marketing. This suite makes the claim checkable by anyone, including people with no reason to trust the claimant.
What it is
A machine-readable specification of test cases — published as YAML in the open repository at conformance/nhid_conformance_test_suite_v1.yaml — paired with a runner that executes them against an implementation and reports pass or fail per control.
The test definitions are separate from the runner on purpose. If you write your own engine in another language, you can consume the same YAML and be measured against the same cases.
What it tests
| Control | Verifies | Failure severity |
|---|---|---|
IDG-01 | Disclosure occurs before the first operational data exchange, with a recorded timestamp | Critical |
PDX-01 | No protected data moves on any turn not preceded by a confirmed disclosure | Critical |
DBC-01 | No deceptive artifacts and no false or evasive human-status claims | Critical |
EIT-01 | Escalation is available, honored on request, and its outcome is recorded | High |
ATR-01 | Every event carries a complete audit envelope that validates against the trace schema | Critical |
Illustrative result
Illustrative output — not a live test run.
What a pass does and does not mean
- Your implementation produced the expected verdict on every published case
- Someone else can reproduce that result from the same inputs
- You have evidence to show a counterparty during procurement
- Certification — there is no certifying body and no accreditation
- Regulatory compliance in any jurisdiction
- That your production agents behave this way on live calls
Run it
Locally against your own engine, or continuously against your production agents.
NHID-Clinical is a voluntary open framework — not an accredited standard, certification, or regulatory requirement. Everything on this page is published under CC BY 4.0.
Going further: Part V of the NHID-Clinical Playbook covers evidence methodology, the four separate evidence bodies, regulatory mapping and the open questions.