# Sprint 7A – Dashboard V5 Release Candidate

**Ausgangsbasis:** `e33ef9253d255b557fd998eef70c1d989ab24d87`

**Ziel:** V5 als belastbaren Release Candidate konsolidieren, ohne V4 umzuschalten oder zu entfernen.

## Ergebnis

Sprint 7A schließt die Dokumentations- und Testdrift nach Sprint 6K-A und dem Telegram-Symptom-/Kalenderfix. Die V4→V5-Paritätsmatrix ist wieder quellengestützt. V5 bleibt die private parallele Route; V4 bleibt unverändert der geschützte Fallback.

## Technische Korrekturen

- **Einheitliche Action-Authentisierung:** Jede allowlistete `/health-actions/*`-Route verlangt jetzt vor Origin-, Body- und CSRF-Verarbeitung eine gültige kurzlebige Browser-Session. Ein Negativvertrag prüft für alle neun Routen: gültiger Seiten-CSRF plus same-origin, aber keine Session ergibt `401` und keine Queue-Datei.
- **Legacy-/Sparse-Schema:** Der Metrikkatalog behandelt fehlende neuere Ernährungsspalten fail-closed als `supported_no_data`, statt die gesamte Katalogsuche mit SQL-Fehler abzubrechen.
- **Lokale OCR-/Medienwerkzeuge:** Externe Tools erhalten kein geerbtes `PYTHONPATH`/`PYTHONHOME`; dadurch kann eine Test- oder Service-Pythonumgebung das System-`ocrmypdf` nicht mehr mit binär inkompatiblen Paketen vergiften. Die `pdftotext`-Versionsabfrage verwendet den korrekten Schalter.
- **Deterministische Fixture:** Migrationstimestamps werden auf den festen Fixture-Zeitpunkt normalisiert; zwei Builds sind wieder bytegleich.
- **SQLite-Restoretest:** Tabellen mit und ohne `rowid` werden deterministisch über ihre echten Spalten verglichen.
- **Aktueller Browservertrag:** Neue Gruppe `7a-rc` prüft das gegenwärtige 6J/6I-UI-Profil statt der historischen 6D-Navigation; der Dokumenttest wählt gezielt einen offenen synthetischen Reviewfall.
- **Vertragsdrift:** Historische Tests wurden auf die bewusst eingeführten, sichereren Verträge aktualisiert: Cookie `Path=/` für API plus authentisierte Queue-Routen, Auth-vor-Existenzprüfung, Download-/Preview-Trennung, Nährstoffvertrag v3, neue UX-Bezeichnungen und additive Coverage-Felder.

## Abnahme-Evidenz vor Runtime-Rollout

| Gate | Ergebnis |
|---|---|
| Gesamte V5-Python-Vertragssuite | **222 bestanden** in 308,75 s |
| Dokument-/OCR-Fokus unter absichtlich injiziertem temporärem `PYTHONPATH` | **19 bestanden** |
| API/Security-/Nutrition-Fokus | **39 bestanden** |
| modernisierte historische Vertragsgruppe | **67 bestanden** |
| Telegram-/Kalender-/6J-C-RC-Browsergruppe `7a-rc` | **6 bestanden** |
| 6K-A Mapping/Capture-Browsergruppe | **4 bestanden** |
| Python-AST | **117 Dateien** parsebar |
| geänderte JS-/Shell-Dateien | Syntax **ok** |
| Diff-/Secret-/Medical-Claim-Gates | `git diff --check` sauber; keine Secret-Treffer; keine neu hinzugefügten verbotenen Medical Claims |
| Produktive DB read-only | `integrity_check=ok`, `foreign_key_errors=0` |
| V4-Artefakt | SHA-256 `798d11f191b402c556ec9233f50f5622d7f849022ff301cb4336ef2556e5f3a8` unverändert |

Alle dynamischen Testdaten und Browsertraces waren synthetisch und lagen außerhalb des Repositorys. Es wurde keine produktive Health-Action abgesendet.

## Bewusst nicht freigegeben

Sprint 7A ist **keine** Freigabe für:

- Redirect oder Austausch von `/health-dashboard`;
- Abschaltung, Löschung oder Regeneration von V4;
- automatische medizinische Interpretation, Diagnose, Therapie- oder Supplementempfehlung;
- automatische Übernahme ungeprüfter Dokument-/OCR-Inhalte;
- direkte Browser-Schreibzugriffe auf die Gesundheitsdatenbank.

## Post-RC-Restumfang

Die aktualisierte Paritätsmatrix führt als verbleibenden Kernpunkt insbesondere **„System und Legacy“** offen. Mehrere Quellenverträge bleiben teilweise, vor allem quellenweite Frische/Importstatus, vollständige Datenqualitätsaufgaben, breitere Laborabdeckung und einzelne Rohdetailfelder. Diese Punkte verhindern nicht den parallelen V5-RC, aber weiterhin eine V4-Abschaltung.

## Runtime-Abschluss

Nach dem finalen Commit sind noch versionsgebunden auszuführen und im Abschluss zu protokollieren:

1. Push und Remote-SHA-Abgleich;
2. atomare Synchronisierung der geänderten Runtimequellen;
3. read-only Regeneration von V5 mit Profil `health-record-6e`;
4. kontrollierter Neustart ausschließlich von `health-dashboard.service`;
5. privater Auth-/Header-/Kalender-/Day-Smoke;
6. erneuter Runtimehash-, DB-Integritäts-, V4-Hash- und Git-Status-Abgleich.
