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

@ -115,6 +115,19 @@ def test_better_earlier_attempt_wins_over_worse_restart():
assert result.solver_run is not None # Zielgröße passt -> Solver läuft, Ergebnis aber als unzuverlässig markiert
def test_persistent_contradicted_assumption_is_unreliable():
# beobachtet am Portfoliomanagement: Prüfung erkannte x als Stückzahl statt als Betrag
# (contradicts_task), aber die Korrektur reparierte es nicht. Der Solver lief als reliable=True.
# Ein verbleibendes contradicts_task nach allen Runden muss das Ergebnis unzuverlässig machen.
from test_review import make_review
contradicts = make_review(verdict="contradicts_task")
session = FakeSession(specs=[HALLUCINATED] * 3, reviews=[contradicts] * 3,
codes=[SolverCode(code=STRUCTURED_CODE)])
result = run_pipeline("Aufgabe", session=session, max_revisions=2, max_restarts=0)
assert not result.reliable
assert any("Prüfung: Annahme contradicts_task" in i for i in result.reliability_issues)
def test_no_restart_when_disabled():
session = FakeSession(specs=[HALLUCINATED] * 3, reviews=[MISMATCH] * 3)
result = run_pipeline("Aufgabe", session=session, max_revisions=2, max_restarts=0)