From 7a53f5bee1945ff0b439fdbfc6dac2b1d63601ed Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sun, 26 Apr 2026 00:00:59 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Pass=200b=20prompt=20v2=20=E2=80=94=20c?= =?UTF-8?q?ontainer=20detection,=20merge-key,=20evidence=20separation,=20a?= =?UTF-8?q?ctionable=20titles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- .../services/decomposition_pass.py | 60 +++++++++++++------ 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/control-pipeline/services/decomposition_pass.py b/control-pipeline/services/decomposition_pass.py index b8c74ac..e47cee7 100644 --- a/control-pipeline/services/decomposition_pass.py +++ b/control-pipeline/services/decomposition_pass.py @@ -394,18 +394,40 @@ ANALYSE-SCHRITTE (intern durchfuehren, NICHT im Output!): 4. Bestimme den Nachweis (welches Dokument/Artefakt belegt Compliance?) WICHTIGE REGELN: -- Ein Control = EINE pruefbare Handlung. Nicht mehrere Handlungen mischen. -- Dokumentation/Nachweis gehoert ins "evidence" Feld, NICHT als eigenes Control. - FALSCH: "SBOM fuehren" + "SBOM dokumentieren" = 2 Controls - RICHTIG: "SBOM fuehren" = 1 Control, Dokumentation = Evidence -- Zertifizierung, Abdeckungspruefung, Audit-Berichte = Evidence, KEIN eigenes Control. -- Security-Lifecycle sauber trennen: identifizieren, bewerten, beheben, ueberwachen - sind je EIGENE Controls (verschiedene Handlungen, verschiedene Verantwortliche). -- "Vertraulichkeit Unterauftragnehmer" + "Vertraulichkeit vertraglich sichern" = 1 Control - (die vertragliche Sicherung ist die Umsetzungsmassnahme, nicht ein separates Control). -- Der Titel muss die HANDLUNG enthalten, nicht nur den Gegenstand. - FALSCH: "Vertraulichkeit Mitarbeiter" - RICHTIG: "Mitarbeiter zur Vertraulichkeit verpflichten" + +1. ATOMARITAET: Ein Control = EINE pruefbare Handlung. Nicht mehrere mischen. + +2. EVIDENCE ≠ CONTROL: Dokumentation, Nachweis, Auditbericht, Zertifizierung, + Screenshot, Export = Evidence-Feld. KEIN eigenes Control daraus machen. + FALSCH: "SBOM fuehren" + "SBOM dokumentieren" = 2 Controls + RICHTIG: "SBOM fuehren" = 1 Control, Dokumentation im Evidence-Feld. + +3. CONTAINER ≠ ATOMAR: Abstrakte Oberbegriffe sind KEINE atomaren Controls. + FALSCH als atomares Control: "Sichere Sitzungsverwaltung", "Token-Schutz", + "Sorgfaltspflicht Drittkomponenten", "Umfassendes Risikomanagement". + Wenn die Pflicht ein Container ist, zerlege sie in die konkreten Massnahmen. + +4. LIFECYCLE TRENNEN: identifizieren, bewerten, beheben, ueberwachen + sind je EIGENE Controls (verschiedene Handlungen, verschiedene Verantwortliche). + +5. GLEICHER GEGENSTAND MERGEN: Gleicher Akteur + gleiche Handlung + gleicher + Gegenstand = 1 Control mit mehreren Requirements/Evidence. + FALSCH: "Unterauftragnehmer zur Vertraulichkeit verpflichten" + + "Vertraulichkeit vertraglich sichern" = 2 Controls + RICHTIG: 1 Control, vertragliche Sicherung = Requirement. + +6. TITEL = SUCHANFRAGE: Der Titel wird als Suchanfrage gegen Kundendokumente + und Quellcode verwendet. Er muss die HANDLUNG enthalten. + FALSCH: "Vertraulichkeit Mitarbeiter" + RICHTIG: "Mitarbeiter zur Vertraulichkeit und Geheimhaltung verpflichten" + +7. MERGE-KEY: Erzeuge im JSON-Output ein zusaetzliches Feld "merge_key" mit + dem Format: "action_type:normalized_object:control_phase" + Beispiele: + - "implement:api_rate_limiting:technical" + - "define:access_control_policy:governance" + - "monitor:third_party_vulnerabilities:operations" + - "test:authentication_mechanism:verification" Das Control muss UMSETZBAR sein — keine Gesetzesparaphrase. Antworte NUR als JSON. Keine Erklaerungen.""" @@ -2077,13 +2099,14 @@ Quellreferenz: {source_ref} Antworte als JSON: {{ - "title": "Kurzer Titel (max 80 Zeichen, deutsch)", + "title": "Kurzer Titel (max 80 Zeichen, deutsch, HANDLUNG enthalten)", "objective": "Was muss erreicht werden? (1-2 Sätze)", "requirements": ["Konkrete Anforderung 1", "Anforderung 2"], "test_procedure": ["Prüfschritt 1", "Prüfschritt 2"], - "evidence": ["Nachweis 1", "Nachweis 2"], + "evidence": ["Nachweis/Dokument/Artefakt 1", "Nachweis 2"], "severity": "critical|high|medium|low", - "category": "security|privacy|governance|operations|finance|reporting" + "category": "security|privacy|governance|operations|finance|reporting", + "merge_key": "action_type:normalized_object:control_phase" }}""" @@ -2168,13 +2191,14 @@ Antworte als JSON-Objekt. Fuer JEDE Pflicht ein Key (die Pflicht-ID): Jedes Control hat dieses Format: {{ - "title": "Kurzer Titel (max 80 Zeichen, deutsch)", + "title": "Kurzer Titel (max 80 Zeichen, deutsch, HANDLUNG enthalten)", "objective": "Was muss erreicht werden? (1-2 Sätze)", "requirements": ["Konkrete Anforderung 1", "Anforderung 2"], "test_procedure": ["Prüfschritt 1", "Prüfschritt 2"], - "evidence": ["Nachweis 1", "Nachweis 2"], + "evidence": ["Nachweis/Dokument/Artefakt 1", "Nachweis 2"], "severity": "critical|high|medium|low", - "category": "security|privacy|governance|operations|finance|reporting" + "category": "security|privacy|governance|operations|finance|reporting", + "merge_key": "action_type:normalized_object:control_phase" }}"""