{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "mysql -u root -pv8mFLmkF2fth_r -D ki_dev -e \"SELECT yaml_content FROM contracts WHERE name LIKE 'layered%' AND status = 'active';\" 2>\/dev\/null | tail -n +2 | head -100",
"description": "Get 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\"\\n",
"stderr": "",
"interrupted": false,
"isImage": false
}
}