Most drug-interaction alerts arrive as a verdict with no receipt. "Major interaction." Says who? Based on what? A clinician can't tell, so — under time pressure, for the hundredth alert that shift — they override it and move on. The alert was probably right. The opacity is what killed it.

We think an alert should arrive carrying its own evidence, in a format the EHR already speaks. Two ideas do the work: proof-carrying, and FHIR-native.

Proof-carrying: every claim shows its receipt

Every interaction we assert cites the FDA structured product label (SPL) sentence it came from — not "a reference," the actual span: the label's set ID, the LOINC section code (§34073-7, the drug-interactions section), and the verbatim sentence, down to the source document. Per-edge provenance completeness is 1.0 on our evaluation set: every asserted edge carries its span.

For a derived interaction — one composed along a mechanism chain — the proof is the path. The flagship example is clarithromycin ↔ simvastatin via CYP3A: the reasoner walks "clarithromycin inhibits CYP3A4" and "simvastatin is a substrate of CYP3A4," and hands you both cited label spans as the two-hop proof. The alert isn't "trust me." It's "here's the derivation; check it."

That's the real answer to alert fatigue. You don't fight overrides with louder alerts; you fight them by making every alert interrogable.

FHIR-native: it drops into the tools you already run

An explainable alert is worthless if it can't reach the point of care, so the delivery is standards-native:

No incumbent ships an alert that is both auditable to its source label and delivered in the EHR's own idiom. That combination — proof plus protocol — is the product.

The honest frame

This is a build-in-public project. The CDS-Hooks surface is a demo, not a hardened deployment; coverage is a growing corner of the interaction space, not parity with a million-pair catalog; and the FHIR-RDF export is a well-scoped subset, not full OWL/ShEx conformance. We say all of that out loud, because the whole pitch is that we show our work — and a database whose brand is honesty doesn't get to be coy about its own edges.

Every number here regenerates from cargo test. That's the point: you don't have to take the alert on faith. Neither do we.


Coverage is labeled growing, never parity. Public naming and launch timing are not yet decided. Evidence lives on-disk under research/shared/eval-data/.