This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.
Overview
The scribe produced usable notes on a quiet demo call. Production rooms had two speakers, a family member, and a nurse mentioning a different MRN. The model mixed speakers and attached the wrong identifiers.
Separately, client-side logging and an analytics SDK were shipping snippets of transcript. That is a BAA and minimum-necessary problem, not an NLP score problem.
Health systems have warned that unapproved ambient voice tools can breach data-protection rules. The failure is often in the pipeline, not the microphone demo.
Highlights
- Data-flow mapping before eval scoring
- Low-confidence UX as a safety control
- Vendor-path verification, not policy PDFs alone
Typical launch bar: Block until pass rules hold on the money, identity, or safety path.
Challenges
We could not use real clinic audio. Fixture scripts had to cover overlap, accents, and medication names without being a privacy incident.
The STT vendor and the LLM vendor were different companies; one BAA did not cover the other.
“It only keeps audio for 24 hours” was a slide, not something we could see in traces until we asked for retention evidence.
How we tested
Map every hop: browser, STT vendor, LLM, EHR write-back, logs, crash reporters.
Run speaker-overlap fixtures and require the UI to flag low-confidence spans instead of silently attributing speech.
Confirm session timeout and that PHI is not left in local storage after the exam ends.
Treat any PHI in Sentry breadcrumbs or URL query params as Critical.
Starting point vs what we required
| Starting point | What we required |
|---|---|
| We could not use real clinic audio. Fixture scripts had to cover overlap, accents, and medication names without being a privacy incident. | Map every hop: browser, STT vendor, LLM, EHR write-back, logs, crash reporters. |
| The STT vendor and the LLM vendor were different companies; one BAA did not cover the other. | Run speaker-overlap fixtures and require the UI to flag low-confidence spans instead of silently attributing speech. |
| “It only keeps audio for 24 hours” was a slide, not something we could see in traces until we asked for retention evidence. | Confirm session timeout and that PHI is not left in local storage after the exam ends. |
What we delivered
Journeys / UI
- Playwright — Exam-room journey and leftover local storage
LLM traces / evals
- LangSmith — Confirm payloads do not include unexpected identifiers
Failure telemetry
- Sentry — Hunt PHI in client errors and breadcrumbs
Security scan
- OWASP ZAP — Exposed debug endpoints on the scribe API
API / contract
- Postman — Write-back authorization
Outcomes
Findings ranked PHI-in-logs and cross-vendor data flow above word-error-rate. The team disabled the analytics SDK on the scribe route and added a visible “uncertain speaker” state.
We left a repeatable Playwright path for start-scribe → stop → note-in-chart → PHI-cleared-from-browser, plus a Postman check that the write-back API rejected a swapped patient id.
Stack
| Layer | Tool | What we validated |
|---|---|---|
| Journeys / UI | Playwright | Exam-room journey and leftover local storage |
| LLM traces / evals | LangSmith | Confirm payloads do not include unexpected identifiers |
| Failure telemetry | Sentry | Hunt PHI in client errors and breadcrumbs |
| Security scan | OWASP ZAP | Exposed debug endpoints on the scribe API |
| API / contract | Postman | Write-back authorization |
Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.