feat: verbleibendes contradicts_task nach Korrektur macht Ergebnis unzuverlässig

_unresolved prüft jetzt auch, ob die LLM-Prüfung nach allen
Korrekturrunden noch ein fehlerhaftes Annahmen-Urteil trägt
(contradicts_task, stricter_than_task, weaker_than_task). Ist das der
Fall, wird das Ergebnis als unzuverlässig markiert und der Solver nicht
gestartet (wie bei falscher Zielgröße).

Anlass: Portfoliomanagement – Prüfung erkannte x als Stückzahl statt als
Betrag (contradicts_task), 2 Korrekturrunden reparierten es nicht, aber
der Solver lief als reliable=True. Die Prüfung war wirksam, die Pipeline
behandelte den Befund aber nicht als Zuverlässigkeitsproblem. 439 Tests grün.
This commit is contained in:
Dieter Schlüter 2026-09-18 22:07:05 +02:00
commit baba0d857d

View file

@ -138,6 +138,15 @@ def _unresolved(attempt: dict) -> List[str]:
if not attempt["review"].objective_check.matches:
oc = attempt["review"].objective_check
problems.append(f"Zielfunktion passt nicht zur Frage (gefragt: {oc.asked_quantity}; modelliert: {oc.modeled_quantity})")
# Eine Annahme, die auch nach allen Korrekturrunden noch dem Text widerspricht (contradicts_task),
# die Lösung stärker einschränkt (stricter_than_task) oder mehr zulässt (weaker_than_task), macht
# das Ergebnis unzuverlässig – der Solver rechnet ein falsches Modell. Beobachtet am
# Portfoliomanagement: Prüfung erkannte x als Stückzahl statt als Betrag (contradicts_task),
# aber 2 Korrekturrunden reparierten es nicht, der Solver lief als reliable=True.
faulty = {"contradicts_task", "stricter_than_task", "weaker_than_task"}
for check in attempt["review"].checks:
if check.verdict.value in faulty:
problems.append(f"Prüfung: Annahme {check.verdict.value} – {check.unclear_point[:120]}")
problems += [f"[{i.code}] {i.message}" for i in attempt["issues"] if i.severity == CheckSeverity.ERROR]
return problems