{
"event": "PreToolUse",
"tool_name": "mcp__mcp-contracts__contracts_update",
"tool_input": {
"id": 9,
"yaml_content": "contract:\n name: code-quality-standards\n version: \"2.1\"\n status: active\n description: |\n Automatisch validierbare Code-Qualitätsstandards für das Campus-Projekt.\n Erstellt im Rahmen des Code-Refactoring vom 22.12.2025.\n Migriert auf Meta-Schema v1.0 am 22.12.2025.\n v2.1: DI-Prinzip hinzugefügt (25.12.2025)\n\n created: \"2025-12-22\"\n author: claude\n\n scope:\n paths:\n - \"\/src\/**\/*.php\"\n excludes:\n - \"\/src\/View\/**\"\n\n rules:\n - id: no-god-class\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 - \"new PDO\"\n - \"$this->db\"\n in_files: \"Controller\/*.php\"\n exclude_files:\n - \"Framework\/\"\n severity: critical\n description: \"Controller dürfen keine direkten SQL-Queries enthalten\"\n\n - id: no-html-in-controller\n check_type: forbidden_pattern\n patterns:\n - \"echo '<\"\n - 'echo \"<'\n in_files: \"Controller\/*.php\"\n severity: minor\n description: \"Controller dürfen kein HTML direkt ausgeben\"\n\n - id: use-notfound-method\n check_type: forbidden_pattern\n patterns:\n - \"http_response_code(404)\"\n in_files: \"Controller\/*.php\"\n severity: major\n description: \"Controller müssen notFound() statt http_response_code(404) nutzen\"\n\n - id: use-view-method\n check_type: required_pattern\n patterns:\n - \"$this->view(\"\n in_files: \"Controller\/*.php\"\n severity: info\n description: \"Controller sollten $this->view() für Rendering nutzen\"\n\n - id: typed-properties\n check_type: forbidden_pattern\n patterns:\n - \"private $\"\n - \"protected $\"\n - \"public $\"\n in_files: \"**\/*.php\"\n exclude_files:\n - \"View\/\"\n severity: minor\n description: \"Klassen-Properties sollten PHP 8+ Typen haben\"\n\n - id: no-static-facades\n check_type: forbidden_pattern\n patterns:\n - \"ModelConfig::\"\n - \"::getInstance()\"\n in_files: \"Controller\/*.php\"\n severity: critical\n description: \"Controller müssen DI nutzen, keine Static Facades oder Singletons\"\n\n - id: di-constructor-injection\n check_type: required_pattern\n patterns:\n - \"public function __construct(\"\n in_files: \"Controller\/*.php\"\n severity: major\n description: \"Controller müssen Dependencies per Constructor Injection erhalten\"\n\n principles:\n - id: DI-001\n name: \"Dependency Injection statt Static Facades\"\n description: |\n Alle Dependencies müssen per Constructor Injection bereitgestellt werden.\n Verboten sind:\n - Static Facades (z.B. ModelConfig::getAll())\n - Singleton-Pattern (::getInstance())\n - Service Locator Pattern\n Grund: Testbarkeit, explizite Dependencies, Container-kontrollierter Lifecycle.\n\n enforcement:\n on_violation: block\n hook: \"\/var\/www\/tools\/ki-protokoll\/claude-hook\/architecture_guard.py\"\n\n pass_threshold:\n critical_max: 0\n major_max: 2\n minor_max: 5\n\n metrics:\n target_phpstan_level: 7\n max_controller_loc: 500\n max_method_loc: 50\n",
"new_version": "2.1",
"change_description": "DI-Prinzip hinzugefügt: no-static-facades, di-constructor-injection Regeln + DI-001 Principle"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"contract\": {\n \"id\": 9,\n \"uuid\": \"e5192b8b-7dc0-4a9d-9c98-a3ba37b7f1bc\",\n \"name\": \"code-quality-standards\",\n \"version\": \"2.1\",\n \"status\": \"active\",\n \"yaml_content\": \"contract:\\n name: code-quality-standards\\n version: \\\"2.1\\\"\\n status: active\\n description: |\\n Automatisch validierbare Code-Qualitätsstandards für das Campus-Projekt.\\n Erstellt im Rahmen des Code-Refactoring vom 22.12.2025.\\n Migriert auf Meta-Schema v1.0 am 22.12.2025.\\n v2.1: DI-Prinzip hinzugefügt (25.12.2025)\\n\\n created: \\\"2025-12-22\\\"\\n author: claude\\n\\n scope:\\n paths:\\n - \\\"\/src\/**\/*.php\\\"\\n excludes:\\n - \\\"\/src\/View\/**\\\"\\n\\n rules:\\n - id: no-god-class\\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 - \\\"new PDO\\\"\\n - \\\"$this->db\\\"\\n in_files: \\\"Controller\/*.php\\\"\\n exclude_files:\\n - \\\"Framework\/\\\"\\n severity: critical\\n description: \\\"Controller dürfen keine direkten SQL-Queries enthalten\\\"\\n\\n - id: no-html-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"echo '<\\\"\\n - 'echo \\\"<'\\n in_files: \\\"Controller\/*.php\\\"\\n severity: minor\\n description: \\\"Controller dürfen kein HTML direkt ausgeben\\\"\\n\\n - id: use-notfound-method\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"http_response_code(404)\\\"\\n in_files: \\\"Controller\/*.php\\\"\\n severity: major\\n description: \\\"Controller müssen notFound() statt http_response_code(404) nutzen\\\"\\n\\n - id: use-view-method\\n check_type: required_pattern\\n patterns:\\n - \\\"$this->view(\\\"\\n in_files: \\\"Controller\/*.php\\\"\\n severity: info\\n description: \\\"Controller sollten $this->view() für Rendering nutzen\\\"\\n\\n - id: typed-properties\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"private $\\\"\\n - \\\"protected $\\\"\\n - \\\"public $\\\"\\n in_files: \\\"**\/*.php\\\"\\n exclude_files:\\n - \\\"View\/\\\"\\n severity: minor\\n description: \\\"Klassen-Properties sollten PHP 8+ Typen haben\\\"\\n\\n - id: no-static-facades\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"ModelConfig::\\\"\\n - \\\"::getInstance()\\\"\\n in_files: \\\"Controller\/*.php\\\"\\n severity: critical\\n description: \\\"Controller müssen DI nutzen, keine Static Facades oder Singletons\\\"\\n\\n - id: di-constructor-injection\\n check_type: required_pattern\\n patterns:\\n - \\\"public function __construct(\\\"\\n in_files: \\\"Controller\/*.php\\\"\\n severity: major\\n description: \\\"Controller müssen Dependencies per Constructor Injection erhalten\\\"\\n\\n principles:\\n - id: DI-001\\n name: \\\"Dependency Injection statt Static Facades\\\"\\n description: |\\n Alle Dependencies müssen per Constructor Injection bereitgestellt werden.\\n Verboten sind:\\n - Static Facades (z.B. ModelConfig::getAll())\\n - Singleton-Pattern (::getInstance())\\n - Service Locator Pattern\\n Grund: Testbarkeit, explizite Dependencies, Container-kontrollierter Lifecycle.\\n\\n enforcement:\\n on_violation: block\\n hook: \\\"\/var\/www\/tools\/ki-protokoll\/claude-hook\/architecture_guard.py\\\"\\n\\n pass_threshold:\\n critical_max: 0\\n major_max: 2\\n minor_max: 5\\n\\n metrics:\\n target_phpstan_level: 7\\n max_controller_loc: 500\\n max_method_loc: 50\\n\",\n \"scope_description\": \"Code Quality Standards für src\/ Verzeichnis\",\n \"created_at\": \"2025-12-22T02:20:35\",\n \"created_by\": \"claude\",\n \"updated_at\": \"2025-12-25T13:26:37\"\n },\n \"message\": \"Contract updated to v2.1\"\n}"
}
]
}