Protokoll #16761

ID16761
Zeitstempel2025-12-25 18:56:33.107411
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens2,551 (Input: 48, Output: 2,503)
Dauer115 ms
Request-Zeit2025-12-25 18:56:33.107411
Response-Zeit2025-12-25 18:56:33.222817

Request

{
    "event": "PreToolUse",
    "tool_name": "Bash",
    "tool_input": {
        "command": "cat \/var\/www\/docs\/contracts\/layered-architecture-pruefung_v1.0.yaml",
        "description": "Read layered architecture contract"
    }
}

Response

{
    "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
    }
}
← Vorheriger Zur Liste Nächster →