## Ergebnis **P0: keine.** Von den 12 reproduzierten Fehlern ist **nur die Fixture-Byte-Deterministik eine echte Regression**. Die übrigen Fehler sind veraltete Testverträge, die durch spätere Sprints absichtlich überholt wurden. ### P1 - **Explorer Sprint 5B – Fixture-Byte-Determinismus: echte Regression** - Zwei synthetische DBs hatten unterschiedliche SHA-256-Hashes. - Einziger logischer Unterschied: drei zeitabhängige `dashboard_schema_migrations.applied_at`-Werte, erzeugt durch später hinzugekommene Migrationen. - **Minimaler Fix:** Am Ende von `build_dashboard_v5_fixture()` auch diese Migrationstimestamps auf einen festen Fixture-Zeitpunkt normalisieren; anschließend DB und HTML zweimal bauen und Bytegleichheit prüfen. - **Sicherheitsauswirkung:** Keine Änderung produktiver Daten oder medizinischer Semantik. Stärkt reproduzierbare Release-Evidenz und verhindert, dass unterschiedliche Artefakte denselben Reviewstatus erhalten. - **Explorer Sprint 5B – Preset-Label: veralteter Testvertrag** - Aktuell absichtlich: **„Dokumentierter Histamin-Zuordnungsindex“** statt „Histamin-Score“. - **Minimaler Fix:** `EXPECTED_PRESETS` auf das aktuelle Label aktualisieren. - **Sicherheitsauswirkung:** Das aktuelle Label ist medizinisch vorsichtiger; Produktcode keinesfalls zurückändern, da „Score“ eine stärkere Aussage suggeriert. - **Sprint 6A/6C – ECharts standardmäßig geladen: veralteter Testvertrag** - Der synthetische 6A-Prototyp bleibt weiterhin opt-in; später wurde aber das produktive Cockpit auf das lokale ECharts migriert. - **Minimaler Fix:** - 6A: Nur Abwesenheit von `data-echarts-prototype` und `dashboard-v5-echarts-prototype.js` im Standardprofil fordern; das lokale ECharts-Core-Asset darf vorhanden sein. - 6C: Weiterhin prüfen, dass API-Explorer und dessen JS standardmäßig aus sind; ECharts-Core hingegen erwarten. - **Sicherheitsauswirkung:** Lokales, gepinntes Asset bleibt CSP-konform; die synthetische Prototyp-Isolation wird nicht gelockert. Rückbau würde das aktuelle Cockpit beschädigen. - **Sprint 6G-A3 – exaktes Coverage-Dict: veralteter Testvertrag** - Spätere Sprints haben additive Missingness-/Nährstofffelder ergänzt (`mapped_items`, `open_items`, `nutrient_coverage` usw.). - **Minimaler Fix:** Nicht mehr das gesamte Dict exakt vergleichen. Kernfelder als Teilmenge prüfen und die neuen Coverage-/Unknown-Felder separat semantisch validieren. - **Sicherheitsauswirkung:** Neue Transparenz zu unbekannten bzw. unvollständigen Nährstoffdaten bleibt erhalten; Felder nicht aus dem Produkt entfernen. - **Sprint 6G-B3 – Nutrient Contract v1/v3: veralteter Testvertrag** - `yazio_nutrients_v3` wurde in Sprint 6H absichtlich für strengere Einheiten-, Null- und Konversionssemantik eingeführt. - **Minimaler Fix:** Test auf v3 aktualisieren; fehlende Einheit bei Ballaststoffen muss nun fail-closed bleiben, während eine explizite Einheit separat positiv geprüft wird. - **Sicherheitsauswirkung:** Verhindert implizite Einheitenannahmen und Missing-as-value; nicht auf v1 zurücksetzen. - **Sprint 6G-B3 – `inflammation_statement`: veralteter Testvertrag** - Absichtlich ersetzt durch `nutrition_factor_statement`; aktuelle Formulierung enthält weiterhin **„kein validierter Entzündungsindex“**. - **Minimaler Fix:** Neuen Feldnamen prüfen und die neutrale Ausschlussaussage beibehalten. - **Sicherheitsauswirkung:** Vermeidet die irreführende Klassifikation allgemeiner Ernährungsfaktoren als „Entzündungsfaktoren“. ### P2 - **Capture Sprint 5C – `maxlength`: veralteter, zu globaler Test** - Der Check-in bleibt korrekt bei `maxlength='300'`; ein späterer Dokument-Upload besitzt legitim ein anderes Notizfeld mit 500 Zeichen. - **Minimaler Fix:** Assertion auf das konkrete Check-in-Textarea bzw. gerendertes Dialog-Markup begrenzen; globale Abwesenheit von `maxlength='500'` entfernen. - **Sicherheitsauswirkung:** Serverlimit des Check-ins bleibt geprüft, ohne unabhängige Formulare künstlich einzuschränken. - **Sprint 6E4A – Wording: veralteter Testvertrag** - Aktuell: **„Gesundheitswert suchen und hinzufügen“** und **„Lebensmittel-Zuordnungen“**. - **Minimaler Fix:** Erwartete Texte auf aktuelle UX-Bezeichnungen setzen; stabile `data-*`-Hooks stärker gewichten. - **Sicherheitsauswirkung:** Keine Vertrags- oder Datenschutzänderung. - **Sprint 6F-B – Arztgrafiken-Wording: veralteter Testvertrag** - Aktuell präziser: **„Grafiken auswählen und sortieren (maximal vier)“**. - **Minimaler Fix:** Erwarteten String aktualisieren oder semantischen Hook plus Viererlimit prüfen. - **Sicherheitsauswirkung:** Keine medizinische Änderung; aktuelle Formulierung erklärt Auswahl und Reihenfolge besser. - **Sprint 6G-A3 – Today-Control: veralteter Testvertrag** - `data-today-day-open` wurde durch Header-Steuerung `data-header-today-open` plus `data-header-day-shift` ersetzt und ist im JS verdrahtet. - **Minimaler Fix:** Neue Controls und deren Wiring prüfen. - **Sicherheitsauswirkung:** Keine; Produktnavigation nicht auf den alten Hook zurückbauen. - **Sprint 6H-A – visuelles Wording: veralteter Testvertrag** - „Momentaufnahme/Körperbereiche“ wurde durch **„Priorisierte Gesundheitswerte/Weitere Gesundheitswerte“** ersetzt; Methodik bleibt eingeklappt. - **Minimaler Fix:** Aktuelle Hierarchie und weiterhin `Datentabelle, Ereignisse und Methodik` sowie Abwesenheit eines pauschalen „Normalbereichs“ prüfen. - **Sicherheitsauswirkung:** Aktuelle Trennung von persönlichem Vergleich, Laborreferenz und Ernährungsorientierung bleibt erhalten. ## Verifikation und Arbeitsbaum - Fokussierter Lauf: **55 bestanden, 12 fehlgeschlagen**. - Keine Repository-Datei von mir erstellt oder geändert. - Während des Audits erschienen zusätzlich zu den anfänglichen drei Dokuänderungen konkurrierende Änderungen in: - `scripts/health/dashboard_v5/metric_catalog_v2.py` - `tests/browser/dashboard_v5_sprint6j_c.spec.js` - `tests/browser/run_v5_isolated_matrix.sh` - `tests/test_dashboard_v5_sprint6g_nutrition.py` Diese wurden weder untersucht noch verändert. Es wurden keine produktiven Gesundheitsdaten gelesen.