Evidence Pack
System behavior guarantees, a worked failure trace, and the audit readiness model — for teams evaluating adoption. Self-attested, open for community review.
This describes the reference implementation's technical properties. NHID-Clinical does not issue certifications, conduct audits, or validate vendor implementations. Everything here is self-attested and open for community review.
What it promises
Guarantees
What the engine is built to do on every call, and what an auditor can reconstruct afterwards.
Guarantees
System behavior guarantees
Four properties of the engine, each one a test.
Deterministic output
Identical input event + identical policy version → identical trace output. The policy engine is a pure function with no side effects.
Replay guarantee
Any stored trace can be replayed. Policy version is embedded in each event header; version mismatches are flagged.
Failure invariants
The engine never raises an unhandled exception. Malformed input returns a deterministic error trace; the caller always gets a response.
Idempotency
Submitting the same request_id twice produces the same policy decision. The event store deduplicates at PERSIST.
Audit
Audit readiness model
What an external auditor can reconstruct from the event store.
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
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
What was measured
Results
Where the figures come from, what they measure, and a worked trace of a call that fails. Each figure answers one question; none is combined with another.
Method
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.
AThe 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 | 23/32 expected violations detected 71.9% | 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 | 2278 tests | 2278/2278 passing, 0 skipped, 0 xfailed 100.0% | python -m pytest tests/ -qtests/ |
Measurement
Real-corpus detection rates
Per-control detection and false positives on disjoint populations, per conversation.
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.
What a pass does and does not mean
A pass on the conformance suite, like a detection figure in the table above, is evidence of how the engine behaved on a fixed corpus. It is not evidence about a deployment.
- 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
Trace
Anonymized failure trace example
What an IDG-01 late-disclosure violation looks like in the audit trace.
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.
- INGESTPOST /voice/process received
- session_id
- [REDACTED]
- call_sid
- [REDACTED]
- caller_type
- ai_agent
- VALIDATESpeechResult normalized
- turn_count
- 0
- content_hash
- [REDACTED]
- STATESession reconstructed
- turn_count
- 0
- disclosure_timestamp
- null
- disclosure_confirmed
- false
- POLICYIDG-01 evaluated
- rule
- “Disclose AI identity before any data exchange”
- turn_count
- 0
- disclosure_confirmed
- false
- trigger
- FIRST_TURN_NO_DISCLOSURE
- action
- DISCLOSE_IDENTITY
- VIOLATIONIDG-01 · violation recorded
- severity
- critical
- message
- “AI identity not disclosed at call start”
- action_taken
- DISCLOSE_IDENTITY (forced)
- data_exchanged_before_disclosure
- false
- recoverable
- true
- EXECTwiML rendered — forced disclosure statement
- text
- “This call is being handled by an automated system on behalf of [Provider Name Redacted].”
- disclosure_forced
- true
- PERSISTEvent written
- disclosure_timestamp
- 00:00.109
- boundary_violations
- ["IDG-01"]
- partial_failure
- true
- deterministic_hash
- [REDACTED]
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"].
Coverage
Failure & attack simulation coverage
What the failure injection harness exercises.
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 |
How it runs
Operations
What the reference implementation runs on today, what could break replay, and where it sits among the standards it emits into.
Architecture
Architecture & scale notes
Current reference implementation
FastAPI + SQLite event store. Stateless policy engine. Suitable for development and self-validation. Not load-tested for production at scale.
Path to distributed event store
Replace SQLite with Kafka or S3-backed event log. Policy engine is stateless and horizontally scalable.
Replay preservation
Store input payload + policy version with each event. Policy version change detection prevents silent audit corruption.
Risks
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 |
Context
The trust stack in cross-section
Where this framework sits among the standards it emits into.
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.
Suite
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.
AWhat 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.
BWhat 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 |
CIllustrative result
Illustrative output — not a live test run.
The Implementation Registry lists implementations that report their own results. NHID-Clinical does not verify, audit, or certify entries.
Open for feedback
Questions about implementation or adoption?
Reach out directly or join the community discussion. 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.
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.