This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/docs/intent/board-intent-run-metrics-baseline.md
pijukka fae170e9ad board-agent: nested child cards + opt-in run-metrics pilot
- board.html: a card whose parent_id resolves to an existing card is
  rendered nested inside that parent instead of as a detached top-level
  column card, and stays fully draggable there
  (docs/intent/board-nested-child-intents.md).
- metrics.py (new) + hooks in worker.py/completion_watcher.py: opt-in
  run_history logging gated by BOARD_METRICS_SLUGS, exposed as a compact
  per-card summary via trigger.py/board.html.
- metrics_baseline.py (new) + worker.run_baseline(): manual CLI to send
  an intent straight to a model with no board pipeline, no repo access,
  as the comparison point for the run-metrics pilot
  (docs/intent/board-intent-run-metrics-baseline.md).
- 16 new tests, 148/148 total passing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UeyiEf4XmoPgxkarAXamGe
2026-09-09 13:56:04 +02:00

126 lines
6.4 KiB
Markdown

# Intent: Metriken über wiederholte Läufe desselben Intents, verglichen mit direktem Single-Prompt an ein starkes Modell
## Umsetzungsstand
Umgesetzt: `metrics.py` (opt-in `run_history` je Karte, gated über
`BOARD_METRICS_SLUGS`), `metrics_baseline.py` (manuelles CLI-Pilot-Tool,
`worker.run_baseline()`), `merged_board()`s `metrics_summary`-Feld und
`board.html`s `appendMetricsBadge()`. Details, Feldnamen und exakte
Aufrufweise stehen in `README.md`s Abschnitt "Run-metrics pilot" -- diese
Karte beschreibt weiterhin nur Ziel und Scope-Grenzen, nicht die
Implementierung im Detail, um Dopplung zu vermeiden. Alle 16 neuen Tests
(`MetricsModuleTests`, `RunBaselineTests`, `CompletionWatcherMetricsTests`,
`MergedBoardMetricsSummaryTests`, `MetricsBoardFrontendTests`) plus alle
132 vorher bestehenden laufen grün (148/148,
`nix shell nixpkgs#python3 -c python3 -m unittest test_board_agent`).
Noch offen, bewusst nicht Teil dieser Umsetzung: tatsächliche
Token-/Kostenerfassung (kein Runtime liefert das aktuell zuverlässig genug,
siehe "Offene Risiken" unten -- das Feld existiert im Schema, bleibt aber
in der Praxis meist leer) und die eigentliche Pilot-Auswertung (welche 2-3
Intents, wie oft wiederholt) -- das ist eine Nutzungsentscheidung, kein
Code.
## Ausgangslage
`docs/research/intent-board-architektur-ux-evaluation.md` stellt fest,
dass für das gesamte Board keine belastbaren Aussagen zu Erfolgsquote,
Laufzeit, Nacharbeit oder Kosten existieren, und schlägt separat sowohl
einen kleinen Eval-Korpus (`agent-pipeline-eval-baseline`) als auch einen
eigenen Mess-/Datenschutz-Entscheid (`board-runtime-signal-measurement`)
als Folgeintents vor, ohne sie bereits anzulegen. Dieser Intent macht
daraus eine konkrete, klar abgegrenzte erste Version: nicht generische
Pipeline-Telemetrie, sondern eine gezielte Vergleichsmessung mit einer
expliziten Nullhypothese — dass ein einzelner Prompt an ein
leistungsfähiges Modell (ohne Board, ohne Rollen-Pipeline) für denselben
Intent mindestens ebenbürtig sein könnte.
## Ziel
Für einen ausgewählten Intent lässt sich wiederholt messen und
vergleichen:
1. **Wiederholte Board-Läufe desselben Intents** (gleicher Intent-Text,
mehrere Durchläufe, ggf. über unterschiedliche Runtime-/Modell-
Konfigurationen aus dem bestehenden Column-Config-Mechanismus,
`board-builder-column-config.md`).
2. **Ein direkter Single-Prompt-Baseline-Lauf**: derselbe Intent-Text,
einmal ohne Board/Pipeline direkt an ein festgelegtes starkes Modell
gesendet, dessen Ergebnis (Diff/Antwort) genauso erfasst wie ein
Board-Lauf.
Verglichen werden pro Lauf mindestens: Qualität (Reviewentscheidung bzw.
manuelle Einstufung beim Baseline-Lauf, da kein automatischer Reviewer),
Geschwindigkeit (Wall-Clock von Start bis Endzustand), Kosten (Token-
und/oder API-Kosten, soweit von der jeweiligen Runtime zuverlässig
gemeldet) und Effizienz (Kosten bzw. Zeit pro erreichtem Erfolg,
insbesondere über mehrere Wiederholungen desselben Intents hinweg zur
Streuung/Varianz).
## Umfang
- Neues, kleines, an den Intent-Slug gebundenes Log-Format (z. B.
`docs/metrics/<slug>-runs.jsonl` oder ein `state.json`-Overlay-Feld
`run_history`, Liste statt Einzelwert), das pro Lauf mindestens
erfasst: Zeitstempel Start/Ende, Runtime/Modell, Iterationslimit,
Endzustand/Reviewentscheidung, Commit-Hash bzw. Bericht, Token-/
Kostenwert falls verfügbar, sowie ein Feld `run_kind` ∈
{"board", "baseline_single_prompt"}.
- Ein separater, expliziter Weg, einen Baseline-Lauf für einen
bestehenden Intent-Slug anzulegen, ohne den normalen Board-Trigger zu
durchlaufen — z. B. ein schlankes Skript, das den Intent-Text nimmt,
ihn an ein festgelegtes Modell schickt und Antwort + Metadaten unter
demselben `run_history`-Schema ablegt. Kein neuer Board-Spaltentyp
dafür nötig.
- Minimale Board-Anzeige: pro Karte eine kompakte Zusammenfassung "N
Läufe, davon M Board / K Baseline, Erfolgsquote X%", keine vollständige
Analytics-UI.
- Auswahl eines kleinen, festen Vergleichs-Sets (2-3 reale, bereits
bekannte Intents unterschiedlicher Größe) als Pilot statt sofort alle
Intents zu instrumentieren.
## Ausgeschlossen
- Keine automatische, fortlaufende Telemetrie für jeden Board-Lauf ohne
gezielte Auswahl — reiner Opt-in-Pilot für die im Umfang genannten
Testfälle.
- Keine automatische Qualitätsbewertung/kein LLM-as-Judge für den
Baseline-Lauf — die Einstufung bleibt vorerst manuell, analog zum
bestehenden Review-Freitext.
- Kein Dashboard/keine Visualisierung über die im Umfang genannte
kompakte Zusammenfassung hinaus.
- Keine Änderung an bestehenden Job-/Review-Abläufen — dieser Intent
fügt nur zusätzliche Beobachtung hinzu, ändert kein Verhalten.
- Kein Entscheid über Aufbewahrung/Datenschutz für dauerhafte,
produktionsweite Telemetrie — das bleibt, wie im Research-Bericht
benannt, ein separater Entscheid vor einer Ausweitung über den Pilot
hinaus.
## Offene Risiken
- Nicht jede Runtime meldet Token-/Kostenwerte zuverlässig — das Feld
muss optional/nullable sein, nicht Voraussetzung für einen gültigen
Log-Eintrag.
- Ein einzelner Baseline-Lauf pro Intent hat keine statistische Aussage-
kraft; ohne mehrere Wiederholungen bleibt der Vergleich anekdotisch —
das Pilot-Set sollte deshalb mehrere Wiederholungen je Intent und
Lauf-Art einplanen, nicht nur je einen Lauf.
- Manuelle Qualitätseinstufung des Baseline-Laufs ist subjektiv und
nicht direkt vergleichbar mit der automatisierten Reviewentscheidung
eines Board-Laufs — im Bericht muss das als Limitation benannt werden,
nicht als gleichwertige Metrik verkauft werden.
- Kosten für zusätzliche Wiederholungsläufe (insbesondere mehrere
Board-Durchläufe desselben Intents) sind selbst ein Tokenverbrauch, der
gegen den Erkenntnisgewinn abzuwägen ist — Pilot bewusst klein halten.
## Erfolgskriterien
- Für mindestens einen realen Intent liegen sowohl mehrere Board-Läufe
als auch mindestens ein Single-Prompt-Baseline-Lauf im selben
Log-Schema vor.
- Die kompakte Board-Zusammenfassung zeigt Laufanzahl und Erfolgsquote
ohne manuelles Nachschlagen in `state.json`.
- Ein Mensch kann anhand der gesammelten Daten für den Pilot-Fall
begründet einschätzen, ob die Board-Pipeline gegenüber einem direkten
Prompt an ein starkes Modell einen Qualitäts-, Geschwindigkeits- oder
Kostenvorteil bringt — auch wenn das Ergebnis "kein klarer Vorteil"
ist.