## Findings ### P1 — Authentisierung der V5-Action-Routen ist nicht durchgängig erzwungen - `tests/test_dashboard_v5_sprint6b1_integration.py:98-100` - `docs/sprint6b-metric-catalog-read-api.md:154` - Direkter Kontext: `scripts/health/health_dashboard_server.py:1207-1231` Der geänderte Test und die Dokumentation behaupten, dass die auf `Path=/` erweiterte Browser-Session die V5-Queue-Routen unter `/health-actions/*` authentisiert. Der Server prüft `browser_session_is_authenticated()` jedoch nur für: - `symptom-checkin` - `nutrition-mapping` - `document-review` Für folgende mutierende Queue-Routen fehlt die unabhängige Sessionprüfung: - `symptom-event` - `medication-event` - `general-event` - `supplement-event` - `observation` - `capture` Diese Routen prüfen Origin und einen einmaligen CSRF-Wert, aber CSRF ist kein Authentisierungsnachweis. Damit kann ein noch gültiger beziehungsweise offengelegter CSRF-Wert auch ohne aktuelle Browser-Session eine Health-Action vormerken. Der modernisierte Test kontrolliert lediglich das Cookie-Attribut und verankert dadurch einen Sicherheitsvertrag, den die Runtime nicht erfüllt. **Erforderliche Korrektur:** Vor dem Lesen oder Verbrauchen von Origin, Formular und CSRF für **jede** `/health-actions/*`-Route eine gültige Browser-Session verlangen. Zusätzlich pro Action-Routenklasse einen Negativtest ergänzen: gültiges Origin/CSRF, aber fehlende beziehungsweise abgelaufene Session ⇒ `401` und unveränderte Queue. **Verdict: REQUEST CHANGES — kein APPROVE.** P0: 0 · P1: 1 ## Verbleibende P2/Risiken - `tests/browser/dashboard_v5_sprint6j_c.spec.js:34`: Der RC-Test prüft beim Dokumentreview nur, dass Original- und Extraktionseinstiege vorhanden sind. Die vorherigen Assertions für Guided Comparison sowie Original-/Text-Panes wurden entfernt. Diese Funktionen sind zwar in `dashboard_v5_sprint6i_c.spec.js` abgedeckt, dessen Browsergruppe gehört aber nicht zur dokumentierten minimalen 7A-RC-Matrix. - `README.md:5`: „Aktueller privater Dashboard-Stand“ kann vor dem noch ausstehenden Runtime-Abschluss als bereits ausgerollter Stand gelesen werden. Die übrigen Dokumente stellen den Zustand dagegen korrekt als lokalen RC dar; `docs/sprint7a-v5-release-candidate.md:52-61` dokumentiert Push, Runtime-Synchronisierung, Regeneration und Neustart ausdrücklich als noch ausstehend. - Keine unerwarteten nicht ignorierten Artefakte gefunden; einziges untracked Kandidatenfile ist `docs/sprint7a-v5-release-candidate.md`. Ignorierte `__pycache__`-Verzeichnisse sind vorhanden. ## Review-Bindung - Basis/HEAD: `e33ef9253d255b557fd998eef70c1d989ab24d87` - final beobachtete Diff-Patch-ID: `a4e37ee7389aa60c1bc44757ef6815030de3051a` - `git diff --check`: sauber - Keine Dateien durch den Review geändert.