Files
breakpilot-compliance/docs-src/development/dse_v1_validation.md
T
Benjamin_Boenisch 38a347a82a
CI / detect-changes (push) Successful in 7s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Successful in 9s
CI / validate-canonical-controls (push) Successful in 12s
CI / loc-budget (push) Successful in 24s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 3m11s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 24s
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
feat(platform): live-wire AGB v2 + DSE v3 + Architektur-Tab (#29)
AGB v2 (decision_method routing, 71%FP->~0) + DSE v3 (4-layer, recovered from container) + Architektur-Tab into /sdk/agent live path. Incl CI robustness (detect-changes.sh + PR-head checkout) + security (hardcoded Qdrant key removed, gitleaks allowlist).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-21 12:58:26 +00:00

8.5 KiB
Raw Blame History

DSE-Engine — Validierung & Versionierung DSE_v1

Status: Release-Candidate (qualitativ validiert, nicht „fertig") Datum: 2026-06-19 Modul: Datenschutzerklärung (doc_type = dse) Zweck dieses Dokuments: nachvollziehbar festhalten, wie die DSE-Engine gemessen wurde, welche Controls warum korrigiert wurden und welcher reproduzierbare Prozess daraus entstanden ist — als Referenz für Cookie-Richtlinie, Impressum, AGB, CRA, NIS2, KI-VO usw.

1. Kurzfazit

Die zentrale Aussage ist nicht „FP 11 % → 6 %", sondern: die False Positives wurden halbiert, ohne den Schutz vor echten Lücken zu verlieren (deterministisch nachgewiesen, 0 verschluckte Lücken).

KPI (vs Opus-GT, 5 Firmen, 432 anwendbare Controls) vorher DSE_v1
Falsche Findings (Engine FEHLT / GT ERFÜLLT) 51 (11 %) 26 (6 %)
Verpasste Lücken (Engine ERFÜLLT / GT FEHLT) 32 (7 %) ~31 (~7 %, stabil)
Recall 0,76 0,88
Precision 0,83 0,84

Ursache der falschen Findings war nicht ein zu schwaches LLM, sondern ~11 Controls, die mehr verlangten als das Gesetz. Die Korrektur der Regel verbessert OVH, Claude, Embeddings und menschliche Auditoren gleichzeitig — höchster ROI.

2. Testkorpus (Anti-Overfit)

Fünf repräsentative, real abgerufene Datenschutzerklärungen unterschiedlicher Größe/Branche:

Firma Charakter DSE-Größe
BMW Großkonzern, sehr umfangreich ~64 k Zeichen
Mercedes-Benz Großkonzern ~19 k
ELLI (VW) Tochter/Energie ~26 k
ETO B2B-Mittelstand ~26 k
SafetyKon kleiner B2B, dünne DSE ~5 k

Die dünne SafetyKon-DSE ist bewusst der Härtetest gegen zu lasche Kriterien.

3. Ground-Truth-Methode

  • Orakel: claude-opus-4-8 (stärkstes verfügbares Modell — NICHT Haiku, das auf 5-Firmen-DSE zu lasch/„N/A-blind" war). Pro (Firma × Control) ein Urteil ERFUELLT | FEHLT | NA.
  • Strenge juristische Leitplanken im Prompt (Speicherdauer: zirkuläre Formeln erfüllen nicht; berechtigtes Interesse eines Dritten ≠ eigenes; EU-Kommission-Erwähnung ≠ Angemessenheitsbeschluss).
  • 456 Urteile, davon 24 NA (nicht anwendbar) → 432 anwendbare als Messbasis.
  • Wichtige Einschränkung: das Opus-GT trägt auf einigen der korrigierten Controls dieselbe Überstrenge — siehe §6 (FN-Nachweis). Auf diesen Controls ist die Engine inzwischen näher am Gesetz als das GT.

4. Gemessene Engine-Architektur

Dreistufig, Verdikt je (Firma × Control):

  1. Keyword (deterministisch) → trifft zu ⇒ ERFÜLLT.
  2. BGE-M3-Embedding-Recall, Score < 0,50 ⇒ FEHLT (deterministisch, gecacht).
  3. LLM-Judge (OVH gpt-oss-120b) auf den Embedding-Passes (Score ≥ 0,50) — fängt die „semantisch nah, aber nicht erfüllt"-Über-Passes des Embeddings.

Robustheit (Pflicht): OVH liefert unter Concurrency teils leere Antworten. Eine leere LLM-Antwort darf niemals als FEHLT gewertet werden. DSE_v1 misst mit Retry-on-empty, Concurrency 3, max_tokens 600; bei dauerhaft leer → UNSICHER (= 4-Status INSUFFICIENT_EVIDENCE / Eskalation), nicht FEHLT.

5. Messverlauf (ehrlich, inkl. Sackgassen)

Stufe verpasste Lücken falsche Findings Anmerkung
nur Keyword + Embedding @0,58 32 % 3 % Embedding allein ungenügend (Über-Passes)
+ OVH-LLM (55k-Truncation) 5 % 19 % LLM löst „nichts fehlt"; FP scheinbar hoch
+ Volltext (kein 55k-Cut) 6 % 14 % Truncation hatte BMW-FP aufgebläht
+ Robust (Retry, kein Leer→FEHLT) 7 % 11 % Artefaktfreie Basis
+ Kriterien-Fix = DSE_v1 ~7 % 6 % siehe §7

Schlüssel-Befund (Produkt-relevant): ein großer Teil der ursprünglichen falschen Findings waren leere OVH-Antworten, die als FEHLT verbucht wurden — ein echter Pipeline-Bug, nicht ein Inhaltsproblem. Lehre für die Kaskaden-Verdrahtung: leere/Timeout-Antwort → Retry → INSUFFICIENT_EVIDENCE / Claude-Eskalation.

6. Die korrigierten Controls (juristischer Review)

12 systematische FP-Controls (firmenübergreifend wiederkehrend) wurden juristisch reviewt (Gesetz-Forderung vs. Control-Forderung) und in drei Klassen geteilt. 11 korrigiert, 1 (DATA-1611-A04, Klasse A) unangetastet. Volle Alt→Neu-Diffs: dse_criteria_changelog.json (Repo-Wurzel). Backup für Restore: dse_criteria_backup.json.

Klasse B — Control verlangte mehr als das Gesetz (7)

Control Rechtsnorm Kern-Korrektur
DATA-2260-A01 Art. 13(1)(c) primärer/einzelner Zweck" → Zweck(e) im Plural genügen
AUTH-3737-A06 Art. 13(1)(c)+(e) keine Zweck/Rechtsgrundlage-Matrix je Übermittlung
DATA-2992-A03 Art. 13(1)(e) Empfänger/Kategorien + Zweck; keine AV-Distinktion/Vertraulichkeit
DATA-1624-A03 Art. 13(1)(f) Garantie + Zugang via Link ODER Kontakt; keine Schutzwirkungs-Beschreibung
DATA-1619-A03 Art. 13(1)(c) Rechtsgrundlage je Zweck; Artikel-Zitat nicht zwingend
DATA-424-A09 Art. 20 Recht erwähnen genügt; Format (CSV/JSON) nicht in der DSE
GOV-3300-A06 Art. 20 wie A09 (Dedupe-Kandidat zu DATA-424-A09)

Klasse C — Control mehrdeutig / Pflichten vermischt (4)

Control Rechtsnorm Kern-Korrektur
AI-1560-A01 Art. 13(1)(c) vs (2)(a) Speicherdauer-Forderung entfernt (eigene Pflicht)
SEC-3444-A04 Art. 13(1)(c) Titel/Frage „beschränken" (Verhalten) → „offenlegen"
DATA-1624-A06 Art. 13(1)(f) Schutzwirkungs-Beschreibung raus; ⚠️ Near-Duplikat zu DATA-1624-A03
DATA-2812-A05 Art. 17 / §25 TTDSG Titel „implementieren" → „offenlegen"; Verweis auf Cookie-Einstellungen genügt

Klasse A — Control korrekt, LLM/Artefakt (1, nicht geändert)

DATA-1611-A04 (Art. 13(1)(c)): Kriterien rechtlich sauber; die FP waren OVH-Leerantworten.

7. FN-Sicherheitsnachweis (kein Aufweichen)

Lockerere Kriterien dürfen keine echten Lücken durchwinken. Nach dem Fix stieg FN scheinbar 32 → 36. Kausaltest (11 korrigierte Controls × 5 Firmen) + deterministische Textprüfung:

  • 0 echte verschluckte Lücken. Alle 5 „neuen FN" sind Fälle, in denen die Engine jetzt korrekt ist und das Opus-GT zu streng war — im DSE-Text belegt (bmw nennt „Art. 20 DSGVO", elli „EU-Standardvertragsklauseln … USA", mercedes Empfänger+Weitergabe, eto konkrete Zwecke).
  • 11 echte Lücken weiterhin gefangen (TN), v.a. SafetyKons dünne DSE → die Kriterien sind nicht zahnlos geworden.

⇒ Die wahre Engine-FN bleibt bei ~7 % (stabil); die scheinbaren +4 sind GT-Überstrenge.

8. Reproduzierbarer Kalibrierungsprozess (das eigentliche Ergebnis)

Auf jedes weitere Modul anwendbar (Cookie, Impressum, AGB, CRA, NIS2, KI-VO, DORA, MaschVO):

  1. Opus-GT je (Firma × Control) über 5 repräsentative Firmen bauen.
  2. Engine messen (Keyword → Embedding → robuster LLM-Judge) vs GT.
  3. FP clustern — wiederkehrende Controls statt Einzel-Findings (systematisch ≠ zufällig).
  4. Gesetz-vs-Control-Review der Top-Cluster → Klassen A (LLM-Fehler) / B (zu streng) / C (mehrdeutig).
  5. Kriterien korrigieren (B+C), versioniert, mit Rechtsnotiz im Changelog.
  6. Re-Messung — Pflicht: FP gesunken und FN stabil (FN-Kausaltest gegen Über-Lockerung).

9. Bekannte Grenzen / offene Punkte

  • OVH stochastisch (kein Seed): ±~4 Findings Lauf-zu-Lauf. Für harte Zahlen Mehrfachlauf/Mehrheit.
  • GT-Überstrenge auf einigen korrigierten Controls → „8 % FN" überzeichnet leicht (wahr ~7 %).
  • Dedupe offen (separater Catalog-Schritt, nicht gelöscht): DATA-1624-A06A03, DATA-424-A09GOV-3300.
  • Nur macmini-dev. Kriterien-Änderungen sind reversibel (Backup) und noch nicht auf Prod.
  • Restliche FP-Tail (~17 außerhalb der Top-12) bei 6 % belassen — weitere Optimierung schlechter ROI; operativer Hebel ist der Claude-Freigabe-Tier (Kaskade), nicht Regel-Tuning.

10. Artefakte & Reproduktion

  • GT-Verdikte: /tmp/gt_opus_dse.json (Container) · Kandidaten/Scores: /tmp/multi_company_gt.json
  • Changelog (Alt→Neu + Rechtsnotiz): dse_criteria_changelog.json · Restore: dse_criteria_backup.json
  • Skripte (MacBook /tmp, Ausführung via docker exec -i bp-compliance-backend python3 -): cc_gt_opus_dse.py (GT) · cc_engine_llm_dse3.py (robuste Messung) · cc_apply_criteria.py (Korrektur + Versionierung) · cc_check_fn.py (FN-Kausaltest) · cc_verify_fn.py (deterministische Textprüfung)