layered-architecture-pruefung_v1.0

ID 5
UUID d5b5cd24-8128-41b7-8d93-f94710a8ea9d
Version 3.2
Status active
Scope
Erstellt 2025-12-20 10:59:58 von migration
Aktualisiert 2025-12-22 10:04:50

YAML-Inhalt

contract:
  name: layered-architecture
  version: "3.2"
  status: active
  description: |
    Validierung der Schichtenarchitektur (MVC in /src, MVP in /app).
    v3.0: Erweitert um Supervision-Regeln (Controller als Transport-Layer).
    v3.1: Pfade korrigiert (src/ Prefix für in_files).
    v3.2: Regex-Patterns escaped für korrekte Validierung.

  created: "2025-12-20"
  updated: "2025-12-22"
  author: system_generated_under_supervision

  scope:
    paths:
      - "/src/**/*.php"
      - "/app/**/*.php"
    excludes:
      - "/tests/**"
      - "/scripts/**"
      - "/public/**"
      - "/config/**"
      - "/src/View/docs/**"

  rules:
    # === CONTROLLER-REGELN (aus Supervision) ===
    - id: no-pdo-in-controller
      check_type: forbidden_pattern
      patterns:
        - "private PDO"
        - "->query"
        - "->prepare"
      in_files: "src/Controller/**/*.php"
      severity: critical
      description: "Controller dürfen kein direktes PDO/SQL verwenden"

    - id: no-new-repository-in-controller
      check_type: forbidden_pattern
      patterns:
        - "new .*Repository"
      in_files: "src/Controller/**/*.php"
      severity: critical
      description: "Controller dürfen Repositories nicht selbst instanziieren"

    - id: no-new-service-in-controller
      check_type: forbidden_pattern
      patterns:
        - "new .*Service"
      in_files: "src/Controller/**/*.php"
      severity: major
      description: "Controller dürfen Services nicht selbst instanziieren"

    - id: no-sql-in-controller
      check_type: forbidden_pattern
      patterns:
        - "SELECT .* FROM"
        - "INSERT INTO"
        - "UPDATE .* SET"
        - "DELETE FROM"
      in_files: "src/Controller/**/*.php"
      severity: critical
      description: "SQL-Statements gehören in Repositories"

    - id: no-echo-in-controller
      check_type: forbidden_pattern
      patterns:
        - "echo '"
        - 'echo "'
      in_files: "src/Controller/**/*.php"
      severity: major
      description: "Controller dürfen kein direktes Output erzeugen - nutze view()/partial()/json()"

    - id: no-parsedown-in-controller
      check_type: forbidden_pattern
      patterns:
        - "new Parsedown"
        - "Parsedown::"
      in_files: "src/Controller/**/*.php"
      severity: major
      description: "Markdown-Formatierung gehört in Formatter-Klassen"

    # === DOMAIN-REGELN ===
    - id: no-superglobals-in-domain
      check_type: forbidden_pattern
      patterns:
        - "_GET"
        - "_POST"
        - "_SESSION"
        - "_REQUEST"
      in_files: "src/Domain/**/*.php"
      severity: critical
      description: "Domain darf keine Superglobals verwenden"

    # === PRESENTER-REGELN ===
    - id: no-sql-in-presenter
      check_type: forbidden_pattern
      patterns:
        - "->query"
        - "->prepare"
        - "new PDO"
      in_files: "app/Presenter/**/*.php"
      severity: critical
      description: "Presenter darf kein direktes SQL enthalten"

    # === PLATZIERUNGS-REGELN ===
    - id: presenter-in-app
      check_type: forbidden_pattern
      patterns:
        - "class .* extends .*Presenter"
      in_files: "src/**/*.php"
      severity: critical
      description: "Presenter gehören nach /app/Presenter, nicht nach /src"

    - id: controller-not-in-app
      check_type: forbidden_pattern
      patterns:
        - "class .* extends .*Controller"
      in_files: "app/**/*.php"
      severity: critical
      description: "Controller gehören nach /src/Controller, nicht nach /app"

  enforcement:
    on_violation: block
    hook: "/var/www/tools/ki-protokoll/claude-hook/architecture_guard.py"

  pass_threshold:
    critical_max: 0
    major_max: 2
    minor_max: 5

  supervision_reference:
    problems_addressed:
      - "#1: Controller greifen direkt auf PDO und SQL zu"
      - "#3: Controller enthalten Geschäfts- und Workflow-Logik"
      - "#5: Präsentationslogik im Controller"
      - "#6: Inkonsistente Response-Strategien"
      - "#8: Controller bauen Abhängigkeiten selbst"

Aktionen

Bearbeiten

Versionshistorie

Version Geändert am Von Beschreibung
3.2 (aktuell) 2025-12-22 10:04:50 - -
3.1 2025-12-22 10:04:50 claude Regex-Patterns escaped und vereinfacht für korrekte Validierung ohne Parse-Fehler
3.0 2025-12-22 10:04:08 claude Pfade korrigiert: in_files nutzt jetzt src/ Prefix (z.B. src/Controller/**/*.php statt Controller/**/*.php)
2.0 2025-12-22 10:01:09 claude Erweitert um Supervision-Regeln: no-pdo-in-controller, no-new-repository-in-controller, no-new-service-in-controller, no-sql-in-controller, no-echo-in-controller, no-parsedown-in-controller, no-header-in-controller. Referenziert adressierte Supervision-Probleme.
1.0 2025-12-22 09:42:12 claude Migration auf Meta-Schema v1.0: Struktur unter 'contract' verschachtelt, scope.paths als Array, rules als flache Liste

Letzte Validierungen

Datum Ergebnis Critical Major Minor Dauer
2025-12-25 12:37:49 passed 0 1 0 15ms
2025-12-23 04:52:24 passed 0 1 0 17ms
2025-12-23 04:48:56 passed 0 1 0 11ms
2025-12-23 04:45:56 failed 2 2 0 10ms
2025-12-23 04:36:05 failed 18 9 0 15ms
2025-12-22 10:04:55 failed 45 7 0 13ms
2025-12-22 10:04:14 failed 13 3 12 22ms
2025-12-22 10:01:15 passed 0 0 0 20ms
2025-12-22 09:26:46 passed 0 0 0 7ms
2025-12-22 09:06:46 passed 0 0 0 9ms

← Zurück zur Übersicht