6 files with hardcoded legal knowledge identified. Review deadline 2026-07-01. legal_basis_validator.py marked with warning log on every use. Instruction file for other session to execute migration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.3 KiB
Instruktion: Hartkodiertes Wissen → Control Library Migration
Branch: feat/zeroclaw-compliance-agent
Repo: /Users/benjaminadmin/Projekte/breakpilot-compliance/
Erstellt: 2026-04-29
Review-Deadline: 2026-07-01
Problem
Der Compliance Agent hat 6 Dateien mit hartkodiertem Rechtswissen in Python-Dicts.
Das Wissen veraltet und wird nicht von der Pipeline aktualisiert. Langfristig muss
alles aus der Control Library kommen (166k+ Controls in compliance.canonical_controls).
Inventar (alle im Backend: backend-compliance/compliance/services/)
| Datei | Hartkodiert | Zeilen | Prioritaet |
|---|---|---|---|
legal_basis_validator.py |
CORRECT_BASIS dict — 7 Lit-Zuordnungen (Art. 6 lit. a-f pro Zweck) |
~50 LOC | HOCH |
service_registry.py |
SERVICE_REGISTRY dict — 82 Services mit Legal Refs |
~500 LOC | MITTEL |
mandatory_content_checker.py |
MANDATORY_DSE_CONTENT (9 Felder) + MANDATORY_IMPRESSUM_CONTENT (5 Felder) |
~80 LOC | MITTEL |
relevance_filter.py |
CONTROL_RELEVANCE dict — 7 Controls mit Keyword-Listen |
~60 LOC | MITTEL |
consent-tester/services/script_analyzer.py |
SERVICE_PATTERNS — 19 Services (Duplikat von Registry) |
~70 LOC | NIEDRIG |
consent-tester/services/banner_detector.py |
CMP_SELECTORS — 10 CMPs |
PERMANENT (technisch) | — |
Migrationspfad pro Datei
Schritt 1: Controls in der Pipeline generieren
Fuer jedes Dict-Entry einen entsprechenden Control in der Pipeline generieren lassen.
Beispiel fuer legal_basis_validator.py:
-- Neuer Control in canonical_controls:
INSERT INTO compliance.canonical_controls (title, objective, requirements, scope_conditions, tags)
VALUES (
'Cookie-Tracking erfordert Einwilligung (lit. a)',
'Cookie-Tracking und Webanalyse duerfen nur mit ausdruecklicher Einwilligung (Art. 6 Abs. 1 lit. a DSGVO) erfolgen.',
'Rechtsgrundlage fuer Cookie-Tracking muss Art. 6(1)(a) sein. Art. 6(1)(f) (berechtigtes Interesse) ist nach EuGH C-673/17 (Planet49) nicht zulaessig.',
'{"applies_when": "cookie_tracking OR web_analytics"}',
ARRAY['legal_basis', 'lit_mapping', 'cookie', 'planet49']
);
Benoetigte Controls (aus legal_basis_validator.py CORRECT_BASIS):
cookie_tracking→ lit. a (Planet49)web_analytics→ lit. a (DSK Orientierungshilfe, §25 TDDDG)marketing_email→ lit. a (Art. 7 DSGVO, §7 UWG)remarketing→ lit. a (§25 TDDDG)credit_check→ lit. b/f + Art. 22 Pflichthinweissocial_media_embed→ lit. a (Fashion ID Urteil)session_recording→ lit. a (§25 TDDDG)
Benoetigte Controls (aus mandatory_content_checker.py):
- DSE muss Verantwortlichen nennen (Art. 13(1)(a))
- DSE muss DSB-Kontakt nennen (Art. 13(1)(b))
- DSE muss Zwecke nennen (Art. 13(1)(c))
- DSE muss Rechtsgrundlagen nennen (Art. 13(1)(c))
- DSE muss Speicherdauer nennen (Art. 13(2)(a))
- DSE muss Betroffenenrechte nennen (Art. 13(2)(b-d))
- DSE muss Beschwerderecht nennen (Art. 13(2)(d))
- DSE muss Drittlandtransfer nennen (Art. 13(1)(f))
- DSE muss automatisierte Entscheidungen nennen (Art. 13(2)(f))
Schritt 2: Agent-Code aendern — Control Library first, Dict as Fallback
# VORHER (hartkodiert):
CORRECT_BASIS = {"cookie_tracking": {"correct": "lit. a", ...}}
# NACHHER (Control Library first):
async def get_legal_basis_rule(purpose: str) -> dict | None:
controls = await query_controls(tags=["lit_mapping", purpose])
if controls:
return controls[0] # Control Library hat Vorrang
logger.warning("No control found for %s — using hardcoded fallback", purpose)
return CORRECT_BASIS.get(purpose) # Fallback
Schritt 3: Dicts entfernen
Wenn alle Controls in der Library sind und der Agent sie zuverlaessig findet:
- Dicts loeschen
- Warning-Logs entfernen
- Tests aktualisieren
Welche Datei NICHT migriert wird
banner_detector.py — die CMP-Selektoren sind technische CSS-Patterns, kein
Rechtswissen. Die bleiben hartkodiert und werden aktualisiert wenn CMPs ihre UI aendern.
Erkennungszeichen im Code
Alle betroffenen Dateien haben:
⚠️ TECHNISCHE SCHULDim DocstringReview-Datum: 2026-07-01im Headerlogger.warning("... HARDCODED rules ...")bei Nutzung
Memory-Datei
Details: /Users/benjaminadmin/.claude/projects/-Users-benjaminadmin-Projekte-breakpilot-lehrer/memory/hardcoded_knowledge_debt.md