Dashboard: Lesbarkeit bei echten Datenmengen (Horizontal-Bars, Top-5-Legende, Median-Linie, Tabellen-Limit) - #38
Merged
Conversation
…Fixes Nutzer-Befund: Charts/Listen skalieren nicht mit 13+ PDFs, 59 Versionen, 301 Tabellenzeilen. 1. Akzeptanz-Chart vertikal -> horizontal (Spec-Chart-Typen-Matrix: Raten pro Kategorie horizontal): Wert-Labels rechts am Balken statt ueberlappender 100%-Labels oben, Hoehe waechst mit PDF-Anzahl, absteigend sortiert; Hoehen-Reset im Leer-Zweig. 2. Scatter: bei >6 PDFs Top-5 nach Punktzahl farbig + Rest grau "Weitere (n PDFs)" — 6 Farben fuer 30 Kategorien waren Kollisions- Falschinformation; Legende aus den tatsaechlichen Datasets, PDF-Name zusaetzlich im Tooltip. 3. Akzeptanz ueber Versionen: bei >3 PDFs eine Median-Linie ueber PDFs (n PDFs je Version im Tooltip) statt Spaghetti; Einzel-Linien sobald PDF-Filter aktiv. Issue #36 Punkt 1 damit umgesetzt. 4. Kalibrierungs-Tabelle: Top 20 Default + "Alle anzeigen"-Toggle; Toggle reset bei Filter-Aktionen, NICHT beim 15s-Refresh-Render. Codex-Review: 3 von 5 Befunden umgesetzt (Toggle-Reset, Hoehen-Reset, null-Guard rawPairs); 2 widerlegt (scat.pdfs enthaelt nur PDFs mit Punkten; NaN kann JSON.parse nicht passieren). Suite 451 passed. Browser-verifiziert: indexAxis y + 388px, 1 Median- Linie / Einzel-Linie bei Filter, 6 Datasets + 7 Legenden-Eintraege, Tabelle 21 <-> 302 Zeilen, Konsole sauber.
TillQuandel
added a commit
that referenced
this pull request
Jun 25, 2026
…ennung) (#59) * fix(dashboard): #36 P2/P4 — KPI-Delta vs. Vorversion + Scaling-Recency-Dimmen Live-Pfad ist internal/dashboard/eval_dashboard.html (SPA via /data.json), NICHT der deprecatete Legacy-Pfad eval_dashboard.py:_build_html. P4 — KPI-Delta neueste-vs-Vorversion mit N-Guard (statt neueste-vs-erste): - version_delta(kpi_trend, metric) pure Funktion (TDD), reliable nur wenn beide Versionen n>=20 (Apophenie-Schutz) - Server: kpi_trend["deltas"] pro KPI; Template-JS nutzt es, ohne reliable kein Besser/Schlechter-Farbcode (neutral + "(n<20)") P2 — Scaling-Chart (ch3) dimmt alte Versions-Aeren: - mark_scaling_recency(points, keep=10) pure Funktion (TDD), recent-Flag - _chart_scaling haengt es an; ch3-JS dimmt recent===false (fail-open) P1 (#36 Punkt 1, Median-Linie) war im Live-Pfad bereits durch PR #38 erledigt — der frueher vermutete Regressionsverdacht war ein Blick auf den Legacy-Pfad. Codex-Review: 0 HIGH/MED, 1 LOW (cost-Delta-Anzeige toFixed(1), vorbestehend). Suite 4608 passed. Server-/data.json-End-to-End + JS-Syntax verifiziert. Bekannter offener Punkt: visuelle Firefox-Augenschein-Pruefung. * fix(dashboard): #36 Live-Pfad-UX — Sortierung, foss-Trennung, %-Deckel, Token-pro-Version Sechs aus dem Firefox-Augenschein gemeldete Punkte im Live-Render-Pfad internal/dashboard/eval_dashboard.html + build_data: A) Versions-Dropdown: neueste Version oben (reverse), foss-frei. B) Eval-Version-Filter komplett entfernt (UI + URL-State + Sidebar-Pill); Server nutzt default = neueste eval_version. C) KPI-Sparkline-X-Achse: nur erste+letzte Version statt ~50 ueberlappende Labels. D) foss/generative-Trennung: is_foss_version() (TDD); im ungefilterten Default-View foss aus all_log_runs + quality_rows + token_runs ausgeschlossen, Dropdown immer foss-frei. Ueber Modell-/Versions-Filter bleibt foss sichtbar. E) Sparkline-Y-Achse bei %-Metriken auf 100 gedeckelt (keine 120%-Achse mehr). F) Token/Duration-Charts pro Pipeline-Version aggregiert (Summe/Median) statt chronologisch pro Run — _chart_tokens_by_version (TDD), foss-frei. Cross-Model-Review (Codex + Qwen): 0 HIGH/MED nach Fixes. Codex MED gefixt (eval_version-URL-State, token_runs-foss-Ausschluss, foss--Praefix); Qwen LOW gefixt (versions[n-1]-Guard, duration_min is not None). Suite 4613 passed, +5 Tests (16 in test_dashboard_followups.py). * fix(dashboard): Cross-Model-Review-Funde (#59) — ins-cost-Label + Null-Delta neutral Codex-Cross-Review auf #59: - ins-cost-Insight zeigte "N Runs ... Median-Laufzeit pro Run", aber d.tokens ist seit _chart_tokens_by_version pro VERSION aggregiert → Label auf Versionen/pro Version korrigiert (Z1751-58). Sonst still falsche Stat-Karte. - Null-Delta (0.0) bekam pos/neg-Farbklasse → jetzt neutral (Z1138). Reine Client-JS (kein JS-Test-Harness im Repo) — durch Code-Lesung verifiziert. Offen (braucht Konventions-Input): is_foss_version matcht nur "foss-", Server-Z73 nutzt "extractive-" → foss-Trennung evtl. wirkungslos; + foss-Drop im Token-Chart bei explizitem Filter. Beide an die Prefix-Konvention gekoppelt, separat zu klaeren. * fix(dashboard): is_foss_version matcht extractive- (realer Prefix) — Trennung war No-op Cross-Model-Review (Codex) HIGH: die nicht-generative Pipeline taggt Runs mit "extractive-" (extractive/orchestrator.py: EXTRACTIVE_VERSION="extractive-v0.2.0"), aber is_foss_version prüfte nur "foss-" (taggt nirgends real) → die ganze #36-foss- Trennung filterte NICHTS (No-op). Fix: startswith(("extractive-","foss-")). +Test. --------- Co-authored-by: TillQuandel <tillq@live.de>
TillQuandel
added a commit
that referenced
this pull request
Jul 6, 2026
#36) (#139) Ergaenzt die Uebersicht-Insight-Zeile (ins-overview) um den fehlenden vierten Punkt aus Issue #36: "vs. <Vorversion>: X % (n=Y)" mit N-Guard (keine Besser/Schlechter-Wertung bei n<20 in einer der Versionen). Nutzt ausschliesslich bereits vorhandene, per TDD getestete Server-Daten (version_delta() + kpi_trend["deltas"]/["n"] aus generative/eval_dashboard.py bzw. eval_dashboard_server.py, #36 P4 / PR #59) -- keine neue Python-Logik, reines JS-Wiring. Die anderen drei #36-Punkte waren bereits durch fruehere PRs erledigt und werden hier nur frisch verifiziert (echte Daten, Server auf Port 8060): - ch4-Median-Default + Per-PDF-Linien bei aktivem PDF-Filter (PR #38) - Scaling-Trade-off-Chart dimmt alte Versions-Aeren (mark_scaling_recency, PR #59 P2) - Kalibrierungs-Tabelle nach LLM-Fehlerquote sortiert + "Als Naechstes labeln"-Badge (PR #59) Suite: 1350 passed, 2 skipped, 4 deselected (unveraendert). ruff format --check sauber (kein .py geaendert). Co-authored-by: TillQuandel <tillq@live.de>
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.
Vier Nutzer-Befunde (Screenshots: überlappende 100-%-Labels, 30-Einträge-Legende, Spaghetti-Versions-Chart, 301-Zeilen-Tabelle):
Codex-Review: 3/5 Befunde umgesetzt, 2 mit Begründung widerlegt. Suite 451 passed, Browser-verifiziert (Chromium; frühere FF-Verifikation deckt die verwendeten Features ab).
🤖 Generated with Claude Code