feat: KI-Absicherung gegen Falsch-Negative bei Dienstausfall

Bisher: Konnte die KI kein Verdikt liefern (alle Modellstufen scheitern),
ging der Inhalt still als grün durch — für ein Sicherheitswerkzeug ein
Falsch-Negativ-Risiko ("konnte nicht prüfen" ≠ "sauber").

Zwei Maßnahmen:
1. Retry: _classify wiederholt die ganze Modell-Kette bei Komplettausfall
   bis max_retries (Default 1) mit Backoff — fängt transiente Aussetzer ab.
2. Tracking: nicht prüfbare Inhalte landen in ai_result["unchecked"] (statt
   stillem skip) und werden sichtbar in Terminal, Report (Markdown), diff-only
   und E-Mail — jeweils mit URL. score_ai_findings nimmt sie als Grund auf;
   mit unchecked_level="yellow" heben sie das Level auf mindestens Gelb an
   (Default "warn" = nur Hinweis, Ampel unberührt).

Config: max_retries, retry_backoff_seconds, unchecked_level (ai_analysis).
Tests: 230 grün (+ Retry-Recovery, unchecked-Tracking, unchecked_level).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-13 00:50:36 +02:00
commit d06e3d3dfd
9 changed files with 138 additions and 18 deletions

View file

@ -89,6 +89,13 @@ DEFAULT_CONFIG: dict = {
"ai_confidence_min": 0.7, # Mindest-Konfidenz, damit ein Fund gewertet wird
"request_timeout": 60, # Ceiling (auch für Asset-Fetch der Bilder)
"attempt_timeout": 30, # Zeitlimit je Modell-Versuch → Eskalation bei Langsamkeit
"max_retries": 1, # Wiederholungen der ganzen Modell-Kette bei Komplettausfall
"retry_backoff_seconds": 2.0,
# Verhalten, wenn Inhalte trotz Retry NICHT geprüft werden konnten (KI nicht erreichbar):
# "warn" = sichtbarer Hinweis in Report/Terminal/E-Mail (Level bleibt unberührt)
# "yellow" = zusätzlich Gesamt-Level auf mindestens Gelb anheben
# Für ein Sicherheitswerkzeug gilt: "konnte nicht prüfen" ≠ "sauber".
"unchecked_level": "warn",
# Modell-Kette mit zweifacher Eskalation: Stufe 1+2 free, Stufe 3 günstig bezahlt.
# Schlägt ein Modell fehl oder antwortet zu langsam, wird zur nächsten Stufe eskaliert.
"text": {