{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 99,\n \"parent_id\": 91,\n \"slug\": \"quality-gates\",\n \"path\": \"\/prozesse\/quality-gates\",\n \"title\": \"Quality Gates\",\n \"description\": \"Automatische Code-Qualitätsprüfung via Claude Code Hooks\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » \\n <a href=\\\"\/docs\/prozesse\\\">Prozesse<\/a> » \\n Quality Gates\\n<\/nav>\\n\\n<h1>Quality Gates<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-23 | <strong>Aktualisiert:<\/strong> 2025-12-28<\/p>\\n\\n<p>Automatische Code-Qualitätsprüfung via Claude Code Hooks mit Task-Integration.<\/p>\\n\\n<table>\\n <tr><th>Status<\/th><td>Aktiv<\/td><\/tr>\\n <tr><th>Implementiert<\/th><td>2025-12-23 (Phase 1+2+3: 2025-12-28)<\/td><\/tr>\\n <tr><th>Regeln<\/th><td><strong>31 BLOCK + 50 WARN = 81 total<\/strong><\/td><\/tr>\\n <tr><th>Task-Integration<\/th><td>Automatisch bei Violations<\/td><\/tr>\\n<\/table>\\n\\n<section>\\n <h2>Architektur<\/h2>\\n <pre><code>\/var\/www\/tools\/ki-protokoll\/claude-hook\/\\n├── hook_dispatcher.py ← Stabiler Einstiegspunkt\\n├── .env ← DB-Credentials\\n└── quality\/\\n ├── pre_rules.py ← BLOCK-Regeln Dispatcher\\n ├── post_rules.py ← WARN-Regeln Dispatcher\\n ├── pre_rules_guard.py ← P1.x SRP, P4.x OOP\\n ├── pre_rules_mvc.py ← P2.x MVC\\n ├── pre_rules_validation.py ← P3.x PSR\\n ├── pre_rules_layers.py ← P6.x SOLID\\n ├── pre_rules_htmx.py ← HTMX-C1-C5\\n ├── pre_rules_constants.py ← P7.x Magic Numbers\\n ├── pre_rules_deterministic.py ← P8.x Deterministic\\n ├── pre_rules_tests.py ← P14.x Test Isolation\\n ├── pre_rules_python.py ← PP1.x Python\\n ├── rules_quality.py ← W1.x-W6.x Quality\\n ├── rules_security.py ← Security Warnings\\n ├── rules_style.py ← Style Warnings\\n ├── rules_constants.py ← W7.x Magic Numbers\\n ├── rules_failfast.py ← W8.x Fail Fast\\n ├── rules_failsafe.py ← W9.x Fail Safe (Phase 3)\\n ├── rules_tradeoffs.py ← W10.x Trade-offs (Phase 3)\\n ├── rules_leastsurprise.py ← W15.x Least Surprise\\n ├── rules_testisolation.py ← W14.x Test Isolation\\n ├── phpmetrics_check.py ← W13.x Cohesion (Phase 3)\\n └── task_creator.py ← Violations → Tasks<\/code><\/pre>\\n<\/section>\\n\\n<section>\\n <h2>Prüfungen (15 Prinzipien)<\/h2>\\n <table>\\n <tr><th>#<\/th><th>Prüfung<\/th><th>Pre-Hook (BLOCK)<\/th><th>Post-Hook (WARN)<\/th><\/tr>\\n <tr><td>1<\/td><td>SRP + KISS<\/td><td>P1.1 Header, P1.2 Müllhalden<\/td><td>W1.1-W1.5 Metriken<\/td><\/tr>\\n <tr><td>2<\/td><td>MVC + CRUD<\/td><td>P2.1-P2.4 SQL, Trans, echo<\/td><td>W2.1-W2.2 Keywords<\/td><\/tr>\\n <tr><td>3<\/td><td>PSR + Types<\/td><td>P3.1-P3.4 strict, NS, Return<\/td><td>W3.1, W3.3 Params<\/td><\/tr>\\n <tr><td>4<\/td><td>OOP<\/td><td>P4.1 Public Property<\/td><td>W4.1-W4.4 Anämie<\/td><\/tr>\\n <tr><td>5<\/td><td>DRY<\/td><td>-<\/td><td>W5.1-W5.2 Duplikate<\/td><\/tr>\\n <tr><td>6<\/td><td>SOLID + DIP<\/td><td>P6.1-P6.2 Layer-Imports<\/td><td>W6.1-W6.2 Interface<\/td><\/tr>\\n <tr><td>7<\/td><td>Constants<\/td><td>P7.1-P7.3 Magic Numbers<\/td><td>W7.1-W7.5 Magic Strings<\/td><\/tr>\\n <tr><td>8<\/td><td>Deterministic<\/td><td>P8.1-P8.9 time, rand, global<\/td><td>W8.1-W8.5 Fail Fast<\/td><\/tr>\\n <tr><td>9<\/td><td><strong>Fail Safe<\/strong><\/td><td>-<\/td><td>W9.1-W9.6 try-finally, cleanup<\/td><\/tr>\\n <tr><td>10<\/td><td><strong>Trade-offs<\/strong><\/td><td>-<\/td><td>W10.1-W10.6 ADR, Factory, Cache<\/td><\/tr>\\n <tr><td>13<\/td><td><strong>Cohesion<\/strong><\/td><td>-<\/td><td>W13.1-W13.6 LCOM, Coupling<\/td><\/tr>\\n <tr><td>14<\/td><td>Test Isolation<\/td><td>P14.1-P14.6 Prod-DB, TRUNCATE<\/td><td>W14.1-W14.7 tearDown, sleep<\/td><\/tr>\\n <tr><td>15<\/td><td>Least Surprise<\/td><td>-<\/td><td>W15.1-W15.6 Getter Side Effects<\/td><\/tr>\\n <\/table>\\n <p><em>Fett = Neu in Phase 3 (2025-12-28)<\/em><\/p>\\n<\/section>\\n\\n<section>\\n <h2>Phase 3: Neue Regeln<\/h2>\\n \\n <h3>W9.x Fail Safe (WARN)<\/h3>\\n <ul>\\n <li><strong>W9.1:<\/strong> try-Block mit Ressourcen ohne finally<\/li>\\n <li><strong>W9.2:<\/strong> DB-Operationen ohne Exception-Handling<\/li>\\n <li><strong>W9.3:<\/strong> catch ohne Logging oder Rethrow<\/li>\\n <li><strong>W9.4:<\/strong> Ressourcen-Properties ohne __destruct<\/li>\\n <li><strong>W9.5:<\/strong> exit\/die ohne Shutdown-Handler<\/li>\\n <li><strong>W9.6:<\/strong> Connection ohne passenden Close<\/li>\\n <\/ul>\\n \\n <h3>W10.x Trade-off Documentation (WARN)<\/h3>\\n <ul>\\n <li><strong>W10.1:<\/strong> Factory Pattern ohne ADR-Referenz<\/li>\\n <li><strong>W10.2:<\/strong> Event-Architektur ohne Dokumentation<\/li>\\n <li><strong>W10.3:<\/strong> Caching ohne Invalidation-Strategie<\/li>\\n <li><strong>W10.4:<\/strong> 3+ Traits ohne Kompositions-Doku<\/li>\\n <li><strong>W10.5:<\/strong> External Service ohne Fehlerbehandlungs-Doku<\/li>\\n <li><strong>W10.6:<\/strong> @deprecated ohne Migrations-Hinweis<\/li>\\n <\/ul>\\n \\n <h3>W13.x Cohesion (via PHPMetrics)<\/h3>\\n <ul>\\n <li><strong>W13.1:<\/strong> LCOM > 4 (Low Cohesion)<\/li>\\n <li><strong>W13.2:<\/strong> Afferent Coupling > 10<\/li>\\n <li><strong>W13.3:<\/strong> Efferent Coupling > 15<\/li>\\n <li><strong>W13.4:<\/strong> Sehr stabile Klasse mit vielen Dependents<\/li>\\n <li><strong>W13.5:<\/strong> Methoden-Komplexität CCN > 15<\/li>\\n <li><strong>W13.6:<\/strong> WMC > 50 (Class too complex)<\/li>\\n <\/ul>\\n<\/section>\\n\\n<section>\\n <h2>PHPMetrics Integration<\/h2>\\n <pre><code># Installation\\n\/opt\/php-tools\/vendor\/bin\/phpmetrics\\n\\n# Analyse ausführen\\n\/opt\/php-tools\/vendor\/bin\/phpmetrics --report-json=\/tmp\/phpmetrics.json \/var\/www\/dev.campus.systemische-tools.de\/src\\n\\n# Cohesion-Check (Hook-Integration)\\npython3 \/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/phpmetrics_check.py<\/code><\/pre>\\n<\/section>\\n\\n<section>\\n <h2>ADR Template<\/h2>\\n <p>Für Trade-off Dokumentation: <code>\/var\/www\/dev.campus.systemische-tools.de\/docs\/templates\/adr-template.md<\/code><\/p>\\n<\/section>\\n\\n<section>\\n <h2>Prinzipien-Abdeckung<\/h2>\\n <table>\\n <tr><th>Kategorie<\/th><th>Anzahl<\/th><th>Anteil<\/th><\/tr>\\n <tr><td>✅ Gut abgedeckt (≥70%)<\/td><td>12\/15<\/td><td>80%<\/td><\/tr>\\n <tr><td>⚠️ Teilweise (30-69%)<\/td><td>2\/15<\/td><td>13%<\/td><\/tr>\\n <tr><td>❌ Nicht automatisierbar<\/td><td>1\/15<\/td><td>7%<\/td><\/tr>\\n <\/table>\\n<\/section>\\n\\n<section>\\n <h2>Detaillierte Dokumentation<\/h2>\\n <ul>\\n <li><a href=\\\"\/docs\/prozesse\/claude-hooks-prozess\\\">Claude Pre-\/Post-Hook Prozess<\/a><\/li>\\n <li><a href=\\\"\/docs\/prozesse\/claude-hooks-prozess\/hook-system-python-erweiterung\\\">Python-Erweiterung<\/a><\/li>\\n <li><code>\/var\/www\/dev.campus.systemische-tools.de\/docs\/codequality\/ist-soll-analyse.md<\/code><\/li>\\n <\/ul>\\n<\/section>\",\n \"status\": \"published\",\n \"sort_order\": 3,\n \"depth\": 1,\n \"created_at\": \"2025-12-23T07:47:51\",\n \"updated_at\": \"2025-12-28T14:25:00\"\n }\n}"
}
]
}