Skip to content

Dashboard: Lesbarkeit bei echten Datenmengen (Horizontal-Bars, Top-5-Legende, Median-Linie, Tabellen-Limit) - #38

Merged
TillQuandel merged 1 commit into
masterfrom
fix/dashboard-readability
Jun 11, 2026
Merged

Dashboard: Lesbarkeit bei echten Datenmengen (Horizontal-Bars, Top-5-Legende, Median-Linie, Tabellen-Limit)#38
TillQuandel merged 1 commit into
masterfrom
fix/dashboard-readability

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Vier Nutzer-Befunde (Screenshots: überlappende 100-%-Labels, 30-Einträge-Legende, Spaghetti-Versions-Chart, 301-Zeilen-Tabelle):

  1. Akzeptanz je PDF → Horizontal-Bar (Spec-Chart-Typen-Matrix), Wert-Labels rechts, Höhe dynamisch, absteigend sortiert.
  2. Scatter-Legende → Top-5 PDFs nach Punktzahl farbig, Rest grau „Weitere (n PDFs)"; PDF-Name im Tooltip + Drawer.
  3. Akzeptanz über Versionen → Median-Linie über PDFs bei >3 PDFs (n je Version im Tooltip), Einzel-Linien bei aktivem PDF-Filter — schließt Issue-Dashboard: inhaltliche Follow-ups aus dem Visual-Polish-Review (2026-06-10) #36-Punkt 1.
  4. Kalibrierungs-Tabelle → Top 20 + „Alle anzeigen"-Toggle (Reset bei Filter-Aktionen, nicht beim Auto-Refresh).

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

…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
TillQuandel merged commit f315a50 into master Jun 11, 2026
2 checks passed
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
TillQuandel deleted the fix/dashboard-readability branch June 29, 2026 17:54
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>
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.

1 participant