Cited answers over discharge summaries
The corpus is one-page discharge summaries. The gold questions ask for the most recent HbA1c and the medication list, and an answer counts only if it cites the chunk it came from and clears the faithfulness judge. 38 of 40 in the last run; both misses are Tesseract misreads the model copied faithfully.
Scanned pages, routed honestly
Half the records are rasterized, tilted and blurred, with no text layer. Those pages go to Tesseract, and when the router wants a vision model that is not configured, the job records vlm_wanted_pages instead of pretending the page was easy.
Structured facts with assertion
Problems, medications with dose and frequency, labs, vitals and allergies, extracted by rules, Med7, bc5cdr and medspacy ConText. "Denies pneumonia" is stored as absent and a family-history line as family, so a problem list never lists what the patient does not have.
Evidence with a page citation
Every fact links to the chunk with the largest span overlap, and GET /v1/patients/{external_id}/facts returns each one with its chunk and page. That is the primitive an evidence packet or a chart-review tool is built from.
Isolation you can probe
The dev database holds two tenants; the second exists only to prove the first cannot see it. Key B gets 404 on tenant A's job, an app_rw session set to A sees zero of B's rows, and a cross-tenant INSERT violates the policy.
Two endpoints and a job poll
POST /v1/documents, POST /v1/queries, GET /v1/jobs/{id}. Idempotency keys make retries safe, and every job records its tokens and cost by model tier, judge calls included.