Skip to content

Medical Advice Remediation — Steer Document

Date: 2026-04-08 (Session 34) Status: Implemented — PR #84 merged Companion spec: ../medical-advice-remediation-feature.md


Problem

The medical advice audit (Session 34) found that patient-visible strings in risk_assessor.py and lab_analyzer.py read as imperative clinical instructions — "Optimize HbA1c <8%", "Hold NSAIDs 5-7 days pre-op", "Type 2 Diabetes detected from HbA1c 6.3%". Curaway is a coordination platform, not a medical practice. These strings crossed the line.

Decision

Rewrite all patient-facing clinical strings to descriptive "providers typically..." framing. Same clinical thresholds, same data — different words. No diagnostic labels for auto-detected conditions.

Design Rationale

Why descriptive framing, not removal

Removing clinical context entirely would harm the patient experience — they need to understand why records are being requested. The fix is framing: "Providers typically request HbA1c below 8% before scheduling" vs "Optimize HbA1c <8% pre-op".

Why a CI guard

String rewrites are point-in-time fixes. Future PRs will add new clinical content. The test_no_medical_advice.py CI scanner prevents regressions by catching imperative verbs in patient-facing files.

Why Dr. Naidu review

Clinical wording changes need clinical advisor sign-off. The Excel review sheet with side-by-side tables ensures the advisor reviews every string, not just a summary.

Enforcement Layers

  1. config/voice_rules.yaml — forbidden phrases (you should, diagnosed with, etc.)
  2. tests/test_no_medical_advice.py — 2-tier CI scanner on patient-facing files
  3. tests/test_voice_compliance.py — scans all source files for voice violations
  4. .claude/agents/voice-auditor.md — subagent runs both tests
  5. CLAUDE.md Ground Rule 9 — "Hard rule: NO medical advice"

References

  • Audit: docs/specs/ai-steer/medical-advice-audit-steer.md
  • Feature spec: docs/specs/medical-advice-remediation-feature.md
  • PR #84 (merged)