Open proposal · v1.3 · Not an accredited standard or certification
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.

  • StatusSelf-attested
  • ReviewOpen to the community
  • ReproducibleEvery figure, from the repository
  • CertificationNone issued

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.

01 / 10
Guarantee01

Deterministic output

Identical input event + identical policy version → identical trace output. The policy engine is a pure function with no side effects.

Guarantee02

Replay guarantee

Any stored trace can be replayed. Policy version is embedded in each event header; version mismatches are flagged.

Guarantee03

Failure invariants

The engine never raises an unhandled exception. Malformed input returns a deterministic error trace; the caller always gets a response.

Guarantee04

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.

02 / 10

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

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

03 / 10

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 normalized 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 Normalized 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.

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.

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 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.

04 / 10

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.

ControlDetectedDetection rateFalse positivesFP rate
IDG-01 Identity Disclosure Gate70/70100.0%0/1270.0%
PDX-01 Pre-Data Exchange Gate41/41100.0%0/1270.0%
DBC-01 Deceptive Behavior Check183/20091.5%5/1273.9%
EIT-01 Escalation Implementation Test169/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.

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.

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

Trace

Anonymized failure trace example

What an IDG-01 late-disclosure violation looks like in the audit trace.

05 / 10

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.

Trace · synthetic, anonymizedpolicy nhid-clinical-v1.3

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]

  1. INGESTPOST /voice/process received
    session_id
    [REDACTED]
    call_sid
    [REDACTED]
    caller_type
    ai_agent
  2. VALIDATESpeechResult normalized
    turn_count
    0
    content_hash
    [REDACTED]
  3. STATESession reconstructed
    turn_count
    0
    disclosure_timestamp
    null
    disclosure_confirmed
    false
  4. 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
  5. 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
  6. EXECTwiML rendered — forced disclosure statement
    text
    “This call is being handled by an automated system on behalf of [Provider Name Redacted].”
    disclosure_forced
    true
  7. 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.

06 / 10

The failure injection harness covers the following scenarios:

ScenarioExpected 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

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

07 / 10
Now

Current reference implementation

FastAPI + SQLite event store. Stateless policy engine. Suitable for development and self-validation. Not load-tested for production at scale.

Path

Path to distributed event store

Replace SQLite with Kafka or S3-backed event log. Policy engine is stateless and horizontally scalable.

Invariant

Replay preservation

Store input payload + policy version with each event. Policy version change detection prevents silent audit corruption.

Risks

Risk register

08 / 10
RiskMitigation
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

Context

The trust stack in cross-section

Where this framework sits among the standards it emits into.

09 / 10
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 behavioral 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 Behavioral 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.

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.

10 / 10

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

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

CIllustrative 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.

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.

Read the evaluation guide →

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.