# CHANGES REQUIRED ## Important — Schreibpfade wählen weiterhin implizit die Produktions-DB und umgehen Eingabegrenzen **Evidenz** - `scripts/health/health_dashboard_action_worker.py:15-17` `HEALTH_DASHBOARD_DB` ist optional; ohne Variable fällt der Worker auf `~/.hermes/assets/Gesundheit/health_data.db` zurück. - `scripts/health/health_symptom_quick_add.py:37-38, 64-71, 103-108` Die schreibenden Funktionen akzeptieren `database=None` und fallen dann ebenfalls auf die Produktions-DB zurück. - `scripts/health/health_symptom_quick_add.py:117-131` `--db` ist optional (`default=DB`). Der direkte CLI-Einstieg validiert außerdem weder Zukunftsdatum noch die 300-Zeichen-Notizgrenze. Ein rein synthetischer Probe-Lauf bestätigte: Ohne `--db` wurde die globale DB-Auswahl verwendet und ein zukünftiges Datum mit einer 301-Zeichen-Notiz akzeptiert. Es wurden dabei ausschließlich eine temporäre synthetische DB und Fixtures verwendet. **Auswirkung** Ein versehentlicher direkter Aufruf von Worker oder Quick-Add kann ohne explizite DB-Auswahl produktive Gesundheitsdaten verändern. Quick-Add kann dabei den im Server und Worker korrekt durchgesetzten Datums-/Notizvertrag umgehen. **Minimaler Fix** 1. Im Worker `HEALTH_DASHBOARD_DB` zwingend verlangen; keinen Produktions-Fallback. 2. In Quick-Add `--db` mit `required=True` definieren. 3. `conn`, `upsert_scores` und `refresh` nur mit obligatorischem `Path` zulassen. 4. Vor jeder Mutation auch im Quick-Add-Blattknoten validieren: - exaktes kanonisches ISO-Datum, - Jahr ≥ 2000, - nicht in der Zukunft, - Notiz ≤ 300 Zeichen, - bekannte Dimensionen und Integerwerte `0..3`. 5. Regressionstests: Worker und Quick-Add ohne DB müssen mit Exit-Code 2 bzw. fail-closed abbrechen, bevor SQLite geöffnet wird. ## Verifizierte Eigenschaften - Formular → Server → private Queue → Worker → Quick-Add/Korrelation/v5-Refresh vollständig nachvollzogen. - Sieben Pflichtdimensionen werden server- und workerseitig exakt verlangt. - Fehlend bleibt unbekannt; partielle Tage erzeugen keinen Tagesgesamtwert. - Explizite Null bleibt als beobachteter Wert `0` erhalten. - Server und Worker verwerfen Zukunftsdaten, Daten vor 2000, unvollständige Scores und Notizen über 300 Zeichen. - Queue-Bestätigung bedeutet ausdrücklich nur „vorgemerkt“, ist einmalig und nicht frei vortäuschbar. - Keine neuen Diagnose-, Dringlichkeits-, Kausalitäts- oder Therapieclaims gefunden. - v4-Renderer ist bytegleich zu `HEAD`. ## Prüfungen - Vollständige Python-Suite: **139 passed** - Breiter fokussierter Satz: **71 passed** - Finaler Medical-Safety-Satz: **14 passed** - Python-/JS-Syntax, systemd-Verifikation und `git diff --check`: bestanden - Keine Produktions-DB oder produktiven Reports gelesen. - Keine Repository-Quelldateien editiert; Working-Tree-Status vor/nach dem Review unverändert.