Skip to content

fix(dashboard): LLM-Coverage-Spalte in Kalibrierungs-Tabelle rendern (#233)#276

Merged
TillQuandel merged 1 commit into
masterfrom
fix/233-llm-coverage-spalte
Jul 14, 2026
Merged

fix(dashboard): LLM-Coverage-Spalte in Kalibrierungs-Tabelle rendern (#233)#276
TillQuandel merged 1 commit into
masterfrom
fix/233-llm-coverage-spalte

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Befund

PR #250 hat die Datenschicht repariert: _read_calibration_data() (generative/eval_dashboard_server.py) liefert llm_cov jetzt fuer 339/362 Zeilen (Fallback coverage_factualcoverage_rate). Im Review von #250 fiel aber auf: das Frontend rendert keine LLM-Coverage-Spalte — llm_cov kam in internal/dashboard/eval_dashboard.html nirgends vor. Der Backend-Wert kam beim Nutzer nie an. Ursprünglich als #255 getrackt, dann in #233 zusammengeführt (ein Symptom = ein Issue).

Fix

internal/dashboard/eval_dashboard.html, #calib-table-Region (6 → 7 Spalten):

  • Neuer Spalten-Header LLM-Coverage zwischen "LLM-Fehlerquote" und "Human-Fehlerquote", mit Tooltip: „Belegrate laut LLM-Judge. coverage_factual (satzbasiert) ist die mit dem v4-Umbau abgeschaffte v1.3-Metrik und liefert seither nur NULL — angezeigt wird der seit Eval v4 aktive Fallback coverage_rate (claim-basierte Belegrate)."
  • Neue Row-Zelle via fmtCov(r.llm_cov): Formatierung über die bestehende _fmtDE-Funktion (Konsistenz mit den anderen Prozent-Spalten), Ampel-Färbung nach THRESH_COV (80/50, "hoeher ist besser" — invertiert ggü. fmtHall). NULL/leer rendert defensiv mit Tooltip statt 0 %.
  • Alle drei colspan="6"-Platzhalterzeilen (Loading, "keine Daten", "weitere anzeigen"-Button) auf colspan="7" nachgezogen.

Nur die Kalibrierungs-Tabellen-Region angefasst — KPI-Kachelleiste und Chart-/Scatter-Code (Bereiche der offenen PRs #274/#249) bleiben unberuehrt.

TDD

RED zuerst, 3 neue Tests in generative/tests/test_dashboard_quick_wins.py:

  • test_calibration_table_header_has_llm_coverage_column — Header-Text + Tooltip-Substrings (coverage_factual, coverage_rate, v1.3)
  • test_calibration_row_render_uses_llm_cov_with_fmtde — JS-Datenpfad (r.llm_cov, _fmtDE(, fmtCov)
  • test_calibration_table_colspan_matches_seven_columns — alle Platzhalterzeilen auf colspan="7", kein colspan="6" mehr

Alle 3 scheiterten auf dem unveraenderten HTML (bestaetigtes RED), danach GREEN nach der Implementierung.

Suite & Lint

  • pytest generative lib/decision_engine/tests shared/tests -q5876 passed, 3 skipped, 8 deselected
  • ruff check + ruff format --check auf der geaenderten Testdatei: sauber (HTML ist kein Python, nicht ruff-relevant)
  • Import-Herkunft im Worktree verifiziert (generative.eval_dashboard_server.__file__ zeigt auf den Worktree, keine Editable-Install-Kollision)

Sichtverifikation

  • DB-Kopie (.cache/atomic_analytics.dbC:\tmp\233-db.db), Server entkoppelt via Start-Process auf Port 8063 (ATOMIC_DB_PATH auf die Kopie, PYTHONPATH auf den Worktree) — Ports 8051/8062/8064 unberuehrt.
  • /data.json: n_eval=362, 339 Zeilen mit gesetztem llm_cov (deckt sich mit dem in fix(dashboard): Kalibrierungs-View faellt bei NULL coverage_factual auf coverage_rate zurueck (#233) #250 dokumentierten Wert).
  • Ausgeliefertes HTML von der laufenden Instanz per Invoke-WebRequest auf die neuen Marker geprueft: LLM-Coverage (2×), coverage_factual/coverage_rate (je 2×), fmtCov (2×), r.llm_cov (1×), colspan="7" (3×) — alle vorhanden.
  • Playwright-Browser-Launch scheiterte nach 2 Versuchen (RAM-Knappheit, wie erwartet) — manuelle Browser-Nachsicht empfohlen, um die Spalte visuell (hell/dunkel) zu bestaetigen.
  • Server-Prozess danach beendet (PID gemerkt, sauber gestoppt).

NUL-Byte

internal/dashboard/eval_dashboard.html enthaelt bewusst 1 NUL-Byte — vor und nach den Edits per Python-Byte-Check verifiziert (count(b'\x00') == 1), keine bash-grep/sed-Operationen auf der Datei.

Closes #233

@TillQuandel TillQuandel merged commit 119233c into master Jul 14, 2026
1 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

coverage_factual: abgeschaffte v1.3-Metrik — Kalibrierungs-View zeigt LLM-Coverage seit v4 leer (stiller NULL-Leser)

2 participants