fix(dashboard): LLM-Coverage-Spalte in Kalibrierungs-Tabelle rendern (#233)#276
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Befund
PR #250 hat die Datenschicht repariert:
_read_calibration_data()(generative/eval_dashboard_server.py) liefertllm_covjetzt fuer 339/362 Zeilen (Fallbackcoverage_factual→coverage_rate). Im Review von #250 fiel aber auf: das Frontend rendert keine LLM-Coverage-Spalte —llm_covkam ininternal/dashboard/eval_dashboard.htmlnirgends 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):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 Fallbackcoverage_rate(claim-basierte Belegrate)."fmtCov(r.llm_cov): Formatierung über die bestehende_fmtDE-Funktion (Konsistenz mit den anderen Prozent-Spalten), Ampel-Färbung nachTHRESH_COV(80/50, "hoeher ist besser" — invertiert ggü.fmtHall). NULL/leer rendert defensiv–mit Tooltip statt 0 %.colspan="6"-Platzhalterzeilen (Loading, "keine Daten", "weitere anzeigen"-Button) aufcolspan="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 aufcolspan="7", keincolspan="6"mehrAlle 3 scheiterten auf dem unveraenderten HTML (bestaetigtes RED), danach GREEN nach der Implementierung.
Suite & Lint
pytest generative lib/decision_engine/tests shared/tests -q→ 5876 passed, 3 skipped, 8 deselectedruff check+ruff format --checkauf der geaenderten Testdatei: sauber (HTML ist kein Python, nicht ruff-relevant)generative.eval_dashboard_server.__file__zeigt auf den Worktree, keine Editable-Install-Kollision)Sichtverifikation
.cache/atomic_analytics.db→C:\tmp\233-db.db), Server entkoppelt viaStart-Processauf Port 8063 (ATOMIC_DB_PATHauf die Kopie, PYTHONPATH auf den Worktree) — Ports 8051/8062/8064 unberuehrt./data.json:n_eval=362,339Zeilen mit gesetztemllm_cov(deckt sich mit dem in fix(dashboard): Kalibrierungs-View faellt bei NULL coverage_factual auf coverage_rate zurueck (#233) #250 dokumentierten Wert).Invoke-WebRequestauf die neuen Marker geprueft:LLM-Coverage(2×),coverage_factual/coverage_rate(je 2×),fmtCov(2×),r.llm_cov(1×),colspan="7"(3×) — alle vorhanden.NUL-Byte
internal/dashboard/eval_dashboard.htmlenthaelt 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