fix(dashboard): Evaluierte-Notes-Quote serverseitig auf kpi_version-Basis — nie mehr >100 % (#224)#230
Merged
Merged
Conversation
…Basis — nie mehr >100 % (#224) Zaehler (n_notes aus note_evals) und Nenner der '% der Notes'-Anzeige stammten aus verschiedenen Versions-/Filterkontexten: der Client rechnete 100*n_notes/total_generated, wobei total_generated ueber ALLE Versionen poolt. Bei Versions-Filter auf alte Versionen kollabierte der Nenner unter den Zaehler (10 Eval-Notes / 3 generierte -> '333,3 % der Notes'). - _calc_kpis: neues Feld notes_eval_pct (0-100 oder None) + Begleitfeld generated_kpi_ver; Nenner = n_total-Summe der all_log_runs exakt der kpi_version (derselbe Anker wie latest_qrows). Guard: Nenner 0 oder Zaehler > Nenner (Datenluecke) -> None. - Client: tgt nutzt kpis.notes_eval_pct statt eigener Rechnung; None -> '–'. tgtHint beschreibt die gemeinsame Versions-/Filterbasis und die '–'-Faelle. - total_generated bleibt unveraendert (Lifetime-Semantik, Strip 'Gesamt'). Tests: Issue-Repro (10/3 -> None), gesunder Fall (5/20 -> 25.0), Version ohne Laeufe (-> None), ungefiltert kpi_version-Basis statt Alle-Versionen- Mischung (40.0 statt 100*4/110).
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.
Behebt #224. Closes #224.
Problem
Die Kachel „Evaluierte Notes" zeigte bei Pipeline-Versions-Filter „333,3 % der Notes" (Beleg: Playwright-Sweep 2026-07-12): Der Client rechnete
100*n_notes/total_generated— Zähler (distinct evaluierte Notes der KPI-Version, note_evals-DB, früh gefiltert) und Nenner (generierte Notes ALLER Versionen aus Logs/DB-Fallback, spät gefiltert, andere Versions-Normalisierung) stammten aus verschiedenen Kontexten. Der alte tgtHint dokumentierte die Mischung sogar selbst.Fix
notes_eval_pct(+ Begleitfeldgenerated_kpi_ver) in_calc_kpis. Nenner = generierte Notes GENAU derkpi_version(identischer Anker wie der Zähler, kein Versions-Drift möglich) aus den bereits gefilterten Lauf-Zeilen — gleiche Basis auch im ungefilterten Zustand (behebt die dokumentierte Mischung gleich mit).null→ Kachel zeigt „–". Guard auf rohen Integer-Zählern (nicht dem gerundeten Prozentwert); Division nur im True-Zweig — strukturell nie >100 % serialisierbar, kein ZeroDivision möglich._fmtDE(kpis.notes_eval_pct));total_generatedbleibt für seine Lifetime-Konsumenten (Strip „Notes generiert", Akzeptanz-%) unangetastet. tgtHint beschreibt die neue gemeinsame Basis + „–"-Fälle.RED-Beweis (TDD)
4/4 neue Tests initial rot (alter Zustand: Client-Formel, kein Server-Feld): Repro 10-vs-3 → >100 %; ungefiltert nutzte Alle-Versionen-Nenner. Nach Fix: Repro → null; 5/20 → 25,0; Nenner 0 → null; ungefiltert 4/10 der KPI-Version → 40,0 (nicht 100*4/110).
Suite
5770 passed, 3 skipped, 4 deselected; ruff format+check sauber.
Playwright-Sichtverifikation (hell+dunkel)
Server aus Worktree auf Port 8063 (genau 1 Listener-PID), echte DB read-only: Versions-Filter v0.3.59 — vorher 333,3 % → jetzt „–"; ungefiltert 40 Notes → 62,5 %. Screenshots:
C:/tmp/224-verify/*.png.Reviews
generated_kpi_verderzeit redundant zukpi_version.r["n_total"]-Direktzugriff als KeyError-Risiko — die neue Zeile folgt exakt dem Muster der vorbestehenden Nachbarn auf DERSELBEN Datenquelle (accept_generatedZ. 546,total_generatedZ. 562); eine Zeile ohnen_totalwürde heute schon an Z. 562 bei jedem Load crashen. Kein neues Risiko.Umgebungs-Nebenfund (kein Code)
Playwright-MCP-Firefox-Profil war korrupt (Ghost-Prozesse); Profil gesichert als
mcp-firefox-7d6a92c-bak-224, danach sauber. Friction-Log-Kandidat.Kontrollrunde (2026-07-12, zweite unabhängige Review-Ebene)
ver="unknown", DB-Fallback überspringt versionslose Runs). Nebenbefund ohne PR-Bezug: 3 Collection-Errors bei Root-Sammlung vonlib/decision_engine/tests(Package-Namen-Kollisiontests) — vorbestehend, kanonischer Suite-Aufruf nicht betroffen.