{
"event": "PreToolUse",
"tool_name": "mcp__mcp-db__db_select",
"tool_input": {
"query": "SELECT id, name, scope_description, yaml_content FROM contracts WHERE status = 'active' AND (name LIKE '%architecture%' OR name LIKE '%quality%' OR name LIKE '%controller%')",
"database": "ki_dev"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"status\": \"success\",\n \"data\": [\n {\n \"id\": 4,\n \"name\": \"js-browser-architecture-contract_v2\",\n \"scope_description\": \"\",\n \"yaml_content\": \"contract:\\n name: js-browser-architecture\\n version: \\\"2.0\\\"\\n status: active\\n description: |\\n Architektur-Contract für native Browser-JavaScript (ES Modules).\\n Migriert auf Meta-Schema v1.0 am 22.12.2025.\\n\\n created: \\\"2025-12-15\\\"\\n author: migration\\n\\n scope:\\n paths:\\n - \\\"\/public\/js\/**\/*.js\\\"\\n excludes:\\n - \\\"\/public\/js\/vendor\/**\\\"\\n\\n rules:\\n - id: no-var\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"var \\\"\\n in_files: \\\"**\/*.js\\\"\\n severity: major\\n description: \\\"var ist verboten - verwende const oder let\\\"\\n\\n - id: no-double-equals\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"==\\\"\\n - \\\"!=\\\"\\n in_files: \\\"**\/*.js\\\"\\n exclude_files:\\n - \\\"**\/vendor\/**\\\"\\n severity: major\\n description: \\\"== und != sind verboten - verwende === und !==\\\"\\n\\n - id: no-commonjs\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"require(\\\"\\n - \\\"module.exports\\\"\\n in_files: \\\"**\/*.js\\\"\\n severity: critical\\n description: \\\"CommonJS ist verboten - verwende ES Modules\\\"\\n\\n - id: no-eval\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"eval(\\\"\\n - \\\"new Function(\\\"\\n in_files: \\\"**\/*.js\\\"\\n severity: critical\\n description: \\\"eval und new Function sind verboten (Security)\\\"\\n\\n - id: no-global-variables\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"window.\\\"\\n - \\\"document.\\\"\\n in_files: \\\"**\/*.js\\\"\\n exclude_files:\\n - \\\"**\/adapters\/**\\\"\\n severity: major\\n description: \\\"Globale Zugriffe nur in Adapters erlaubt\\\"\\n\\n - id: es-modules\\n check_type: required_pattern\\n patterns:\\n - \\\"export\\\"\\n - \\\"import\\\"\\n in_files: \\\"**\/*.js\\\"\\n exclude_files:\\n - \\\"**\/vendor\/**\\\"\\n severity: info\\n description: \\\"ES Module Syntax verwenden\\\"\\n\\n enforcement:\\n on_violation: warn\\n\\n pass_threshold:\\n critical_max: 0\\n major_max: 2\\n minor_max: 5\\n\"\n },\n {\n \"id\": 5,\n \"name\": \"layered-architecture-pruefung_v1.0\",\n \"scope_description\": \"\",\n \"yaml_content\": \"contract:\\n name: layered-architecture\\n version: \\\"3.2\\\"\\n status: active\\n description: |\\n Validierung der Schichtenarchitektur (MVC in \/src, MVP in \/app).\\n v3.0: Erweitert um Supervision-Regeln (Controller als Transport-Layer).\\n v3.1: Pfade korrigiert (src\/ Prefix für in_files).\\n v3.2: Regex-Patterns escaped für korrekte Validierung.\\n\\n created: \\\"2025-12-20\\\"\\n updated: \\\"2025-12-22\\\"\\n author: system_generated_under_supervision\\n\\n scope:\\n paths:\\n - \\\"\/src\/**\/*.php\\\"\\n - \\\"\/app\/**\/*.php\\\"\\n excludes:\\n - \\\"\/tests\/**\\\"\\n - \\\"\/scripts\/**\\\"\\n - \\\"\/public\/**\\\"\\n - \\\"\/config\/**\\\"\\n - \\\"\/src\/View\/docs\/**\\\"\\n\\n rules:\\n # === CONTROLLER-REGELN (aus Supervision) ===\\n - id: no-pdo-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"private PDO\\\"\\n - \\\"->query\\\"\\n - \\\"->prepare\\\"\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Controller dürfen kein direktes PDO\/SQL verwenden\\\"\\n\\n - id: no-new-repository-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"new .*Repository\\\"\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Controller dürfen Repositories nicht selbst instanziieren\\\"\\n\\n - id: no-new-service-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"new .*Service\\\"\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: major\\n description: \\\"Controller dürfen Services nicht selbst instanziieren\\\"\\n\\n - id: no-sql-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"SELECT .* FROM\\\"\\n - \\\"INSERT INTO\\\"\\n - \\\"UPDATE .* SET\\\"\\n - \\\"DELETE FROM\\\"\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: critical\\n description: \\\"SQL-Statements gehören in Repositories\\\"\\n\\n - id: no-echo-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"echo '\\\"\\n - 'echo \\\"'\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: major\\n description: \\\"Controller dürfen kein direktes Output erzeugen - nutze view()\/partial()\/json()\\\"\\n\\n - id: no-parsedown-in-controller\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"new Parsedown\\\"\\n - \\\"Parsedown::\\\"\\n in_files: \\\"src\/Controller\/**\/*.php\\\"\\n severity: major\\n description: \\\"Markdown-Formatierung gehört in Formatter-Klassen\\\"\\n\\n # === DOMAIN-REGELN ===\\n - id: no-superglobals-in-domain\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"_GET\\\"\\n - \\\"_POST\\\"\\n - \\\"_SESSION\\\"\\n - \\\"_REQUEST\\\"\\n in_files: \\\"src\/Domain\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Domain darf keine Superglobals verwenden\\\"\\n\\n # === PRESENTER-REGELN ===\\n - id: no-sql-in-presenter\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"->query\\\"\\n - \\\"->prepare\\\"\\n - \\\"new PDO\\\"\\n in_files: \\\"app\/Presenter\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Presenter darf kein direktes SQL enthalten\\\"\\n\\n # === PLATZIERUNGS-REGELN ===\\n - id: presenter-in-app\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"class .* extends .*Presenter\\\"\\n in_files: \\\"src\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Presenter gehören nach \/app\/Presenter, nicht nach \/src\\\"\\n\\n - id: controller-not-in-app\\n check_type: forbidden_pattern\\n patterns:\\n - \\\"class .* extends .*Controller\\\"\\n in_files: \\\"app\/**\/*.php\\\"\\n severity: critical\\n description: \\\"Controller gehören nach \/src\/Controller, nicht nach \/app\\\"\\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 supervision_reference:\\n problems_addressed:\\n - \\\"#1: Controller greifen direkt auf PDO und SQL zu\\\"\\n - \\\"#3: Controller enthalten Geschäfts- und Workflow-Logik\\\"\\n - \\\"#5: Präsentationslogik im Controller\\\"\\n - \\\"#6: Inkonsistente Response-Strategien\\\"\\n - \\\"#8: Controller bauen Abhängigkeiten selbst\\\"\\n\"\n },\n {\n \"id\": 9,\n \"name\": \"code-quality-standards\",\n \"scope_description\": \"Code Quality Standards für src\/ Verzeichnis\",\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 Patter... [TRUNCATED-5f6b1ef1b7fef265]"
}
]
}