Oncology tumor board preparation
An AI drafts the case summary a lung-cancer tumor board works from. This pipeline checks whether the draft holds up when documents go missing, when the model gets swapped, and after de-identification. Built on real, de-identified TCGA lung cases.
Data: Real, de-identified pathology and clinical records of lung-cancer patients from The Cancer Genome Atlas (TCGA), sourced from the NCI GDC open tier and cBioPortal (ODbL, with attribution). No DearAuditor client data is involved.
The clinical task
Before a tumor board meets, someone has to condense each patient's chart into the brief the board actually discusses. Pathology report, clinical summary, molecular findings. This is exactly the kind of drafting work clinics now hand to an AI model.
The workflow under test: the model reads the case documents and produces a structured summary with diagnosis, stage, and the findings that drive treatment options.
What can go wrong
The dangerous failure is not a wrong answer. It is a confident answer built on missing evidence. If the pathology report never made it into the prompt (a broken upload, a permissions gap, a truncated context), a good model should say so. A bad one fills the gap with plausible text.
- Making things up when inputs are missing. The summary states a diagnosis and stage no source document supports.
- Silent drift on model updates. The vendor swaps the underlying model and yesterday's validated behavior quietly changes.
- De-identification gaps. Patient identifiers slip through the pipeline into prompts and logs.
How we measure it
The pipeline runs every case through a stress grid: the same case with individual documents removed, reordered, or degraded. A pinned AI judge scores each output against a rubric. The difference tells us how much each document actually contributes, its information value. A document the model can lose without its score dropping is a document the model is not really using.
The same setup re-runs whenever a model changes, so a swap becomes a measured check instead of a hope.
Findings
We ran the same pinned battery on two Gemini generations. The headline: how much a model leans on the pathology report depends on the model version. Which is exactly why the measurement has to be repeated on every swap.
| Input document | gemini-2.5-flash | gemini-3.5-flash | Reading |
|---|---|---|---|
| pathology_report | 0.08 | 0.00 | On gemini-3.5-flash, scores did not drop at all when the report was withheld. The model still produced the histological diagnosis, which only that report supports. The older model used it only slightly more. |
| clinical_summary | 0.08 | 0.08 | Barely used, by either model. |
| molecular_report | 0.21 | 0.21 | The only input both models measurably rely on. |
Model-swap check: re-running the comparison battery, gemini-2.5-flash to gemini-3.5-flash showed a mean score delta of 0.00 (0 case-level regressions). The gate PASSED. That is the point: the swap was verified, not assumed.
How much weight these numbers carry: this case bank holds 8 cases. Enough to demonstrate the method and to catch a gross failure, far too few to certify a model. An information value of 0.08 versus 0.00 is a difference of two graded checks, well inside the noise a bank this size produces. A clinic engagement runs the same pipeline on hundreds of local cases, where the confidence intervals actually close. Read these figures as a worked demonstration, not as a verdict on either model.
De-identification check: adding clinical recognizers to the ingest pipeline raised measured identifier recall from 86% to 100% on synthetic identifiers injected into the case bank. 100% here is an upper bound. Recall is only measurable against identifiers we know are there, so it demonstrates the fix, not the absence of all leaks.
What it means for you
If your tumor-board assistant scores like this, the summary it hands your board can read perfectly while resting on nothing. Whether that happens can change with a routine model update, as it did between these two versions. The fix is not a better prompt. It is a contract: the workflow must refuse to summarize when a required document is absent, and your validation pipeline must prove it refuses.
That proof is repeatable. When the vendor ships a new model version, the same pack re-runs in minutes and tells you whether the contract still holds, for that version, not the last one.
The validation report
Every pipeline run ends in a dossier like this one — the document you hand to your quality manager or auditor. It is generated from the pinned run, never edited by hand.
Validation dossier — tumor board preparation (tcga-lung pack)
run 9d1cfd7827de6129Draft evidence, unsigned — generated by the engine from pinned inputs; requires human review and signature before use as QMS evidence. Release recommendation: approved_for_release
Demonstration pack: summarize a lung-adenocarcinoma record for a molecular tumor board, stating the histological diagnosis, clinical stage, and (where available) the actionable molecular alteration. Built on REAL, de-identified, public TCGA-LUAD data. FOR DEMONSTRATION / DISCUSSION WITH CLINICIANS — not a clinical device.
1. Validation summary (baseline, intended input)
3 / 3 rubric items passed · 0 failed · condition: baseline (intended input)
| Requirement (rubric item) | Result |
|---|---|
| item_diagnosis | pass |
| item_staging | pass |
| item_molecular | pass |
2. Acceptance criteria
| Threshold | Value | Limit | Result |
|---|---|---|---|
| critical_omission_rate_max | 0.0 | 0.1 | PASS |
| mean_score_min | 1.0 | 0.6 | PASS |
3. Input contract (characterization)
Information value = mean score drop when the element is withheld. Characterization, not pass/fail.
| Element | Modality | Necessary | Information value |
|---|---|---|---|
| pathology_report | pathology | — | 0.000 |
| clinical_summary | structured_clinical | yes | 0.083 |
| molecular_report | genomics | yes | 0.208 |
4. Judge calibration
Status: not_collected — no physician double-grading recorded yet.
5. Attestation
Generated by validrig 0.1.0. Pinned-inputs hash: 9d1cfd7827de61293072aef24c1e2ac1fe00d736396e90ec35d79920fa01c57d
SUT and judge model_version are author-asserted. For a hosted endpoint that may update silently, pin a local model or record the provider's returned model id to keep this attestation trustworthy.
| Pinned input | Value |
|---|---|
| pack_id | tcga-lung |
| pack_version | 0.1.0 |
| pack_hash | 8aacabc15a74db73da592ce9d32472dee848e23c23a59a533f6d34c6b55df897 |
| battery_id | gemini_contract_35 |
| battery_version | 1 |
| sut_id | gemini-3.5-flash |
| sut_hash | 0f379816f189c131b2f261c55b5ee66a30627e7f3095e9fedc038b7dbc0ac040 |
| judge_id | geval-gemini-flash-lite |
| judge_version | 1 |
| seed | 1 |
| engine_version | 0.1.0 |
6. Signatures
unsigned — meaning: Approved V&V Evidence and Report. Signer roles: medical_reviewer, quality_reviewer. Sign by review + anchoring to an immutable release (github_immutable_release (planned)).
DearAuditor Eval · generated 2026-08-30T21:20:36+00:00 · validrig engine
generated from run 9d1cfd7827de6129
This page shows methodology and worked examples. It is not regulatory advice.