gate_v1_rollout/rollout_series_report/README.md

187 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Rollout-Serie und Stabilitätsanalyse für GateV1
## Purpose
Erstellung einer reproduzierbaren Rollout-Analyse aus CI-Artefakten zur Stabilisierung und Vorbereitung des GateV1Systems auf produktive Nutzung.
**Problemstellung:** GateV1 generiert CIFeedback, aber ohne belastbare Zeitreihen oder Kontrollwerte. Der Rollout erfordert quantifizierbare Stabilität, nicht nur Funktionsfähigkeit.
**Ziele:**
- Aggregierte Metriken über CIRuns erfassen
- UnknownRaten analysieren und klassifizieren
- Deterministische CSVBasis für RolloutEntscheidungen erzeugen
- WhitelistMechanismus für UnknownKlassen implementieren
## Kontext & Hintergrund
Sammlung von CIArtefakten im JSONFormat (gate_result.json) pro Run.
**Gruppierung:**
- policy_hash
- outcome
- unknown_rate
- top_reasons
**Trace-Metadaten / zusätzliche Tags:**
- policy_hash zur Versionsidentifikation
- unknown_rate als Qualitätskennzahl pro Run
**Domänenkontext:**
- CI/CDSystemintegration
- GatingMechanismen für SoftwareDeployments
**Outlier-Definition:**
- Methode: Identifikation wiederkehrender UnknownKlassen
- Beschreibung: Spitzenwerte (Spikes) in UnknownRaten werden nach TopReason gruppiert und korreliert mit FailSignalen überprüft.
- Metrik: unknown_rate
**Motivation:**
- Übergang von subjektivem CIMonitoring zu messbarer RolloutKontrolle
- Reduktion von FalsePositives durch UnknownKlassifikation
- Erhöhung der PolicyStabilität durch deterministische Aggregation
## Methode / Spezifikation
**Übersicht:**
- Script rollup_rollout.py verarbeitet gate_result.jsonDateien zu rollout_series.csv.
- Jeder Datensatz repräsentiert einen CIRun mit PolicyVersion und Ergebnissen.
- UnknownKlassen werden durch zusätzlichen WhitelistMechanismus getrennt beobachtet.
**Algorithmen / Verfahren:**
- Einlesen aller gate_result.json aus definiertem ArtefaktVerzeichnis
- Extraktion der Felder policy_hash, outcome, unknown_rate, top_reasons
- Deterministisches Aggregieren zu rollout_series.csv
- Optionales Mapping von Unknowns gegen unknown_whitelist.json
### Bootstrap-Übersicht
Kein numerisches Resampling; Serie dient als deterministische Beobachtung über Läufe.
**Zielgrößen:**
- unknown_rate_min
- unknown_rate_median
- unknown_rate_max
- Häufigkeiten von UnknownKlassen
### Abgeleitete Effektgrößen
**Risk Difference (Differenz der Raten):**
- Definition: Vergleich der UnknownRaten zwischen Whitelist und NonWhitelistKlassen.
- Bootstrap: Keine BootstrapAnwendung; feste Häufigkeitszählung.
**Risk Ratio:**
- Definition: Optionaler Indikator bei Übergang zu WARNPhase zur Beobachtung von SignalvsUnknownVerhalten.
- Bootstrap: Nicht implementiert.
## Input / Output
### Input-Anforderungen
**Hardware:**
**Software:**
- Python ≥ 3.9
- JSONfähiges Dateisystem
- Zugriff auf CIArtefakte
**Konfiguration:**
- Path zur Sammlung der gate_result.jsonDateien
- optional: unknown_whitelist.json im RootVerzeichnis
### Erwartete Rohdaten
**Felder pro Run:**
- policy_hash
- outcome
- unknown_rate
- top_reasons
**Formatbeispiele:**
- { "policy_hash": "a6f53e", "outcome": "COMMENT", "unknown_rate": 0.08, "top_reasons": ["flaky_test"] }
**Trace-Daten:**
- Format: CSV-Ausgabe rollout_series.csv
- Hinweis: Alle Einträge deterministisch sortiert nach RunID oder Timestamp
### Analyse-Ausgaben
**Pro Gruppe / pro Governor:**
- unknown_rate_min
- unknown_rate_median
- unknown_rate_max
- class_frequency_table
**Vergleichsausgaben:**
- Trace-Muster: Identifikation wiederkehrender UnknownMuster je policy_hash
## Workflow / Nutzung
**Analyse-Workflow:**
- CIRuns durchführen und gate_result.json erzeugen
- Script rollup_rollout.py ausführen
- Output in rollout_series.csv prüfen
- Optional: unknown_whitelist.json ergänzen und erneut aggregieren
- Statistische Metriken (min/median/max) in rollout_series_v1.md dokumentieren
### Trace-Template-Anforderungen
**Ziel:** Einheitliche Sammlung von GateErgebnissen über viele Runs zur Aufdeckung systematischer Muster.
**Erforderliche Tags & Metadaten:**
- policy_hash
- unknown_rate
- top_reasons
**trace-cmd-Setup:**
- CI muss Artefakte mit gate_result.json generieren
- rollup_rollout.py benötigt Pfadvariable CI_ARTIFACT_PATH
**Run-Design für Contributors:**
- Mindestens 40 Runs zur Ableitung stabiler Schwellenwerte sammeln
## Interpretation & erwartete Ergebnisse
**Kernbefunde:**
- UnknownSpitzen korrelieren überwiegend mit wiederkehrenden spezifischen TopReasons.
- Echte FAILSignale treten unabhängig von diesen UnknownMustern auf.
- UnknownKlasse kann strukturiert reduziert werden.
**Implikationen für Experimente:**
- WhitelistDefinition dient als Instrument zur kontrollierten Reduktion von PseudoAnomalien.
- GateKommentare werden kompakter und klarer, was Akzeptanz im CIProzess erhöht.
**Planungsziel:**
- Ziel: Beginn der WARNPhase mit definierten Schwellen für UnknownRate und OutcomeMapping.
- Vorgehen:
- RolloutSerie bis N≈40 erweitern
- Medianbasierten Threshold bestimmen
- FalsePositiveRate vor PhaseWechsel bewerten
## Limitationen & Fallstricke
**Datenbezogene Limitationen:**
- Ungleichmäßige RunVerteilung kann Median verzerren
- Fehlende oder fehlerhafte JSONFelder führen zu unvollständiger CSV
**Kausalität & Generalisierbarkeit:**
- Korrelation zwischen UnknownRate und FailSignalen ist nicht notwendigerweise kausal
**Praktische Fallstricke:**
- WhitelistPflege erfordert Disziplin und regelmäßige Revision
- Fehlende Konsistenz in policy_hashVersionierung erschwert Langzeitvergleiche
## Nächste Schritte & Erweiterungen
**Geplante Experimente:**
- RolloutSerie mit ≥40 Runs erweitern
- ThresholdTuning für WARNSchwelle testen
**Analyseziele:**
- Quantitative Bestimmung der FalsePositiveReduktion
- Messung der UnknownRatenstabilität über PolicyVersionen hinweg
**Regression & Modellierung:**
- Optionale Risikomodellierung Unknown_vs_FailRatio
**Community-Beiträge:**
- Struktur und CSVFormat für andere GateRollouts freigeben