fix(dashboard): total_tokens-KPI zaehlt nur DB-gejointe Laeufe (#198 P3, Option A)#226
Merged
Conversation
…#198 P3) Waisen-Traces (Trace-JSONL ohne pipeline_runs-Zeile, z.B. abgebrochene Laeufe) blaehten die Lifetime-Kennzahl "Gesamt-Tokens" gegenueber dem Versions-Chart auf (11,4M vs. 9,0M, +21%). Server setzt beim Join jetzt explizit tr["db_matched"], _calc_kpis summiert total_tokens nur noch darueber (Default True erhaelt den deprecated Standalone-Pfad ohne Server-Join). Hint-Text der Strip-Kachel benennt die neue Basis. Entscheidung Option A (Lifetime-Summe nur DB-gejoint) laut Issue #198.
…eviewer-Minors (#198 P3) Important-Fund aus dem #198-P3-Review: db_matched (DB-Mitgliedschaft) und der Versions-Chart-Filter (`if not ver: continue`) sind bewusst unterschiedliche Kriterien — Lifetime-KPI zaehlt DB-gejointe Laeufe auch ohne Versions- Attribution, der Versions-Chart nicht. Regressionstest fixiert dieses Verhalten, Kommentar am Join benennt die Divergenz explizit. Reviewer-Minors: Test fuer Traces ohne run_id-Key (db_matched=False), plus die zwei build_data-Join-Tests pruefen jetzt den tatsaechlichen db_matched- Wert statt nur die abgeleitete KPI-Summe. Kein Verhaltens-/Produktionscode-Aenderung ausser dem Kommentar.
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.
Setzt #198 P3 um (letzter offener Punkt; P1+P2 in PR #218). Closes #198.
Problem
Die Lifetime-KPI „Gesamt-Tokens" summierte ALLE Trace-JSONL-Dateien — auch 490 verwaiste Traces ohne pipeline_runs-DB-Zeile (+21,3 % vs. Versions-Chart). (Zahlen aus dem Issue-Snapshot 2026-07-11; heutige Rohdaten: 438 token-tragende Waisen-Traces, +28,4 % — die Vorher/Nachher-Tabelle unten ist dagegen exakt reproduziert, Kontrollrunden-Beleg.) Der Chart hatte den
if not ver: continue-Guard (_chart_tokens_by_version), die KPI nicht.Fix (Option A — Entscheidung des Maintainers)
tr["db_matched"] = True/False(Kriterium: run_id in pipeline_runs; DB-only-Runs True)._calc_kpissummierttotal_tokensnur übertr.get("db_matched", True)— Default True hält den deprecaten Legacy-Standalone-Pfad (einziger weiterer_calc_kpis-Aufrufer, per Grep verifiziert) unverändert.Bewusste Semantik-Entscheidung (Review-Fund, per Regressionstest fixiert): Eine DB-Zeile mit leerer
pipeline_versionzählt in der Lifetime-Summe (DB-Mitgliedschaft = Kriterium), während der Versions-Chart sie mangels Version ausschließt — Lifetime ist nicht „Summe der Versions-Buckets". In den echten Daten existiert der Fall aktuell nicht (Summen exakt deckungsgleich, s. u.); Kommentar an der Join-Stelle dokumentiert die Divergenz. Zweite latente Divergenzquelle gleicher Klasse (Kontrollrunden-Fund, Info): foss-/extractive-Versionen zählen in der Lifetime-Summe, der Versions-Chart schließt sie zusätzlich viais_foss_versionaus — aktuell folgenlos (foss-Läufe tragen 0 Token-Traces, DB-verifiziert).RED-Beweis (TDD)
3/5 neue Tests initial rot (Waisen-Trace wurde mitgezählt, db_matched-Marker fehlte); nach Fix 5/5 grün. Nachbesserung: +2 Tests (NULL-Version-Regressionstest, fehlender run_id-Key) + direkte
db_matched-Asserts in den build_data-Tests → 7/7.Zahlen (echte Daten, read-only)
Suite
pytest generative lib/decision_engine/tests shared/tests -q: 5773 passed, 3 skipped, 4 deselected; ruff format+check sauber.Playwright-Sichtverifikation (hell+dunkel)
Server aus Worktree auf Port 8062 (genau 1 Listener-PID), echte DB read-only. Screenshots:
C:/tmp/198-verify/198-strip-{light,dark}.png+198-strip-tokens-hint-{light,dark}.png— Tokens 8,56 M, Hint mit DB-Zuordnungs-Text.Reviews
Offener Entscheid für den Maintainer
total_dur_hhat denselben Waisen-Bug (31,2 h DB-gejoint vs. 40,1 h angezeigt, 22 % Differenz) — bewusst NICHT mitgefixt (Mandat nannte nur total_tokens). Empfehlung: gleiche Behandlung (3-Zeilen-Follow-up). Wird als separates Issue erfasst, falls kein Go für Direkt-Nachtrag kommt.Kontrollrunde (2026-07-12, zweite unabhängige Review-Ebene)
main()ruft_calc_kpis,_build_htmlbekommt das Ergebnis) — bewusst kein Extra-Commit dafür.