# Golden Test Suite v1 — 40 Regression Tests for Pass 0b Pipeline
# Tests atomic control generation quality, deduplication, and classification.
version: "1.0"
purpose: "Regression tests for obligation-to-atomic-control pipeline"

global_quality_gates:
  max_controls_per_single_obligation: 6
  max_duplicate_title_count: 1
  truncated_titles_allowed: false
  evidence_as_atomic_control_allowed: false
  framework_container_as_atomic_allowed: false
  composite_control_as_atomic_allowed: false

tests:

  # A. Duplicate Explosion (5)

  - id: GT-DEDUPE-001
    name: API Rate Limiting duplicates merge
    category: duplicate_explosion
    input: "Rate-Limiting für alle API-Endpunkte einführen."
    expected:
      create: ["Rate-Limiting für API-Endpunkte technisch durchgesetzt"]
      max_duplicate_title_count: 1

  - id: GT-DEDUPE-002
    name: Payload limit duplicate variants merge
    category: duplicate_explosion
    input: "Maximale Payload-Größen definieren und technisch durchsetzen."
    expected:
      create: ["Maximale Payload-Größen definiert", "Payload-Grenzen technisch durchgesetzt"]
      max_duplicate_title_count: 1

  - id: GT-DEDUPE-003
    name: Session cookie duplicate variants merge
    category: duplicate_explosion
    input: "Session-Cookies müssen Secure, HttpOnly und SameSite setzen."
    expected:
      create: ["Sichere Cookie-Attribute für Session-Cookies gesetzt"]
      max_duplicate_title_count: 1

  - id: GT-DEDUPE-004
    name: MFA repeated wording merges
    category: duplicate_explosion
    input: "Privilegierte Accounts müssen MFA nutzen. MFA ist für Administrationskonten verpflichtend."
    expected:
      create: ["MFA für privilegierte Accounts aktiviert"]
      max_duplicate_title_count: 1

  - id: GT-DEDUPE-005
    name: SBOM variants merge
    category: duplicate_explosion
    input: "Ein SBOM ist zu führen. Ein Komponentenverzeichnis ist zu pflegen."
    expected:
      create: ["Verzeichnis aller Drittkomponenten geführt"]
      max_duplicate_title_count: 1

  # B. Compound Action Split (5)

  - id: GT-SPLIT-001
    name: Define and enforce API payload limits
    category: compound_action_split
    input: "Maximale Payload-Größen für API-Anfragen und -Antworten definieren und technisch durchsetzen."
    expected:
      create:
        - {action_type: define, object: api_payload_limits}
        - {action_type: implement, object: api_payload_enforcement}

  - id: GT-SPLIT-002
    name: Create and implement maintenance policy
    category: compound_action_split
    input: "Eine Wartungsrichtlinie ist zu erstellen und zu implementieren."
    expected:
      create: ["Wartungsrichtlinie definiert", "Wartungsrichtlinie umgesetzt"]

  - id: GT-SPLIT-003
    name: Identify assess remediate monitor vulnerabilities
    category: compound_action_split
    input: "Schwachstellen in Drittkomponenten sind zu identifizieren, zu bewerten, zu adressieren und zu überwachen."
    expected:
      create:
        - "Schwachstellen in Drittkomponenten identifiziert"
        - "Schwachstellen in Drittkomponenten bewertet"
        - "Schwachstellen in Drittkomponenten behandelt"
        - "Schwachstellen in Drittkomponenten überwacht"

  - id: GT-SPLIT-004
    name: Report and document incident
    category: compound_action_split
    input: "Sicherheitsvorfälle sind zu melden und zu dokumentieren."
    expected:
      create: ["Sicherheitsvorfälle gemeldet"]
      evidence_attach: ["Incident-Dokumentation"]

  - id: GT-SPLIT-005
    name: Test and validate control
    category: compound_action_split
    input: "Rate-Limits und Timeouts sind zu testen und zu validieren."
    expected:
      create: ["Rate-Limits und Timeouts getestet", "Rate-Limits und Timeouts validiert"]

  # C. Negative Obligations (5)

  - id: GT-NEG-001
    name: Sensitive data not in tokens or URLs
    category: negative_obligation_handling
    input: "Session-Management-Mechanismen dürfen keine sensiblen Daten im Token oder in der URL übertragen."
    expected:
      create: ["Sensible Daten nicht in Session-Token oder URLs übertragen"]
      forbidden: ["sensible Daten im Token umgesetzt"]

  - id: GT-NEG-002
    name: SMS OTP excluded
    category: negative_obligation_handling
    input: "SMS-basierte OTP sind für privilegierte Accounts nicht zulässig."
    expected:
      create: ["SMS-OTP für privilegierte Accounts ausgeschlossen"]
      action_type: exclude

  - id: GT-NEG-003
    name: Assertion reuse prevented
    category: negative_obligation_handling
    input: "Assertions bei föderierter Re-Authentifizierung dürfen nicht wiederverwendet werden."
    expected:
      create: ["Wiederverwendung föderierter Assertions verhindert"]
      action_type: prevent

  - id: GT-NEG-004
    name: No weak crypto
    category: negative_obligation_handling
    input: "Veraltete kryptografische Algorithmen dürfen nicht verwendet werden."
    expected:
      create: ["Veraltete kryptografische Algorithmen ausgeschlossen"]
      action_type: exclude

  - id: GT-NEG-005
    name: No secrets in logs
    category: negative_obligation_handling
    input: "Geheimnisse dürfen nicht in Logs gespeichert werden."
    expected:
      create: ["Geheimnisse in Logs verhindert"]
      action_type: prevent

  # D. Container Detection (5)

  - id: GT-CONTAINER-001
    name: Secure session management is composite
    category: container_control_detection
    input: "Sichere Sitzungsverwaltung muss umgesetzt werden."
    expected:
      routing_type: composite
      atomic_control_created: false

  - id: GT-CONTAINER-002
    name: Token protection is composite
    category: container_control_detection
    input: "Token-Schutz muss umgesetzt werden."
    expected:
      routing_type: composite
      atomic_control_created: false

  - id: GT-CONTAINER-003
    name: Third-party due diligence is composite
    category: container_control_detection
    input: "Sorgfaltspflichten für Drittkomponenten müssen umgesetzt werden."
    expected:
      routing_type: composite
      atomic_control_created: false

  - id: GT-CONTAINER-004
    name: AI risk management system is composite
    category: container_control_detection
    input: "Ein Risikomanagementsystem für KI-Systeme muss eingerichtet und betrieben werden."
    expected:
      routing_type: composite
      decompose_required: true

  - id: GT-CONTAINER-005
    name: Secure development lifecycle is composite
    category: container_control_detection
    input: "Ein sicherer Softwareentwicklungsprozess ist umzusetzen."
    expected:
      routing_type: composite
      decompose_required: true

  # E. Framework Decomposition (5)

  - id: GT-FRAMEWORK-001
    name: CSA CCM AIS decomposes
    category: framework_decomposition
    input: "Die CCM-Praktiken für Application and Interface Security müssen implementiert werden."
    expected:
      routing_type: framework_container
      atomic_control_created_from_container_directly: false

  - id: GT-FRAMEWORK-002
    name: OWASP ASVS V3 decomposes
    category: framework_decomposition
    input: "OWASP ASVS V3 Session Management Anforderungen sind umzusetzen."
    expected:
      routing_type: framework_container

  - id: GT-FRAMEWORK-003
    name: NIST IA family decomposes
    category: framework_decomposition
    input: "NIST IA-Anforderungen zur Identifikation und Authentisierung sind umzusetzen."
    expected:
      routing_type: framework_container

  - id: GT-FRAMEWORK-004
    name: OWASP API6 resource consumption decomposes
    category: framework_decomposition
    input: "OWASP API6 Anforderungen zu unrestricted resource consumption sind umzusetzen."
    expected:
      routing_type: framework_container

  - id: GT-FRAMEWORK-005
    name: Framework domain not direct atomic
    category: framework_decomposition
    input: "Alle Controls der Kategorie Access Control müssen implementiert werden."
    expected:
      atomic_control_created_from_container_directly: false

  # F. Evidence Leakage (5)

  - id: GT-EVIDENCE-001
    name: SBOM evidence not duplicate control
    category: evidence_not_control
    input: "Ein SBOM-Nachweis muss vorliegen."
    expected:
      classification: evidence
      new_master_control_created: false

  - id: GT-EVIDENCE-002
    name: Screenshot is evidence
    category: evidence_not_control
    input: "Ein Screenshot der MFA-Konfiguration ist vorzulegen."
    expected:
      classification: evidence
      new_master_control_created: false

  - id: GT-EVIDENCE-003
    name: Audit report is evidence
    category: evidence_not_control
    input: "Ein Auditbericht zur Zugriffskontrolle muss vorhanden sein."
    expected:
      classification: evidence
      new_master_control_created: false

  - id: GT-EVIDENCE-004
    name: Certification is evidence
    category: evidence_not_control
    input: "Eine Zertifizierung der Komponente ist nachzuweisen."
    expected:
      classification: evidence
      new_master_control_created: false

  - id: GT-EVIDENCE-005
    name: Jira ticket export is evidence
    category: evidence_not_control
    input: "JIRA-Tickets zur Behebung nicht konformer Accounts müssen exportiert werden."
    expected:
      classification: evidence
      new_master_control_created: false

  # G. Scope Dimension (5)

  - id: GT-SCOPE-001
    name: Confidentiality actor scopes stay separate
    category: scope_dimension
    input:
      - "Mitarbeiter müssen Vertraulichkeit wahren."
      - "Unterauftragnehmer müssen Vertraulichkeit wahren."
      - "Externe Stellen müssen Vertraulichkeit wahren."
    expected:
      master_controls_count: 3

  - id: GT-SCOPE-002
    name: Impartiality organization vs assessment
    category: scope_dimension
    input:
      - "Unparteilichkeit muss in Leitlinien verankert sein."
      - "Unparteilichkeit muss bei Konformitätsbewertungen sichergestellt sein."
    expected:
      master_controls_count: 2

  - id: GT-SCOPE-003
    name: Provider size and AI complexity separate
    category: scope_dimension
    input:
      - "Verfahren müssen die Größe des Anbieters berücksichtigen."
      - "Verfahren müssen die Komplexität des KI-Systems berücksichtigen."
    expected:
      master_controls_count: 2

  - id: GT-SCOPE-004
    name: Third-party and open-source components separate
    category: scope_dimension
    input:
      - "Drittkomponenten müssen geprüft werden."
      - "Open-Source-Komponenten müssen separat geprüft werden."
    expected:
      master_controls_count: 2

  - id: GT-SCOPE-005
    name: Admin accounts and all users do not collapse
    category: scope_dimension
    input:
      - "Privilegierte Accounts müssen MFA verwenden."
      - "Alle Nutzer müssen MFA verwenden."
    expected:
      master_controls_count: 2

  # H. Title Quality (5)

  - id: GT-TITLE-001
    name: No truncated titles
    category: title_quality
    input: "Ressourcenkontingente für kostenpflichtige Drittanbieter-API-Integrationen definieren und überwachen."
    expected:
      truncated_title_allowed: false
      forbidden_title_endings: ["defin", "überw"]

  - id: GT-TITLE-002
    name: Legal disclosure title safe
    category: title_quality
    input: "Informationen dürfen nur offengelegt werden, wenn dies gesetzlich erforderlich ist."
    expected:
      create: ["Gesetzlich erforderliche Offenlegung kontrolliert"]
      forbidden: ["Offenlegung erlangter Informationen"]

  - id: GT-TITLE-003
    name: No generic implemented suffix for prohibitions
    category: title_quality
    input: "Session-IDs dürfen nicht in URLs oder Logs erscheinen."
    expected:
      create: ["Session-IDs in URLs oder Logs verhindert"]
      forbidden: ["Session-IDs in URLs oder Logs umgesetzt"]

  - id: GT-TITLE-004
    name: German title normalization
    category: title_quality
    input: "maximale Payload-Größen für API-Anfragen definieren."
    expected:
      canonical_title: "Maximale Payload-Größen definiert"

  - id: GT-TITLE-005
    name: No broad object as atomic title
    category: title_quality
    input: "Token-Schutz muss umgesetzt werden."
    expected:
      forbidden: ["Token-Schutz umgesetzt"]
      routing_type: composite
