## Ergebnis - Repository unverändert und sauber auf `main` / `d666b9a4abb54c5adcb378a22e09e007f09f0d47`. - Keine Sprint-6I-A-Dateien vorhanden; aktueller Referenzstand ist Sprint 6H-A/6H-B. - Bestehender fokussierter Python-Baseline-Gate ausgeführt: **12 Tests bestanden in 4,09 s**. - Keine Produktionsdatenbank, Runtime-Dateien oder Services berührt. ## Inventar und Befunde ### Tests - Python: - `tests/test_dashboard_v5_sprint6h_a.py` – 7 Tests - `tests/test_dashboard_v5_sprint6h_b.py` – 5 Tests - Browser: - `tests/browser/dashboard_v5_sprint6h_a.spec.js` – 6 Fälle - `tests/browser/dashboard_v5_sprint6h_b.spec.js` – 6 Fälle, exakt **2 Screenshots** - `tests/browser/run_v5_isolated_matrix.sh` stellt synthetische temporäre DBs und isolierte Ports bereit, hat aber **noch keine 6H-A/6H-B- oder 6I-A-Gruppe**. Das ist für einen reproduzierbaren fokussierten Browser-Gate nachzurüsten. ### Migration/Backup/Deployment - Copy-first/idempotent inklusive Integritäts-, FK- und Restore-Probe: - `migrate_sprint6f_b_schema.py` - `migrate_sprint6f_c_schema.py` - `migrate_sprint6h_a_schema.py` - `migrate_sprint6h_b_schema.py` - `migrate_patient_action_schema.py` - Weitere ältere Migrationen: - `document_fts_migrate.py` - `health_dashboard_v3_migrate.py` - `health_system_migrate.py` - Deployment besteht aus systemd-Templates, nicht aus einem vollständigen Deployskript: - `health-dashboard.service` - `health-dashboard-action-worker.service` - `health-dashboard-action-worker.path` - **Wichtige Backup-Lücke:** `weekly_health_drive_backup.py` sichert DB und Skripte, schließt Bilder explizit aus und nimmt `private-media/capture/` nicht auf. Das widerspricht dem 6H-B-Restorevertrag, wonach DB und private Medien konsistent gemeinsam gesichert werden müssen. Vor einer medienrelevanten Freigabe ist das ein Release-Blocker. ### Runtime-Vertrag - V5 bleibt parallel zu V4; aktives Workerprofil: `HEALTH_DASHBOARD_V5_PROFILE=health-record-6e`. - Server bindet standardmäßig `127.0.0.1:8014`, Host-Allowlist `127.0.0.1,localhost`. - Relevante Pfade/Variablen: DB, V4/V5 HTML, lokale Assets, Action-Inbox, Quarantäne, private Medien, Original-Roots, Token/Basic-Password-Dateien. - systemd: `UMask=0077`, `ProtectSystem=strict`, `ProtectHome=read-only`; nur Action-State beziehungsweise Worker-Pfade schreibbar. - V4 ist Fallback und muss byte-identisch bleiben. ## Voraussetzungen auf diesem Host - `pdftotext` vorhanden: **24.02.0** - `OCRmyPDF` vorhanden: **17.7.0** - `tesseract` vorhanden: **5.3.4** - Sprachdaten vorhanden: **deu, eng, osd** - Chromium vorhanden: **148.0.7778.178** - Pillow vorhanden; JPEG/PNG/TIFF/WebP unterstützt - **HEIC nicht unterstützt:** weder `pillow_heif` noch `pyheif`; der aktuelle Code lehnt HEIC ausdrücklich ab. Für 6I-A wären libheif plus ein lokal getesteter Pillow-HEIF-Decoder und Decode→Re-encode/Metadatenentfernung erforderlich. - `sqlite3`-CLI fehlt, ist aber derzeit nicht zwingend: Migrationen und Backups verwenden Pythons `sqlite3`. ## Empfohlene exakte Gates für 6I-A ```bash cd /home/agent/.hermes/repos/HealthManager test "$(git rev-parse HEAD)" = d666b9a4abb54c5adcb378a22e09e007f09f0d47 test -z "$(git status --porcelain)" ``` Ein fokussierter Python-Suite: ```bash PYTHONDONTWRITEBYTECODE=1 python3 -m pytest -p no:cacheprovider -q \ tests/test_dashboard_v5_sprint6i_a.py ``` Maximal sechs synthetische Browserfälle, maximal zwei Screenshots; nach Ergänzung einer isolierten Runner-Gruppe: ```bash HEALTH_DASHBOARD_BROWSER_GROUP=6i-a \ bash tests/browser/run_v5_isolated_matrix.sh ``` Migration zuerst ausschließlich auf privater DB-Kopie: ```bash python3 scripts/health/migrate_sprint6i_a_schema.py \ --db "$PRIVATE_DB_COPY" \ --backup "$PRIVATE_NEW_BACKUP" python3 scripts/health/migrate_sprint6i_a_schema.py \ --db "$PRIVATE_DB_COPY" \ --verify-only ``` V4-Invariante über den gesamten Deploy: ```bash V4_BEFORE="$(sha256sum "$HEALTH_DASHBOARD_FILE" | cut -d' ' -f1)" # Migration, V5-Installation, daemon-reload und kontrollierter Neustart V4_AFTER="$(sha256sum "$HEALTH_DASHBOARD_FILE" | cut -d' ' -f1)" test "$V4_BEFORE" = "$V4_AFTER" ``` Unit-/Runtime-Gates: ```bash systemd-analyze --user verify \ deploy/systemd/health-dashboard.service \ deploy/systemd/health-dashboard-action-worker.service \ deploy/systemd/health-dashboard-action-worker.path systemctl --user is-active health-dashboard.service systemctl --user is-active health-dashboard-action-worker.path curl -fsS http://127.0.0.1:8014/health-dashboard-v5 >/dev/null ``` Vor Freigabe zusätzlich zwingend: kombinierter **DB+private-media Restore-Test** mit Manifest-, SHA-256-, Modus-, Symlink- und Attachment-Referenzprüfung. **Geänderte/erstellte Dateien:** keine.