- Complete rewrite of control-generator-pipeline.md covering all 6 phases: RAG Ingestion, Control Generation, Pass 0a, Pass 0b, Dedup, Dependencies - New: dependency-engine.md with full documentation of 5 dependency types, condition language, evaluation algorithm, auto-generation, domain packs - Updated mkdocs.yml navigation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6.7 KiB
Control Dependency Engine
Generische Engine zur Modellierung und Auswertung von Abhaengigkeiten zwischen Compliance Controls. Stellt sicher, dass Controls nicht isoliert bewertet werden, sondern im Kontext ihrer logischen Beziehungen.
Datei: control-pipeline/services/dependency_engine.py
Generator: control-pipeline/services/dependency_generator.py
Domain Packs: control-pipeline/data/domain_packs/
API: /v1/dependencies/
Motivation
Ohne Dependency-Logik:
- System fordert Schulung obwohl Vertrag vorhanden
- Kunde verliert Vertrauen
- Falsche Findings, unnoetige Massnahmen
Mit Dependency-Logik:
- "Control B wurde nicht geprueft, weil Control A bestanden hat"
- "Control C ist fehlgeschlagen, aber durch Control E kompensiert"
- Korrekte Audit-Ergebnisse, weniger False Positives
5 Dependency-Typen (v1)
flowchart LR
subgraph Stark
A[supersedes Prio=10]
B[scope_exclusion Prio=20]
end
subgraph Mittel
C[prerequisite Prio=50]
D[conditional_requirement Prio=70]
end
subgraph Schwach
E[compensating_control Prio=80]
end
| Typ | Prioritaet | Bedeutung | Beispiel |
|---|---|---|---|
supersedes |
10 | A macht B ueberfluessig | GHV-Klausel → Schulung |
scope_exclusion |
20 | A schliesst B aus | Kein KI → KI-Controls |
prerequisite |
50 | A muss vor B existieren | Policy definieren → implementieren |
conditional_requirement |
70 | B nur unter Bedingung | Enhanced Logging nur fuer Grosse |
compensating_control |
80 | A kompensiert B-Failure | ISO-Cert → Einzelcontrols |
Condition Language
Jede Dependency hat eine condition (JSONB) die gegen einen Kontext ausgewertet wird:
Einfache Bedingung
{"field": "source.status", "op": "==", "value": "pass"}
Zusammengesetzte Bedingung
{
"operator": "AND",
"clauses": [
{"field": "source.status", "op": "==", "value": "pass"},
{"field": "context.company_size", "op": "in", "value": ["large", "enterprise"]}
]
}
Negation
{
"operator": "NOT",
"clause": {"field": "context.scope_signals", "op": "contains", "value": "uses_ai"}
}
Verfuegbare Felder
| Feld | Beschreibung |
|---|---|
source.status |
Status des Quell-Controls |
target.status |
Status des Ziel-Controls |
context.industry |
Branche des Unternehmens |
context.company_size |
Unternehmensgroesse |
context.scope_signals |
Scope-Signale (Liste) |
Operatoren
==, !=, in, not_in, >, <, >=, <=, contains, AND, OR, NOT
Evaluation-Algorithmus
flowchart TD
A[Alle Dependencies laden] --> B[Zyklen erkennen DFS]
B --> C{Zyklen?}
C -->|Ja| D[Betroffene Controls = review_required]
C -->|Nein| E[Topologisch sortieren]
E --> F[Fuer jedes Control:]
F --> G[Conditions pruefen]
G --> H[Matching Effects sammeln]
H --> I[Hoechste Prioritaet gewinnt]
I --> J[Status setzen + Trace schreiben]
Priority-basierte Konfliktloesung
Wenn mehrere Dependencies auf dasselbe Control wirken, gewinnt die mit der niedrigsten Prioritaetsnummer:
scope_exclusion(Prio 20) schlaegtcompensating_control(Prio 80)supersedes(Prio 10) schlaegt alles
Cycle Detection
Zyklen (A → B → A) werden via DFS erkannt. Betroffene Controls erhalten review_required mit Confidence 0.5.
Automatische Generierung
1. Ontology-basiert
Controls mit gleichem normalized_object und verschiedenen Lifecycle-Phasen:
define:access_policy (Phase 2)
→ prerequisite fuer →
implement:access_policy (Phase 4)
→ prerequisite fuer →
test:access_policy (Phase 8)
2. Pattern-basiert
| Regel | Source | Target | Dependency |
|---|---|---|---|
| define_before_implement | define | implement | prerequisite |
| implement_before_monitor | implement/configure | monitor/test | prerequisite |
| define_before_enforce | define | enforce | prerequisite |
| train_before_review | train | review/assess | prerequisite |
3. Domain Packs (YAML)
Regulierungsspezifische Regeln in YAML-Dateien:
DSGVO (gdpr.yaml):
- Verarbeitungsverzeichnis → DSFA (prerequisite)
- Rechtsgrundlage → Datenverarbeitung (prerequisite)
Security (security.yaml):
- MFA → Passwortkomplexitaet (compensating_control)
- ISO-Cert → Einzelcontrols (compensating_control)
AI Act (ai_act.yaml):
- Risikoklassifizierung → High-Risk-Anforderungen (prerequisite)
- FRIA → KI-Einsatz (prerequisite)
CRA (cra.yaml):
- SBOM → Vulnerability Monitoring (prerequisite)
- CE-Zertifizierung → Einzelnachweise (compensating_control)
Arbeitsrecht (labor_contracts.yaml):
- GHV-Klausel → Schulung (supersedes)
- Erstschulung → Nachschulung (prerequisite)
API Endpoints
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/v1/dependencies/ |
Dependencies auflisten (filterbar) |
POST |
/v1/dependencies/ |
Dependency manuell erstellen |
DELETE |
/v1/dependencies/{id} |
Dependency deaktivieren |
POST |
/v1/dependencies/generate |
Auto-Generierung (dry_run default) |
POST |
/v1/dependencies/evaluate |
Controls evaluieren |
GET |
/v1/dependencies/evaluate/{run_id} |
Ergebnisse abrufen |
POST |
/v1/dependencies/validate |
Zyklen pruefen |
GET |
/v1/dependencies/graph |
Graph (Nodes + Edges) |
DB-Schema
control_dependencies
| Spalte | Typ | Beschreibung |
|---|---|---|
id |
UUID | Primaerschluessel |
source_control_id |
UUID FK | Quell-Control |
target_control_id |
UUID FK | Ziel-Control (wird beeinflusst) |
dependency_type |
VARCHAR(30) | Typ (5 Werte) |
condition |
JSONB | Generische Bedingung |
effect |
JSONB | Effekt bei Bedingung=true |
priority |
INT | Niedrig = hohe Prioritaet |
generation_method |
VARCHAR(30) | manual / ontology / pattern / domain_pack |
is_active |
BOOLEAN | Soft-Delete |
control_evaluation_results
| Spalte | Typ | Beschreibung |
|---|---|---|
control_id |
UUID FK | Ausgewertetes Control |
evaluation_run_id |
UUID | Gruppiert einen Lauf |
raw_status |
VARCHAR(30) | Status vor Dependencies |
resolved_status |
VARCHAR(30) | Status nach Dependencies |
dependency_resolution |
JSONB | Vollstaendiger Trace |
confidence |
FLOAT | 0.0-1.0 |
Tests
| Testdatei | Tests | Beschreibung |
|---|---|---|
test_dependency_engine.py |
39 | Condition Evaluator, Effect Applier, Cycle Detection, Topological Sort, GHV-Szenario |
test_dependency_generator.py |
14 | Ontology, Pattern, Domain Pack Generation |