feat: Pass 0b prompt v3 — compound action ban, evidence-of-action rule, pflicht-vs-prozess merge
Fixes from v2 evaluation (7.9/10 avg, 28 controls): 1. COMPOUND BAN: "durchführen UND Maßnahmen ergreifen" → pick primary action only 2. EVIDENCE-OF-ACTION: "Tests dokumentieren" → evidence field, not own control 3. PFLICHT=PROZESS: "Behörden informieren" + "Verfahren etablieren" = 1 control 4. MERGE-KEY BUG: merge_key from LLM output now stored in generation_metadata Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -396,25 +396,38 @@ ANALYSE-SCHRITTE (intern durchfuehren, NICHT im Output!):
|
|||||||
WICHTIGE REGELN:
|
WICHTIGE REGELN:
|
||||||
|
|
||||||
1. ATOMARITAET: Ein Control = EINE pruefbare Handlung. Nicht mehrere mischen.
|
1. ATOMARITAET: Ein Control = EINE pruefbare Handlung. Nicht mehrere mischen.
|
||||||
|
COMPOUND-VERBOT: Wenn die Pflicht zwei verschiedene Handlungen enthaelt
|
||||||
|
(z.B. "durchfuehren UND Massnahmen ergreifen", "unterbinden UND dokumentieren",
|
||||||
|
"pruefen UND anpassen"), waehle NUR die primaere Handlung.
|
||||||
|
Die sekundaere Handlung gehoert in Requirements oder Evidence.
|
||||||
|
FALSCH: "Risikobewertung durchfuehren und Massnahmen ergreifen" = 1 Control
|
||||||
|
RICHTIG: "Risikobewertung durchfuehren" = Control, "Massnahmen ergreifen" = separates Control
|
||||||
|
|
||||||
2. EVIDENCE ≠ CONTROL: Dokumentation, Nachweis, Auditbericht, Zertifizierung,
|
2. EVIDENCE ≠ CONTROL: Dokumentation, Nachweis, Protokollierung = Evidence-Feld.
|
||||||
Screenshot, Export = Evidence-Feld. KEIN eigenes Control daraus machen.
|
KEIN eigenes Control wenn die Haupthandlung "dokumentieren" oder "nachweisen" ist
|
||||||
FALSCH: "SBOM fuehren" + "SBOM dokumentieren" = 2 Controls
|
und sich auf eine andere Handlung bezieht.
|
||||||
RICHTIG: "SBOM fuehren" = 1 Control, Dokumentation im Evidence-Feld.
|
FALSCH: "Tests dokumentieren" als eigenes Control
|
||||||
|
RICHTIG: Die Dokumentation gehoert ins Evidence-Feld des Test-Controls.
|
||||||
|
FALSCH: "Massnahmen dokumentieren und Verhaeltnismaessigkeit pruefen" = 1 Control
|
||||||
|
RICHTIG: "Verhaeltnismaessigkeit der Massnahmen pruefen" = Control,
|
||||||
|
Dokumentation = Evidence.
|
||||||
|
AUSNAHME: Wenn die Pflicht selbst eine Dokumentationspflicht IST
|
||||||
|
(z.B. "Verarbeitungsverzeichnis fuehren"), dann ist es ein eigenstaendiges Control.
|
||||||
|
|
||||||
3. CONTAINER ≠ ATOMAR: Abstrakte Oberbegriffe sind KEINE atomaren Controls.
|
3. CONTAINER ≠ ATOMAR: Abstrakte Oberbegriffe sind KEINE atomaren Controls.
|
||||||
FALSCH als atomares Control: "Sichere Sitzungsverwaltung", "Token-Schutz",
|
FALSCH: "Sichere Sitzungsverwaltung", "Token-Schutz", "Sorgfaltspflicht".
|
||||||
"Sorgfaltspflicht Drittkomponenten", "Umfassendes Risikomanagement".
|
Wenn die Pflicht ein Container ist, zerlege sie in konkrete Massnahmen.
|
||||||
Wenn die Pflicht ein Container ist, zerlege sie in die konkreten Massnahmen.
|
|
||||||
|
|
||||||
4. LIFECYCLE TRENNEN: identifizieren, bewerten, beheben, ueberwachen
|
4. LIFECYCLE TRENNEN: identifizieren, bewerten, beheben, ueberwachen
|
||||||
sind je EIGENE Controls (verschiedene Handlungen, verschiedene Verantwortliche).
|
sind je EIGENE Controls (verschiedene Verantwortliche).
|
||||||
|
|
||||||
5. GLEICHER GEGENSTAND MERGEN: Gleicher Akteur + gleiche Handlung + gleicher
|
5. PFLICHT VS. PROZESS NICHT TRENNEN: Wenn eine Pflicht ("Behoerden informieren")
|
||||||
Gegenstand = 1 Control mit mehreren Requirements/Evidence.
|
und der Prozess dafuer ("Benachrichtigungsverfahren etablieren") inhaltlich
|
||||||
FALSCH: "Unterauftragnehmer zur Vertraulichkeit verpflichten" +
|
identisch sind, erzeuge NUR EIN Control. Der Prozess ist die Umsetzung
|
||||||
"Vertraulichkeit vertraglich sichern" = 2 Controls
|
der Pflicht, nicht ein separates Control.
|
||||||
RICHTIG: 1 Control, vertragliche Sicherung = Requirement.
|
FALSCH: "EBA informieren" + "Verfahren zur EBA-Information etablieren" = 2 Controls
|
||||||
|
RICHTIG: "EBA vor Kooperationsvereinbarungen informieren" = 1 Control,
|
||||||
|
Verfahren = Requirement.
|
||||||
|
|
||||||
6. TITEL = SUCHANFRAGE: Der Titel wird als Suchanfrage gegen Kundendokumente
|
6. TITEL = SUCHANFRAGE: Der Titel wird als Suchanfrage gegen Kundendokumente
|
||||||
und Quellcode verwendet. Er muss die HANDLUNG enthalten.
|
und Quellcode verwendet. Er muss die HANDLUNG enthalten.
|
||||||
@@ -424,10 +437,11 @@ WICHTIGE REGELN:
|
|||||||
7. MERGE-KEY: Erzeuge im JSON-Output ein zusaetzliches Feld "merge_key" mit
|
7. MERGE-KEY: Erzeuge im JSON-Output ein zusaetzliches Feld "merge_key" mit
|
||||||
dem Format: "action_type:normalized_object:control_phase"
|
dem Format: "action_type:normalized_object:control_phase"
|
||||||
Beispiele:
|
Beispiele:
|
||||||
- "implement:api_rate_limiting:technical"
|
- "implement:api_rate_limiting:implementation"
|
||||||
- "define:access_control_policy:governance"
|
- "define:access_control_policy:definition"
|
||||||
- "monitor:third_party_vulnerabilities:operations"
|
- "monitor:third_party_vulnerabilities:monitoring"
|
||||||
- "test:authentication_mechanism:verification"
|
- "test:authentication_mechanism:testing"
|
||||||
|
- "report:supervisory_authority:reporting"
|
||||||
|
|
||||||
Das Control muss UMSETZBAR sein — keine Gesetzesparaphrase.
|
Das Control muss UMSETZBAR sein — keine Gesetzesparaphrase.
|
||||||
Antworte NUR als JSON. Keine Erklaerungen."""
|
Antworte NUR als JSON. Keine Erklaerungen."""
|
||||||
@@ -2937,6 +2951,10 @@ class DecompositionPass:
|
|||||||
),
|
),
|
||||||
category=parsed.get("category", obl["parent_category"]),
|
category=parsed.get("category", obl["parent_category"]),
|
||||||
)
|
)
|
||||||
|
# Store merge_key from LLM output in metadata
|
||||||
|
llm_merge_key = parsed.get("merge_key", "")
|
||||||
|
if llm_merge_key:
|
||||||
|
atomic.merge_group_hint = llm_merge_key
|
||||||
|
|
||||||
atomic.parent_control_uuid = obl["parent_uuid"]
|
atomic.parent_control_uuid = obl["parent_uuid"]
|
||||||
atomic.obligation_candidate_id = obl["candidate_id"]
|
atomic.obligation_candidate_id = obl["candidate_id"]
|
||||||
|
|||||||
Reference in New Issue
Block a user