{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "cat \/var\/www\/docs\/contracts\/layered-architecture-pruefung_v1.0.yaml",
"description": "Read layered architecture contract"
}
}
{
"tool_response": {
"stdout": "# =============================================================================\n# LAYERED ARCHITECTURE VALIDATION CONTRACT\n# =============================================================================\n# Validierung der Schichtenarchitektur (MVC in \/src, MVP in \/app)\n# Version: 1.0.0\n# Erstellt: 2025-12-20\n# =============================================================================\n\nmeta:\n document_type: architecture_validation_contract\n normative: true\n binding: mandatory\n created: 2025-12-20\n author: system_generated_under_supervision\n based_on: layered_architecture_mvc_mvp_v1.2.0\n\nidentity:\n name: layered_architecture_validation\n version: 1.0.0\n status: active\n migration_plan: \/var\/www\/docs\/architecture\/migration-plan_mvc-to-layered.md\n migrated_on: 2025-12-20\n\n# =============================================================================\n# SCOPE (technisch definiert)\n# =============================================================================\nscope:\n applies_to_paths:\n - \/var\/www\/dev.campus.systemische-tools.de\/src\/**\/*.php\n - \/var\/www\/dev.campus.systemische-tools.de\/app\/**\/*.php\n\n excludes_paths:\n - \/var\/www\/dev.campus.systemische-tools.de\/tests\/**\n - \/var\/www\/dev.campus.systemische-tools.de\/scripts\/**\n - \/var\/www\/dev.campus.systemische-tools.de\/public\/**\n - \/var\/www\/dev.campus.systemische-tools.de\/config\/**\n - \/var\/www\/dev.campus.systemische-tools.de\/src\/View\/docs\/**\n\n file_types:\n - .php\n\n platform:\n language: PHP\n version_min: 8.4\n\n# =============================================================================\n# ARCHITEKTUR-DEFINITION\n# =============================================================================\narchitecture:\n style: layered_architecture\n\n patterns:\n src: mvc\n app: mvp\n\n expected_directories:\n src:\n - \/src\/Domain\n - \/src\/UseCases\n - \/src\/Infrastructure\n - \/src\/Controller\n - \/src\/View\n app:\n - \/app\/Presenter\n - \/app\/View\n\n# =============================================================================\n# LAYER-DEFINITIONEN\n# =============================================================================\nlayers:\n # === SRC (MVC) ===\n src_domain:\n path_pattern: \"\/src\/Domain\/**\/*.php\"\n role: domain_logic\n allowed:\n - Fachliche Regeln\n - Entities\n - Value Objects\n - Domain Events\n forbidden:\n - UI-Logik\n - Interaktions-Logik\n - Infrastructure-Zugriff\n - use-Statements zu \/app\n - use-Statements zu \/src\/Infrastructure\n\n src_use_cases:\n path_pattern: \"\/src\/UseCases\/**\/*.php\"\n role: domain_coordination\n allowed:\n - Orchestrierung von Domain-Operationen\n - Interface-Definitionen für Infrastructure\n forbidden:\n - Eigene Fachlogik (gehört in Domain)\n - UI-Logik\n - Direkte Infrastructure-Implementierung\n\n src_infrastructure:\n path_pattern: \"\/src\/Infrastructure\/**\/*.php\"\n role: infrastructure_implementation\n allowed:\n - Repository-Implementierungen\n - External Service Adapter\n - Database Access\n forbidden:\n - Domain-Logik\n - UI-Logik\n must_implement: Interfaces aus \/src\/UseCases oder \/src\/Domain\n\n src_controller:\n path_pattern: \"\/src\/Controller\/**\/*.php\"\n role: request_handling\n allowed:\n - Use Case Orchestrierung\n - Request\/Response Transformation\n forbidden:\n - Domain-Logik\n - Infrastructure-Implementierung\n - UI State Management\n\n src_view:\n path_pattern: \"\/src\/View\/**\/*.php\"\n role: output_templates\n allowed:\n - Statische HTML-Struktur\n - Daten-Ausgabe\n forbidden:\n - UI-Logik\n - Interaktions-Logik\n - State Management\n\n # === APP (MVP) ===\n app_presenter:\n path_pattern: \"\/app\/Presenter\/**\/*.php\"\n role: interaction_logic\n allowed:\n - Interaktions-Logik\n - UI State Management\n - UI Validation (syntaktisch)\n - Aufrufe zu \/src\/UseCases\n forbidden:\n - Domain-Logik\n - Semantische Validierung\n - Direkter Infrastructure-Zugriff\n\n app_view:\n path_pattern: \"\/app\/View\/**\/*.php\"\n role: passive_view\n allowed:\n - Raw Event Forwarding\n - Data Display\n forbidden:\n - Event Mapping\n - Conditional Logic (außer Anzeige)\n - State Management\n - Aufrufe zu \/src\n\n# =============================================================================\n# DEPENDENCY RULES\n# =============================================================================\ndependency_rules:\n allowed_imports:\n - from: \"\/app\/Presenter\/**\"\n to: \"\/src\/UseCases\/**\"\n reason: \"Presenter darf Use Cases aufrufen\"\n\n - from: \"\/src\/Controller\/**\"\n to: \"\/src\/UseCases\/**\"\n reason: \"Controller orchestriert Use Cases\"\n\n - from: \"\/src\/UseCases\/**\"\n to: \"\/src\/Domain\/**\"\n reason: \"Use Cases nutzen Domain\"\n\n - from: \"\/src\/Infrastructure\/**\"\n to: \"\/src\/Domain\/**\"\n reason: \"Infrastructure implementiert Domain-Interfaces\"\n\n forbidden_imports:\n - from: \"\/src\/**\"\n to: \"\/app\/**\"\n severity: critical\n reason: \"src darf nicht von app abhängen\"\n\n - from: \"\/app\/**\"\n to: \"\/src\/Infrastructure\/**\"\n severity: critical\n reason: \"app darf nicht direkt auf Infrastructure zugreifen\"\n\n - from: \"\/app\/View\/**\"\n to: \"\/app\/Presenter\/**\"\n severity: critical\n reason: \"View darf Presenter nicht importieren (passive view)\"\n\n - from: \"\/src\/Domain\/**\"\n to: \"\/src\/Infrastructure\/**\"\n severity: critical\n reason: \"Domain darf nicht von Infrastructure abhängen\"\n\n cycles:\n forbidden: true\n severity: critical\n\n# =============================================================================\n# VALIDATION FACTORS\n# =============================================================================\nvalidation_factors:\n\n directory_structure:\n priority: 1\n severity: critical\n description: Erwartete Verzeichnisstruktur muss existieren\n validation:\n method: directory_existence_check\n required_directories:\n - \/src\/Domain\n - \/src\/UseCases\n - \/src\/Infrastructure\n - \/app\/Presenter\n\n file_placement:\n priority: 2\n severity: critical\n description: Dateien müssen im korrekten Layer liegen\n validation:\n method: path_role_validation\n rules:\n - \"*Presenter.php muss in \/app\/Presenter liegen\"\n - \"*Controller.php muss in \/src\/Controller liegen\"\n - \"*Repository.php muss in \/src\/Infrastructure liegen\"\n - \"Entity\/*.php muss in \/src\/Domain liegen\"\n\n import_compliance:\n priority: 3\n severity: critical\n description: Import-Statements müssen Dependency Rules einhalten\n validation:\n method: static_import_analysis\n checks:\n - Extrahiere alle use-Statements\n - Mappe auf Layer\n - Prüfe gegen allowed_imports\n - Prüfe gegen forbidden_imports\n\n layer_logic_compliance:\n priority: 4\n severity: major\n description: Code-Inhalte müssen Layer-Rolle entsprechen\n validation:\n method: code_pattern_analysis\n checks:\n - Domain enthält keine $_GET, $_POST, $_SESSION\n - View enthält keine new-Statements für Services\n - Presenter enthält keine SQL-Queries\n\n cycle_detection:\n priority: 5\n severity: critical\n description: Keine zyklischen Abhängigkeiten zwischen Layern\n validation:\n method: dependency_graph_analysis\n\n# =============================================================================\n# PROHIBITIONS (explizite Verbote)\n# =============================================================================\nprohibitions:\n - name: presenter_in_src\n pattern: \"\/src\/**\/Presenter*.php\"\n severity: critical\n message: \"Presenter gehören nach \/app\/Presenter, nicht nach \/src\"\n\n - name: controller_in_app\n pattern: \"\/app\/**\/Controller*.php\"\n severity: critical\n message: \"Controller gehören nach \/src\/Controller, nicht nach \/app\"\n\n - name: domain_logic_in_app\n indicators:\n - \"Business rule implementations\"\n - \"Entity definitions\"\n - \"Value object definitions\"\n severity: critical\n message: \"Domain-Logik gehört nach \/src\/Domain\"\n\n - name: infrastructure_in_presenter\n indicators:\n - \"PDO usage\"\n - \"file_get_contents\"\n - \"curl calls\"\n severity: critical\n message: \"Presenter darf nicht direkt auf Infrastructure zugreifen\"\n\n# =============================================================================\n# PASS THRESHOLD\n# =============================================================================\npass_threshold:\n critical_violations_max: 0\n major_violations_max: 2\n minor_violations_max: 5\n\n outcome_logic:\n - condition: \"critical_violations > 0\"\n result: architecture_rejected\n - condition: \"major_violations > 2\"\n result: revision_required\n - condition: \"all within limits\"\n result: architecture_approved\n\n# =============================================================================\n# ENFORCEMENT\n# =============================================================================\nenforcement:\n on_new_file:\n rule: \"Datei muss in korrektem Layer-Verzeichnis liegen\"\n action: \"BLOCKIERT bei falschem Pfad\"\n\n on_import_change:\n rule: \"Neue Imports müssen Dependency Rules einhalten\"\n action: \"BLOCKIERT bei forbidden import\"\n\n before_sync_to_prod:\n rule: \"Alle Architektur-Checks müssen bestanden sein\"\n action: \"KEIN SYNC bei critical violations\"",
"stderr": "",
"interrupted": false,
"isImage": false
}
}