{
"event": "PreToolUse",
"tool_name": "mcp__mcp-tasks__tasks_create",
"tool_input": {
"title": "Lese claude.md vollständig und befolge: Post-Hook Quality System - H3 Prävention erweitern",
"description": "## Root-Cause Analyse\n\n### Problem\n28 Dateien mit `DatabaseFactory::`-Verstößen gegen Contract H3 existieren, obwohl Pre-Hook diese blockieren sollte.\n\n### Warum sind die Verstöße durchgerutscht?\n\n**1. Zeitliches Problem:**\nDie 28 Repository-Dateien wurden VOR Einführung des Hook-Systems erstellt (Pre-Hooks seit ~23.12.2025).\n\n**2. Edit-Hook Lücke:**\nBei `Edit`-Operationen erhält der Hook nur `new_string`, NICHT den vollständigen Datei-Inhalt.\n\nBeispiel:\n```\nClaude ändert eine Zeile in TaskRepository.php:\n- tool_name: \"Edit\"\n- old_string: \"return $result;\"\n- new_string: \"return $result ?? [];\"\n\nPre-Hook prüft nur \"return $result ?? [];\" → kein DatabaseFactory gefunden → ALLOW\nABER: Die Datei enthält weiterhin DatabaseFactory::dev() auf Zeile 18!\n```\n\n**3. Kein Full-Codebase-Scan:**\nEs existiert kein periodischer Scan, der alle bestehenden Dateien gegen die Regeln prüft.\n\n---\n\n## Tiefe Analyse der Hook-Architektur\n\n### Aktueller Datenfluss\n```\nWrite\/Edit → hook_dispatcher.py → pre_rules.py → check(file_path, content)\n ↓\n h3_database_factory_only_in_factory()\n ↓\n re.search(r\"DatabaseFactory::\", content)\n```\n\n### Problem: `content` bei Edit\n```python\n# hook_dispatcher.py:60-61\ncontent = tool_input.get(\"content\", \"\") # Bei Edit = new_string!\n\n# Bei Write: content = voller neuer Datei-Inhalt ✅\n# Bei Edit: content = nur new_string Fragment ❌\n```\n\n### Betroffene Stellen\n- `\/var\/www\/tools\/ki-protokoll\/claude-hook\/hook_dispatcher.py:60`\n- `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/pre_rules.py` (alle Regeln)\n\n---\n\n## Lösungsplan (4 Maßnahmen)\n\n### Maßnahme 1: Edit-Hook mit Full-File-Check\n**Aufwand:** MITTEL (30 min)\n\n```python\n# hook_dispatcher.py erweitern\nif tool_name == \"Edit\":\n file_path = tool_input.get(\"file_path\", \"\")\n old_string = tool_input.get(\"old_string\", \"\")\n new_string = tool_input.get(\"new_string\", \"\")\n \n # Bestehende Datei lesen\n try:\n with open(file_path, 'r') as f:\n full_content = f.read()\n # Simulation des Edits\n content = full_content.replace(old_string, new_string, 1)\n except:\n content = new_string # Fallback\n```\n\n**Risiko:** LOW - Nur Lesezugriff, kein Write\n\n---\n\n### Maßnahme 2: Periodischer Full-Codebase-Scan\n**Aufwand:** MITTEL (45 min)\n\nNeues Script: `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py`\n\n```python\n#!\/usr\/bin\/env python3\n\"\"\"\nScannt alle PHP-Dateien im Projekt gegen alle Regeln.\nErstellt Tasks für gefundene Violations.\n\"\"\"\nimport glob\nfrom pre_rules import RULES, allow\n\ndef scan_codebase(path=\"\/var\/www\/dev.campus.systemische-tools.de\/src\"):\n violations = []\n for php_file in glob.glob(f\"{path}\/**\/*.php\", recursive=True):\n with open(php_file, 'r') as f:\n content = f.read()\n result = check(php_file, content)\n if not result.get(\"allowed\", True):\n violations.append((php_file, result.get(\"message\")))\n return violations\n```\n\nCron-Job (täglich 03:00):\n```\n0 3 * * * \/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py --create-tasks\n```\n\n---\n\n### Maßnahme 3: Pre-Sync Validation\n**Aufwand:** NIEDRIG (15 min)\n\n`\/var\/www\/scripts\/sync-dev-prod.sh` erweitern:\n\n```bash\n# Vor rsync: Full-Codebase-Scan\necho \"=== Quality Pre-Check ===\"\n\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py --fail-on-violations\nif [ $? -ne 0 ]; then\n echo \"❌ Sync abgebrochen: Quality Violations gefunden\"\n exit 1\nfi\n```\n\n---\n\n### Maßnahme 4: Contract-Validierung erweitern\n**Aufwand:** MITTEL (30 min)\n\n`contracts_validate()` sollte auch H3 für alle Dateien im Scope prüfen:\n\n```yaml\n# architecture-gate-contract erweitern\nvalidation:\n scope: \"\/src\/**\/*.php\"\n rules_to_validate:\n - H3: DatabaseFactory nur in \/Factory\/\n```\n\n---\n\n## Implementierungsreihenfolge\n\n1. **Maßnahme 1 (Edit-Hook)** - Verhindert neue Violations durch Edits\n2. **Maßnahme 3 (Pre-Sync)** - Blockiert Deployment mit Violations\n3. **Maßnahme 2 (Full-Scan)** - Findet bestehende Violations automatisch\n4. **Maßnahme 4 (Contract)** - Integration in bestehendes Contract-System\n\n---\n\n## Validierung\n\n1. Test Edit-Hook: Edit einer Datei mit DatabaseFactory → muss blockiert werden\n2. Test Pre-Sync: `sync-dev-prod.sh` mit Violation → muss abbrechen\n3. Test Full-Scan: Findet alle 28 bekannten Violations\n4. Test Contract: `contracts_validate(name=\"architecture-gate-contract\")` meldet H3-Violations\n\n---\n\n## Dateien zu erstellen\/ändern\n\n| Datei | Änderung |\n|-------|----------|\n| `\/var\/www\/tools\/ki-protokoll\/claude-hook\/hook_dispatcher.py` | Edit-Full-File-Check |\n| `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py` | NEU |\n| `\/var\/www\/scripts\/sync-dev-prod.sh` | Pre-Sync Quality Check |\n| `\/etc\/cron.d\/quality-scan` | NEU (Cron-Job) |\n| Contract `architecture-gate-contract` | validation scope erweitern |\n\n**Geschätzter Gesamtaufwand:** ~2 Stunden",
"type": "ai_task"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"task\": {\n \"id\": 323,\n \"uuid\": \"285c03bc-438b-475b-a287-d837b424082b\",\n \"title\": \"Lese claude.md vollständig und befolge: Post-Hook Quality System - H3 Prävention erweitern\",\n \"description\": \"## Root-Cause Analyse\\n\\n### Problem\\n28 Dateien mit `DatabaseFactory::`-Verstößen gegen Contract H3 existieren, obwohl Pre-Hook diese blockieren sollte.\\n\\n### Warum sind die Verstöße durchgerutscht?\\n\\n**1. Zeitliches Problem:**\\nDie 28 Repository-Dateien wurden VOR Einführung des Hook-Systems erstellt (Pre-Hooks seit ~23.12.2025).\\n\\n**2. Edit-Hook Lücke:**\\nBei `Edit`-Operationen erhält der Hook nur `new_string`, NICHT den vollständigen Datei-Inhalt.\\n\\nBeispiel:\\n```\\nClaude ändert eine Zeile in TaskRepository.php:\\n- tool_name: \\\"Edit\\\"\\n- old_string: \\\"return $result;\\\"\\n- new_string: \\\"return $result ?? [];\\\"\\n\\nPre-Hook prüft nur \\\"return $result ?? [];\\\" → kein DatabaseFactory gefunden → ALLOW\\nABER: Die Datei enthält weiterhin DatabaseFactory::dev() auf Zeile 18!\\n```\\n\\n**3. Kein Full-Codebase-Scan:**\\nEs existiert kein periodischer Scan, der alle bestehenden Dateien gegen die Regeln prüft.\\n\\n---\\n\\n## Tiefe Analyse der Hook-Architektur\\n\\n### Aktueller Datenfluss\\n```\\nWrite\/Edit → hook_dispatcher.py → pre_rules.py → check(file_path, content)\\n ↓\\n h3_database_factory_only_in_factory()\\n ↓\\n re.search(r\\\"DatabaseFactory::\\\", content)\\n```\\n\\n### Problem: `content` bei Edit\\n```python\\n# hook_dispatcher.py:60-61\\ncontent = tool_input.get(\\\"content\\\", \\\"\\\") # Bei Edit = new_string!\\n\\n# Bei Write: content = voller neuer Datei-Inhalt ✅\\n# Bei Edit: content = nur new_string Fragment ❌\\n```\\n\\n### Betroffene Stellen\\n- `\/var\/www\/tools\/ki-protokoll\/claude-hook\/hook_dispatcher.py:60`\\n- `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/pre_rules.py` (alle Regeln)\\n\\n---\\n\\n## Lösungsplan (4 Maßnahmen)\\n\\n### Maßnahme 1: Edit-Hook mit Full-File-Check\\n**Aufwand:** MITTEL (30 min)\\n\\n```python\\n# hook_dispatcher.py erweitern\\nif tool_name == \\\"Edit\\\":\\n file_path = tool_input.get(\\\"file_path\\\", \\\"\\\")\\n old_string = tool_input.get(\\\"old_string\\\", \\\"\\\")\\n new_string = tool_input.get(\\\"new_string\\\", \\\"\\\")\\n \\n # Bestehende Datei lesen\\n try:\\n with open(file_path, 'r') as f:\\n full_content = f.read()\\n # Simulation des Edits\\n content = full_content.replace(old_string, new_string, 1)\\n except:\\n content = new_string # Fallback\\n```\\n\\n**Risiko:** LOW - Nur Lesezugriff, kein Write\\n\\n---\\n\\n### Maßnahme 2: Periodischer Full-Codebase-Scan\\n**Aufwand:** MITTEL (45 min)\\n\\nNeues Script: `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py`\\n\\n```python\\n#!\/usr\/bin\/env python3\\n\\\"\\\"\\\"\\nScannt alle PHP-Dateien im Projekt gegen alle Regeln.\\nErstellt Tasks für gefundene Violations.\\n\\\"\\\"\\\"\\nimport glob\\nfrom pre_rules import RULES, allow\\n\\ndef scan_codebase(path=\\\"\/var\/www\/dev.campus.systemische-tools.de\/src\\\"):\\n violations = []\\n for php_file in glob.glob(f\\\"{path}\/**\/*.php\\\", recursive=True):\\n with open(php_file, 'r') as f:\\n content = f.read()\\n result = check(php_file, content)\\n if not result.get(\\\"allowed\\\", True):\\n violations.append((php_file, result.get(\\\"message\\\")))\\n return violations\\n```\\n\\nCron-Job (täglich 03:00):\\n```\\n0 3 * * * \/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py --create-tasks\\n```\\n\\n---\\n\\n### Maßnahme 3: Pre-Sync Validation\\n**Aufwand:** NIEDRIG (15 min)\\n\\n`\/var\/www\/scripts\/sync-dev-prod.sh` erweitern:\\n\\n```bash\\n# Vor rsync: Full-Codebase-Scan\\necho \\\"=== Quality Pre-Check ===\\\"\\n\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py --fail-on-violations\\nif [ $? -ne 0 ]; then\\n echo \\\"❌ Sync abgebrochen: Quality Violations gefunden\\\"\\n exit 1\\nfi\\n```\\n\\n---\\n\\n### Maßnahme 4: Contract-Validierung erweitern\\n**Aufwand:** MITTEL (30 min)\\n\\n`contracts_validate()` sollte auch H3 für alle Dateien im Scope prüfen:\\n\\n```yaml\\n# architecture-gate-contract erweitern\\nvalidation:\\n scope: \\\"\/src\/**\/*.php\\\"\\n rules_to_validate:\\n - H3: DatabaseFactory nur in \/Factory\/\\n```\\n\\n---\\n\\n## Implementierungsreihenfolge\\n\\n1. **Maßnahme 1 (Edit-Hook)** - Verhindert neue Violations durch Edits\\n2. **Maßnahme 3 (Pre-Sync)** - Blockiert Deployment mit Violations\\n3. **Maßnahme 2 (Full-Scan)** - Findet bestehende Violations automatisch\\n4. **Maßnahme 4 (Contract)** - Integration in bestehendes Contract-System\\n\\n---\\n\\n## Validierung\\n\\n1. Test Edit-Hook: Edit einer Datei mit DatabaseFactory → muss blockiert werden\\n2. Test Pre-Sync: `sync-dev-prod.sh` mit Violation → muss abbrechen\\n3. Test Full-Scan: Findet alle 28 bekannten Violations\\n4. Test Contract: `contracts_validate(name=\\\"architecture-gate-contract\\\")` meldet H3-Violations\\n\\n---\\n\\n## Dateien zu erstellen\/ändern\\n\\n| Datei | Änderung |\\n|-------|----------|\\n| `\/var\/www\/tools\/ki-protokoll\/claude-hook\/hook_dispatcher.py` | Edit-Full-File-Check |\\n| `\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/full_scan.py` | NEU |\\n| `\/var\/www\/scripts\/sync-dev-prod.sh` | Pre-Sync Quality Check |\\n| `\/etc\/cron.d\/quality-scan` | NEU (Cron-Job) |\\n| Contract `architecture-gate-contract` | validation scope erweitern |\\n\\n**Geschätzter Gesamtaufwand:** ~2 Stunden\",\n \"type\": \"ai_task\",\n \"status\": \"pending\",\n \"created_by\": \"mcp-tasks\",\n \"created_by_type\": \"ai\",\n \"parent_task_id\": null,\n \"due_date\": null,\n \"created_at\": \"2025-12-25T10:25:27.046672\",\n \"updated_at\": \"2025-12-25T10:25:27.046674\",\n \"completed_at\": null,\n \"metadata\": {}\n },\n \"message\": \"Task #323 created\"\n}"
}
]
}