The evidence gate

A model may say anything. It may not claim anything it has not earned.

A clinical AI emits claims: a phenotype term for a referral note, an alert for a patient, a finding in a consultation note. The gate decides each claim on its own, against the evidence that existed when it was made.

  • RELEASENo rule fired. Not “this is correct”, only “nothing caught it”.
  • HOLDSupported, but qualified. A person sees it before it counts.
  • SUPPRESSA rule was violated. It does not reach the next system.

There is no PASS. The gate never certifies a model, and it says so on every call it answers.

What it does to a note

Each example below is a note, the terms a phenotype mapper returned for it, and what the gate did with each term. The highlighted words are the evidence the gate found. Notes are written the way they are written in Indian clinics, with English phenotype names inside English, Hindi, Tamil sentences.

a relative's findingEnglish

Proband evaluated for Abnormality of the liver; pedigree chart reveals a maternal first cousin with Neurodevelopmental delay.

  • RELEASEAbnormality of the liver HP:0001392earned by “abnormality of the liver”
  • SUPPRESSNeurodevelopmental delay HP:0012758stopped by scope.attribution

a finding the note deniesHindi

Patient ko Thrombocytopenia present hai, lekin Blindness ki koi history nahi mili.

  • SUPPRESSBlindness HP:0000618stopped by scope.negation
  • RELEASEThrombocytopenia HP:0001873earned by “thrombocytopenia”

a finding only being consideredTamil

Patient-ukku Apnea irukku. Recurrent respiratory infections irukka nu next review-la rule out pannanum.

  • RELEASEApnea HP:0002104earned by “apnea”
  • HOLDRecurrent respiratory infections HP:0002205stopped by scope.hypothetical

a relative's findingTamil

Patient-ukku Skin rash irukku, ivarudaiya mother-ukku Intellectual disability iruppathaaga family history-il therivithullaargal.

  • RELEASESkin rash HP:0000988earned by “skin rash”
  • SUPPRESSIntellectual disability HP:0001249stopped by scope.attribution

a finding the note deniesEnglish

Child presented for genetic evaluation with no history of Fever; dysmorphic assessment reveals distinct Hypertelorism.

  • RELEASEHypertelorism HP:0000316earned by “hypertelorism”
  • SUPPRESSFever HP:0001945stopped by scope.negation

a finding only being consideredEnglish

Child brought with complaints of Headache; advised USG abdomen to rule out any suspected Abnormality of the liver.

  • HOLDAbnormality of the liver HP:0001392stopped by scope.hypothetical
  • RELEASEHeadache HP:0002315earned by “headache”

an ordinary note, nothing wrongEnglish

Child reviewed in paediatric genetics clinic with prominent Growth delay noted on physical examination.

  • RELEASEGrowth delay HP:0001510earned by “growth delay”

a term with nothing behind itEnglish

The quick brown fox jumps over the lazy dog.

  • SUPPRESSJumping HP:5200134stopped by evidence.span

The rules, and who says so

Every rule came from a defect we measured in a commercial mapper, and each one carries the finding it came from. A customer can ask one question about any decision: which rule stopped this, and on whose authority. The gate makes no model call, so the same note and the same terms always give the same answer, and it cannot invent its own justification.

RuleAsksActionSource
evidence.spanNo span in the note supports the term, directly or through a more specific term.SUPPRESSaudit F1, F11 (vgen-hpo-audit/out/FINDINGS.md): terms emitted with no referent in the input.
scope.attributionThe supporting span belongs to a family member, not the patient.SUPPRESSaudit F2: 'His mother has epilepsy' -> Seizure on 3 of 3 runs.
scope.negationThe supporting span is negated in its own clause.SUPPRESSaudit F6: 'Denies seizures, headache, or visual loss' -> Headache + Visual loss on 3 of 3 runs.
scope.hypotheticalThe supporting span is raised as a possibility, not a finding.HOLDaudit F9: planned and hypothesised findings emitted as present.
qualifier.unsupportedThe term carries a qualifier the note never states.HOLDaudit F8: 'possible mild ataxia' -> Progressive ataxia on 3 of 3 runs.
evidence.weakOnly a related or broader form of the term appears, not the term itself.HOLDaudit F10: 'cough and cold' -> Coldness HP:0033850, the case the vendor demo ships.

What it changes, and what it costs

Measured on 125 adversarial notes and 60 ordinary ones, every term resolved against the published ontology release (20,413 terms). A violation is a term the note does not support. The last column is the price: terms the note does assert that the gate did not let through. We never publish the first column without it, because a gate that suppresses everything would win it outright.

MapperUnsupported termsWith the gateAccuracyWith the gateAsserted terms keptWith the gate
mock18%0%0.2550.25518%14%
openai/gpt-4.1-mini2%0%0.7860.87278%66%
google/gemini-3.8-flash0%0%0.4740.47720%18%

On a competent mapper the gate raises accuracy, because the terms it removes were the wrong ones. The keyword mapper is what a rule-based extractor looks like; its accuracy is low before and after, and the gate does not pretend to fix that.

The API

The gate runs in front of a model, so it ships as an endpoint rather than a report. What we publish is public and needs no account: the rules above, the measured numbers, and the gate running on these cases.

GET  /v1/rules         every rule, with its source and authority
GET  /v1/benchmarks    the table above
GET  /v1/demo/cases    these published cases
POST /v1/demo/gate     runs the gate on one of them, by case_id

Your own notes need a key. The demo endpoint takes a case id and not free text, so patient data has nowhere to land on an endpoint with no account behind it.

curl -X POST $BASE/v1/gate/phenotype \
  -H "Authorization: Bearer ghk_..." \
  -H "Content-Type: application/json" \
  -d '{"text": "...the note...", "terms": ["HP:0000252", "HP:0001250"]}'

Each decision comes back with the rule, the authority behind it, and the span of text that earned or condemned the term. People sign in to a console to mint and revoke keys and to read their usage; machines send a key and never touch it. We record counts. We do not store the text you send.

What this does not do

  • The gate reads what the system had when it made the claim. It does not know the patient. A true finding stated nowhere in the note is suppressed, and that shows up as cost in the table above rather than being hidden.
  • The cases are synthetic: written to a fixed template of failure classes, then checked. They are not real referral notes.
  • Surface forms come from the ontology. A term whose everyday phrasing is absent from it is suppressed, which is a recall cost rather than a safety one.
  • We audit systems and we also sell this. The defence is that the rules are published rather than hidden in a model, and a customer can rerun the evaluation without us.