Bug: Scoring-Grenzen nicht validiert — Scores außerhalb 0-100 möglich #67

Closed
opened 2026-03-30 20:18:31 +00:00 by David · 1 comment
Collaborator

Beschreibung

Die Scoring Engine in backend/services/scoring_engine.py validiert nicht, ob das LLM Scores im gültigen Bereich 0-100 zurückgibt. Bei LLM-Fehlfunktionen können negative oder >100 Scores entstehen, die die Classification verfälschen.

Hintergrund

Das LLM liefert drei Sub-Scores (klarheit_was, klarheit_wo, kontext), die gewichtet zum Gesamt-Score kombiniert werden. Ohne Bounds-Check kann der Gesamt-Score mathematisch ungültig werden.

Akzeptanzkriterien

  • Jeder Sub-Score wird auf 0-100 geclampt (max(0, min(100, score)))
  • Gesamt-Score wird ebenfalls auf 0-100 geclampt
  • Warnung im Log wenn ein Score außerhalb des Bereichs lag
  • Test: LLM-Response mit Score 150 wird auf 100 geclampt
  • Test: LLM-Response mit Score -10 wird auf 0 geclampt

Technische Hinweise

  • Betroffene Datei: backend/services/scoring_engine.py
  • Ansatz: clamp() nach JSON-Parsing der LLM-Response
  • Migration nötig: nein

Aufwand: S

## Beschreibung Die Scoring Engine in `backend/services/scoring_engine.py` validiert nicht, ob das LLM Scores im gültigen Bereich 0-100 zurückgibt. Bei LLM-Fehlfunktionen können negative oder >100 Scores entstehen, die die Classification verfälschen. ## Hintergrund Das LLM liefert drei Sub-Scores (klarheit_was, klarheit_wo, kontext), die gewichtet zum Gesamt-Score kombiniert werden. Ohne Bounds-Check kann der Gesamt-Score mathematisch ungültig werden. ## Akzeptanzkriterien - [ ] Jeder Sub-Score wird auf 0-100 geclampt (`max(0, min(100, score))`) - [ ] Gesamt-Score wird ebenfalls auf 0-100 geclampt - [ ] Warnung im Log wenn ein Score außerhalb des Bereichs lag - [ ] Test: LLM-Response mit Score 150 wird auf 100 geclampt - [ ] Test: LLM-Response mit Score -10 wird auf 0 geclampt ## Technische Hinweise - Betroffene Datei: `backend/services/scoring_engine.py` - Ansatz: `clamp()` nach JSON-Parsing der LLM-Response - Migration nötig: nein ## Aufwand: S
Author
Collaborator

Superseded by #70 (Kritische Pipeline-Bugs). Score-Overflow ist dort als Finding #5 (LLM-Scores nicht geclampt) abgedeckt.

Superseded by #70 (Kritische Pipeline-Bugs). Score-Overflow ist dort als Finding #5 (LLM-Scores nicht geclampt) abgedeckt.
David closed this issue 2026-03-30 20:39:21 +00:00
Sign in to join this conversation.
No description provided.