## Verdict: **BLOCKED** ### Important findings - **Original route provenance is fabricated.** `dashboard-v5-record.js:829` populates “Applikationsweg – dokumentierte Originalangabe” with `subkutan` whenever the normalized route is `subcutaneous`. A normalized preset must not be presented as an original documented statement. Leave it empty unless independently sourced. - **Field-specific validation errors are lost.** `medication_contract.py:476-480, 642-651` raises `MedicationFieldError(field)`, but `health_dashboard_server.py:1197-1215` does not preserve that field and falls back to generic `field: "medication"`. The UI at `dashboard-v5-record.js:851` then focuses `quantity` for every such error—including invalid strength, form, route-original, injection details, or note. Values remain in the dialog, but error-to-field association/focus is incorrect. - **Structured medication data is contradicted in expanded details.** `dashboard-v5-record.js:740-752` correctly summarizes the new quantity/form/strength fields, but the details block around line 872 still reads only legacy `actual_dose_*`/`planned_dose_*` fields and can display “Nicht strukturiert dokumentiert” for a newly structured capture. Details should expose quantity, dosage form, and strength separately. - **Accessibility acceptance is not demonstrated.** The dynamically created medication dialog has no accessible name association (`dashboard-v5-record.js:820-822` creates an un-ID’d heading and no `aria-labelledby`). The new test only checks source strings; it does not exercise mouse, native keyboard submit/error focus, Escape/focus restoration, touch targets, 390px reflow, or 200% text/internal scrolling. Therefore those release criteria cannot be approved. ### Positively verified - Historical capture is clearly separated from a real linked plan. - Unknown/paused/ended prescriptions are not presented as active, and historical capture copy says status remains unchanged. - Quantity, dosage form, and strength are separate required inputs and persisted separately. - Preset matching requires no confirmation; deviations require explicit confirmation. - The day symptom action passes the routed date into the existing dialog; the helper updates both the hidden submission date and visible date. - CSS provides dialog scrolling/narrow-width containment and 44px minimum height rules, though runtime verification remains missing. ### Checks run - Focused Sprint 7C-F/F1 tests: **21 passed** - JavaScript syntax checks: **passed** - `git diff --check`: **passed** - No files created or modified; review was read-only. - A concurrent uncommitted change to `dashboard-v5-capture.js` appeared during review and was included only where relevant.