Protokoll #4237
| ID | 4237 |
|---|---|
| Zeitstempel | 2025-12-22 09:34:10.053002 |
| Client | root |
| IP | Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 |
| Modell | claude-sonnet-4-20250514 |
| Status | completed |
| Tokens | 5,183 (Input: 0, Output: 0) |
| Dauer | 105 ms |
| Request-Zeit | Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18 |
| Response-Zeit | - |
Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22
Request
{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/contracts\/meta-schema.yaml",
"content": "# =============================================================================\n# CONTRACT META-SCHEMA v1.0\n# =============================================================================\n# Dieses Schema definiert die Struktur, die alle Contracts einhalten MÜSSEN.\n# Der Contract-Validator prüft Contracts gegen dieses Schema.\n#\n# Erstellt: 2025-12-22\n# Anlass: Inkonsistente Contract-Formate führten zu nicht-funktionierender Validierung\n# =============================================================================\n\nmeta_schema:\n version: \"1.0\"\n description: |\n Alle Contracts im System müssen diesem Schema folgen.\n Das Schema ermöglicht einheitliche Validierung und Enforcement.\n\n# =============================================================================\n# PFLICHTFELDER\n# =============================================================================\nrequired:\n # Jeder Contract MUSS diese Top-Level-Felder haben\n contract:\n name:\n type: string\n description: \"Eindeutiger Name des Contracts\"\n example: \"code-quality-standards\"\n constraints:\n - \"Kleinbuchstaben, Bindestriche erlaubt\"\n - \"Keine Leerzeichen\"\n - \"Max 50 Zeichen\"\n\n version:\n type: string\n description: \"Semantic Versioning (Major.Minor.Patch)\"\n example: \"1.0.0\"\n pattern: \"^\\\\d+\\\\.\\\\d+(\\\\.\\\\d+)?$\"\n\n status:\n type: enum\n values: [\"draft\", \"active\", \"deprecated\"]\n default: \"active\"\n description: \"Nur 'active' Contracts werden validiert\"\n\n scope:\n type: object\n description: \"Definiert WO der Contract gilt\"\n required_fields:\n paths:\n type: array\n items: string\n description: \"Glob-Patterns für Dateipfade\"\n example: [\"\/src\/**\/*.php\", \"\/app\/**\/*.php\"]\n optional_fields:\n excludes:\n type: array\n items: string\n description: \"Ausgeschlossene Pfade\"\n example: [\"\/src\/View\/**\", \"\/tests\/**\"]\n\n rules:\n type: array\n description: \"Liste der Regeln die geprüft werden\"\n min_items: 1\n\n# =============================================================================\n# OPTIONALE FELDER\n# =============================================================================\noptional:\n contract:\n description:\n type: string\n description: \"Ausführliche Beschreibung des Contract-Zwecks\"\n\n created:\n type: string\n format: date\n description: \"Erstellungsdatum (ISO 8601)\"\n\n author:\n type: string\n description: \"Ersteller des Contracts\"\n\n supersedes:\n type: string\n description: \"Name des abgelösten Contracts\"\n\n enforcement:\n type: object\n description: \"Wie wird der Contract durchgesetzt\"\n fields:\n on_violation:\n type: enum\n values: [\"block\", \"warn\", \"log\"]\n hook:\n type: string\n description: \"Hook-Skript das ausgeführt wird\"\n\n pass_threshold:\n type: object\n description: \"Schwellwerte für Pass\/Fail\"\n fields:\n critical_max:\n type: integer\n default: 0\n major_max:\n type: integer\n default: 2\n minor_max:\n type: integer\n default: 5\n\n# =============================================================================\n# RULE-TYPEN\n# =============================================================================\nrule_types:\n # Jede Rule MUSS einen dieser Typen haben\n\n line_count:\n description: \"Prüft Zeilenanzahl von Dateien\"\n required_fields:\n - id\n - check_type: \"line_count\"\n - pattern # Glob-Pattern für Dateien\n - max_lines # Maximale Zeilenzahl\n optional_fields:\n - severity # critical, major, minor (default: major)\n - description\n example:\n id: \"no-god-class\"\n check_type: \"line_count\"\n pattern: \"Controller\/*.php\"\n max_lines: 500\n severity: \"warning\"\n description: \"Controller dürfen max 500 LOC haben\"\n\n forbidden_pattern:\n description: \"Prüft auf verbotene Code-Patterns\"\n required_fields:\n - id\n - check_type: \"forbidden_pattern\"\n - patterns # Array von Regex\/String-Patterns\n - in_files # Glob-Pattern für Dateien\n optional_fields:\n - severity\n - description\n - exclude_files # Ausnahmen\n example:\n id: \"no-pdo-in-controller\"\n check_type: \"forbidden_pattern\"\n patterns:\n - \"->query(\"\n - \"->prepare(\"\n - \"new PDO\"\n in_files: \"Controller\/*.php\"\n severity: \"error\"\n\n required_pattern:\n description: \"Prüft auf erforderliche Code-Patterns\"\n required_fields:\n - id\n - check_type: \"required_pattern\"\n - patterns # Array von Patterns die vorhanden sein müssen\n - in_files\n optional_fields:\n - severity\n - description\n example:\n id: \"use-view-method\"\n check_type: \"required_pattern\"\n patterns:\n - \"$this->view(\"\n in_files: \"Controller\/*.php\"\n severity: \"info\"\n\n dependency_check:\n description: \"Prüft Import\/Use-Statements\"\n required_fields:\n - id\n - check_type: \"dependency_check\"\n - forbidden_imports # Array von verbotenen Imports\n - in_files\n optional_fields:\n - allowed_imports\n - severity\n example:\n id: \"no-infrastructure-in-domain\"\n check_type: \"dependency_check\"\n forbidden_imports:\n - \"Infrastructure\\\\\"\n in_files: \"Domain\/**\/*.php\"\n severity: \"critical\"\n\n structure_check:\n description: \"Prüft Datei\/Verzeichnis-Struktur\"\n required_fields:\n - id\n - check_type: \"structure_check\"\n - required_dirs # Verzeichnisse die existieren müssen\n optional_fields:\n - required_files\n - naming_convention\n - severity\n example:\n id: \"layer-structure\"\n check_type: \"structure_check\"\n required_dirs:\n - \"\/src\/Domain\"\n - \"\/src\/UseCases\"\n - \"\/src\/Infrastructure\"\n\n custom:\n description: \"Benutzerdefinierte Validierung via Script\"\n required_fields:\n - id\n - check_type: \"custom\"\n - script # Pfad zum Validierungs-Script\n optional_fields:\n - args\n - severity\n example:\n id: \"phpstan-level-7\"\n check_type: \"custom\"\n script: \"\/opt\/php-tools\/vendor\/bin\/phpstan\"\n args: [\"analyse\", \"--level=7\"]\n\n# =============================================================================\n# SEVERITY LEVELS\n# =============================================================================\nseverity_levels:\n critical:\n description: \"Blockiert Sync\/Deploy\"\n action: \"reject\"\n max_allowed: 0\n\n major:\n description: \"Erfordert Überarbeitung\"\n action: \"flag_for_revision\"\n max_allowed: 2\n\n minor:\n description: \"Wird protokolliert\"\n action: \"log_only\"\n max_allowed: 5\n\n warning:\n description: \"Hinweis ohne Konsequenz\"\n action: \"info_only\"\n max_allowed: null\n\n info:\n description: \"Reine Information\"\n action: \"none\"\n max_allowed: null\n\n# =============================================================================\n# BEISPIEL: VOLLSTÄNDIGER CONTRACT\n# =============================================================================\nexample_contract:\n contract:\n name: \"example-quality-standards\"\n version: \"1.0.0\"\n status: \"active\"\n description: \"Beispiel-Contract zur Demonstration des Meta-Schemas\"\n created: \"2025-12-22\"\n author: \"claude\"\n\n scope:\n paths:\n - \"\/src\/**\/*.php\"\n excludes:\n - \"\/src\/View\/**\"\n - \"\/tests\/**\"\n\n rules:\n - id: \"max-controller-loc\"\n check_type: \"line_count\"\n pattern: \"Controller\/*.php\"\n max_lines: 500\n severity: \"major\"\n description: \"Controller dürfen max 500 LOC haben\"\n\n - id: \"no-sql-in-controller\"\n check_type: \"forbidden_pattern\"\n patterns:\n - \"->query(\"\n - \"->prepare(\"\n in_files: \"Controller\/*.php\"\n severity: \"critical\"\n description: \"Controller dürfen kein direktes SQL enthalten\"\n\n - id: \"repository-pattern\"\n check_type: \"required_pattern\"\n patterns:\n - \"Repository\"\n in_files: \"Infrastructure\/Persistence\/*.php\"\n severity: \"info\"\n\n enforcement:\n on_violation: \"block\"\n hook: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/contract_enforcement.py\"\n\n pass_threshold:\n critical_max: 0\n major_max: 2\n minor_max: 5\n\n# =============================================================================\n# LEGACY-FORMAT-MAPPING\n# =============================================================================\n# Für die Migration bestehender Contracts\nlegacy_mappings:\n # Alte Formate und ihre Entsprechung im neuen Schema\n\n \"scope.applies_to_paths\":\n maps_to: \"contract.scope.paths\"\n\n \"contract.scope.includes\":\n maps_to: \"contract.scope.paths\"\n\n \"applicability.applies_to\":\n maps_to: \"contract.scope.paths\"\n\n \"applicability.scope\":\n maps_to: \"contract.scope.paths\"\n\n \"scope (string)\":\n maps_to: \"contract.scope.paths\"\n conversion: \"Wrap in array, add \/**\"\n\n# =============================================================================\n# VALIDIERUNG\n# =============================================================================\nvalidation:\n on_contract_create:\n - \"Schema-Compliance prüfen\"\n - \"Name-Uniqueness prüfen\"\n - \"YAML-Syntax validieren\"\n\n on_contract_update:\n - \"Schema-Compliance prüfen\"\n - \"Version-Increment prüfen\"\n - \"Breaking-Changes dokumentieren\"\n"
}
}
Response
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/contracts\/meta-schema.yaml",
"content": "# =============================================================================\n# CONTRACT META-SCHEMA v1.0\n# =============================================================================\n# Dieses Schema definiert die Struktur, die alle Contracts einhalten MÜSSEN.\n# Der Contract-Validator prüft Contracts gegen dieses Schema.\n#\n# Erstellt: 2025-12-22\n# Anlass: Inkonsistente Contract-Formate führten zu nicht-funktionierender Validierung\n# =============================================================================\n\nmeta_schema:\n version: \"1.0\"\n description: |\n Alle Contracts im System müssen diesem Schema folgen.\n Das Schema ermöglicht einheitliche Validierung und Enforcement.\n\n# =============================================================================\n# PFLICHTFELDER\n# =============================================================================\nrequired:\n # Jeder Contract MUSS diese Top-Level-Felder haben\n contract:\n name:\n type: string\n description: \"Eindeutiger Name des Contracts\"\n example: \"code-quality-standards\"\n constraints:\n - \"Kleinbuchstaben, Bindestriche erlaubt\"\n - \"Keine Leerzeichen\"\n - \"Max 50 Zeichen\"\n\n version:\n type: string\n description: \"Semantic Versioning (Major.Minor.Patch)\"\n example: \"1.0.0\"\n pattern: \"^\\\\d+\\\\.\\\\d+(\\\\.\\\\d+)?$\"\n\n status:\n type: enum\n values: [\"draft\", \"active\", \"deprecated\"]\n default: \"active\"\n description: \"Nur 'active' Contracts werden validiert\"\n\n scope:\n type: object\n description: \"Definiert WO der Contract gilt\"\n required_fields:\n paths:\n type: array\n items: string\n description: \"Glob-Patterns für Dateipfade\"\n example: [\"\/src\/**\/*.php\", \"\/app\/**\/*.php\"]\n optional_fields:\n excludes:\n type: array\n items: string\n description: \"Ausgeschlossene Pfade\"\n example: [\"\/src\/View\/**\", \"\/tests\/**\"]\n\n rules:\n type: array\n description: \"Liste der Regeln die geprüft werden\"\n min_items: 1\n\n# =============================================================================\n# OPTIONALE FELDER\n# =============================================================================\noptional:\n contract:\n description:\n type: string\n description: \"Ausführliche Beschreibung des Contract-Zwecks\"\n\n created:\n type: string\n format: date\n description: \"Erstellungsdatum (ISO 8601)\"\n\n author:\n type: string\n description: \"Ersteller des Contracts\"\n\n supersedes:\n type: string\n description: \"Name des abgelösten Contracts\"\n\n enforcement:\n type: object\n description: \"Wie wird der Contract durchgesetzt\"\n fields:\n on_violation:\n type: enum\n values: [\"block\", \"warn\", \"log\"]\n hook:\n type: string\n description: \"Hook-Skript das ausgeführt wird\"\n\n pass_threshold:\n type: object\n description: \"Schwellwerte für Pass\/Fail\"\n fields:\n critical_max:\n type: integer\n default: 0\n major_max:\n type: integer\n default: 2\n minor_max:\n type: integer\n default: 5\n\n# =============================================================================\n# RULE-TYPEN\n# =============================================================================\nrule_types:\n # Jede Rule MUSS einen dieser Typen haben\n\n line_count:\n description: \"Prüft Zeilenanzahl von Dateien\"\n required_fields:\n - id\n - check_type: \"line_count\"\n - pattern # Glob-Pattern für Dateien\n - max_lines # Maximale Zeilenzahl\n optional_fields:\n - severity # critical, major, minor (default: major)\n - description\n example:\n id: \"no-god-class\"\n check_type: \"line_count\"\n pattern: \"Controller\/*.php\"\n max_lines: 500\n severity: \"warning\"\n description: \"Controller dürfen max 500 LOC haben\"\n\n forbidden_pattern:\n description: \"Prüft auf verbotene Code-Patterns\"\n required_fields:\n - id\n - check_type: \"forbidden_pattern\"\n - patterns # Array von Regex\/String-Patterns\n - in_files # Glob-Pattern für Dateien\n optional_fields:\n - severity\n - description\n - exclude_files # Ausnahmen\n example:\n id: \"no-pdo-in-controller\"\n check_type: \"forbidden_pattern\"\n patterns:\n - \"->query(\"\n - \"->prepare(\"\n - \"new PDO\"\n in_files: \"Controller\/*.php\"\n severity: \"error\"\n\n required_pattern:\n description: \"Prüft auf erforderliche Code-Patterns\"\n required_fields:\n - id\n - check_type: \"required_pattern\"\n - patterns # Array von Patterns die vorhanden sein müssen\n - in_files\n optional_fields:\n - severity\n - description\n example:\n id: \"use-view-method\"\n check_type: \"required_pattern\"\n patterns:\n - \"$this->view(\"\n in_files: \"Controller\/*.php\"\n severity: \"info\"\n\n dependency_check:\n description: \"Prüft Import\/Use-Statements\"\n required_fields:\n - id\n - check_type: \"dependency_check\"\n - forbidden_imports # Array von verbotenen Imports\n - in_files\n optional_fields:\n - allowed_imports\n - severity\n example:\n id: \"no-infrastructure-in-domain\"\n check_type: \"dependency_check\"\n forbidden_imports:\n - \"Infrastructure\\\\\"\n in_files: \"Domain\/**\/*.php\"\n severity: \"critical\"\n\n structure_check:\n description: \"Prüft Datei\/Verzeichnis-Struktur\"\n required_fields:\n - id\n - check_type: \"structure_check\"\n - required_dirs # Verzeichnisse die existieren müssen\n optional_fields:\n - required_files\n - naming_convention\n - severity\n example:\n id: \"layer-structure\"\n check_type: \"structure_check\"\n required_dirs:\n - \"\/src\/Domain\"\n - \"\/src\/UseCases\"\n - \"\/src\/Infrastructure\"\n\n custom:\n description: \"Benutzerdefinierte Validierung via Script\"\n required_fields:\n - id\n - check_type: \"custom\"\n - script # Pfad zum Validierungs-Script\n optional_fields:\n - args\n - severity\n example:\n id: \"phpstan-level-7\"\n check_type: \"custom\"\n script: \"\/opt\/php-tools\/vendor\/bin\/phpstan\"\n args: [\"analyse\", \"--level=7\"]\n\n# =============================================================================\n# SEVERITY LEVELS\n# =============================================================================\nseverity_levels:\n critical:\n description: \"Blockiert Sync\/Deploy\"\n action: \"reject\"\n max_allowed: 0\n\n major:\n description: \"Erfordert Überarbeitung\"\n action: \"flag_for_revision\"\n max_allowed: 2\n\n minor:\n description: \"Wird protokolliert\"\n action: \"log_only\"\n max_allowed: 5\n\n warning:\n description: \"Hinweis ohne Konsequenz\"\n action: \"info_only\"\n max_allowed: null\n\n info:\n description: \"Reine Information\"\n action: \"none\"\n max_allowed: null\n\n# =============================================================================\n# BEISPIEL: VOLLSTÄNDIGER CONTRACT\n# =============================================================================\nexample_contract:\n contract:\n name: \"example-quality-standards\"\n version: \"1.0.0\"\n status: \"active\"\n description: \"Beispiel-Contract zur Demonstration des Meta-Schemas\"\n created: \"2025-12-22\"\n author: \"claude\"\n\n scope:\n paths:\n - \"\/src\/**\/*.php\"\n excludes:\n - \"\/src\/View\/**\"\n - \"\/tests\/**\"\n\n rules:\n - id: \"max-controller-loc\"\n check_type: \"line_count\"\n pattern: \"Controller\/*.php\"\n max_lines: 500\n severity: \"major\"\n description: \"Controller dürfen max 500 LOC haben\"\n\n - id: \"no-sql-in-controller\"\n check_type: \"forbidden_pattern\"\n patterns:\n - \"->query(\"\n - \"->prepare(\"\n in_files: \"Controller\/*.php\"\n severity: \"critical\"\n description: \"Controller dürfen kein direktes SQL enthalten\"\n\n - id: \"repository-pattern\"\n check_type: \"required_pattern\"\n patterns:\n - \"Repository\"\n in_files: \"Infrastructure\/Persistence\/*.php\"\n severity: \"info\"\n\n enforcement:\n on_violation: \"block\"\n hook: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/contract_enforcement.py\"\n\n pass_threshold:\n critical_max: 0\n major_max: 2\n minor_max: 5\n\n# =============================================================================\n# LEGACY-FORMAT-MAPPING\n# =============================================================================\n# Für die Migration bestehender Contracts\nlegacy_mappings:\n # Alte Formate und ihre Entsprechung im neuen Schema\n\n \"scope.applies_to_paths\":\n maps_to: \"contract.scope.paths\"\n\n \"contract.scope.includes\":\n maps_to: \"contract.scope.paths\"\n\n \"applicability.applies_to\":\n maps_to: \"contract.scope.paths\"\n\n \"applicability.scope\":\n maps_to: \"contract.scope.paths\"\n\n \"scope (string)\":\n maps_to: \"contract.scope.paths\"\n conversion: \"Wrap in array, add \/**\"\n\n# =============================================================================\n# VALIDIERUNG\n# =============================================================================\nvalidation:\n on_contract_create:\n - \"Schema-Compliance prüfen\"\n - \"Name-Uniqueness prüfen\"\n - \"YAML-Syntax validieren\"\n\n on_contract_update:\n - \"Schema-Compliance prüfen\"\n - \"Version-Increment prüfen\"\n - \"Breaking-Changes dokumentieren\"\n",
"structuredPatch": [],
"originalFile": null
}
}