Open governance framework · v1.3 · Practitioner-led · not an accredited standard, certification, or regulatory requirement · seeking shadow-evaluation partners
Home/Developers/Evidence Pack

For Enterprise & Procurement Teams · v1.3

Evidence Pack

System behavior guarantees, a worked failure trace, and the audit readiness model — for teams evaluating adoption. Self-attested, open for community review.

The five-layer trust stack, in cross-section Five layers, drawn bottom to top. Layer 1, STIR/SHAKEN, authenticates the carrier number and emits an attestation on the call leg. Layer 2, NHID-Clinical v1.3, is this framework: it establishes the behavioural disclosure baseline and emits a PolicyDecision with a reason code. Layer 3, NHID-Auth v2, is an optional extension adding cryptographic authorization through a signed agent passport. Layer 4, FHIR AuditEvent R4, emits an audit bundle per turn. Layer 5, OpenTelemetry, carries traces, spans and latency. Beneath all five sits layer 0, the NPI gap: no cross-organization authorization exists for AI agents today, which is the problem the stack is assembled to address. Only layer 2 is NHID-Clinical itself; layer 3 is its optional extension and the rest are existing standards it emits into. CONTROL PURPOSE EVIDENCE EMITTED 5 OpenTelemetry Observability & metrics Traces, spans, latency 4 FHIR AuditEvent R4 Audit logging AuditEvent bundle per turn 3 NHID-Auth v2 Cryptographic authorization Signed agent passport 2 NHID-Clinical v1.3 Behavioural disclosure baseline PolicyDecision + reason code 1 STIR/SHAKEN Carrier number authentication Attestation on the call leg 0 The NPI gap — no cross-organization authorization for AI agents NHID-Clinical v1.3 · NHID-Auth v2, optional extension · existing standards this stack 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.

Five testable layers that turn trust claims into evidence

Download PDF — Core Specification Download PDF — Operational Blueprint
Scope of this document: 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.

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.

How NHID-Clinical evidence is produced, and the four bodies it produces A recorded interaction is normalised into an event, evaluated by the policy engine against the five controls, and produces a policy decision carrying a reason code and any violations. That decision is written to an append-only audit record. The same engine and the same path then feed four separate measurements, which are never combined: the conformance suite, which is a test pass rate; the Fabricate battle-test corpus of 550 conversations, which is a detection and false-positive rate measured on two disjoint populations; the governance evaluation corpus of 25 scenarios, which is a research detection measurement; and an adversarial corpus, which measures resistance to deliberate evasion. Each answers a different question, so a single combined accuracy figure would describe none of them. ONE PATH, FOR EVERY MEASUREMENT Recorded interaction A call trace, already held Normalised event One schema, any vendor Policy engine Deterministic, no I/O Audit record Reason code + violations the same path feeds all four FOUR MEASUREMENTS — NEVER COMBINED Conformance suite A test pass rate. Does the engine do what it says? Fabricate corpus Detection and false positives, on two disjoint populations. Governance corpus A research detection measurement, not a pass/fail gate. Adversarial corpus Resistance to deliberate evasion. Each answers a different question, over a different population, with a different denominator. A single combined “accuracy” figure would describe none of them — which is why this project does not publish one. ATR-01 is absent from the Fabricate corpus because that corpus cannot measure it. That is a stated structural limit, not a score of zero. Every figure on this page is reproducible: the commands are in the conformance run record.

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.

Four evidence populations, measured at generation time. Each has its own denominator and its own reproduction command.
PopulationSizeResultReproduce
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

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.

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.

Per-control detection and false-positive rates over the 550-conversation Fabricate corpus
Control Detected Detection rate False positives FP rate
IDG-01 (Identity Disclosure Gate) 70/70100.0%0/1270.0%
PDX-01 (Pre-Data Exchange Gate) 41/41100.0%0/1270.0%
DBC-01 (Deceptive Behavior Check) 183/20091.5%5/1273.9%
EIT-01 (Escalation Implementation Test) 169/17198.8%5/1273.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 SpeechResultPolicy evaluated, event written, no 500
Null bytes in inputSanitized 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 agentDENY_DATA, stricter gate for ai_agent counterparty
Replay with external_calls_cached=falseDivergence 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

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.

7. Risk Register

Risk Mitigation
Timestamps break exact replayHash computed over non-timestamp fields only
Policy engine version change between runsPolicy version embedded in every event; replay rejects mismatches
JSON key ordering varianceCanonical JSON (sorted keys) enforced before hashing
LLM re-invocation during replayJSON Schema enforces external_calls_cached=true when replay_mode=cached
partial_failure accumulation undetectedboundary_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

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.

Read the evaluation guide →

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

ControlVerifiesFailure severity
IDG-01Disclosure occurs before the first operational data exchange, with a recorded timestampCritical
PDX-01No protected data moves on any turn not preceded by a confirmed disclosureCritical
DBC-01No deceptive artifacts and no false or evasive human-status claimsCritical
EIT-01Escalation is available, honored on request, and its outcome is recordedHigh
ATR-01Every event carries a complete audit envelope that validates against the trace schemaCritical

Illustrative result

nhid-cts run --suite v1 --target ./engine
Suite resultConformant
IDG-01 · Identity Disclosure GatePASS
PDX-01 · Pre-Data Exchange GatePASS
DBC-01 · Deceptive Behavior CheckPASS
EIT-01 · Escalation ImplementationPASS
ATR-01 · Audit Trail RequirementsPASS

Illustrative output — not a live test run.

What a pass does and does not mean

A pass means
  • 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
A pass does not mean
  • Certification — there is no certifying body and no accreditation
  • Regulatory compliance in any jurisdiction
  • That your production agents behave this way on live calls
Self-attestation only. The Implementation Registry lists implementations that report their own results. NHID-Clinical does not verify, audit, or certify entries.

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.

Where to go next

Four ways into NHID-Clinical, whatever you came to do.