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
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 |