{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/PRE_RULES_REFACTORING.md",
"content": "# Pre-Rules Refactoring - Modulare Struktur\n\n## Übersicht\n\nDas monolithische `pre_rules.py` (438 LOC) wurde in spezialisierte Module aufgeteilt.\n\n## Neue Struktur\n\n### Module (alle < 150 LOC)\n\n| Modul | LOC | Regeln | Verantwortlichkeit |\n|-------|-----|--------|-------------------|\n| `pre_rules.py` | 46 | - | Orchestrator, importiert alle Module |\n| `pre_rules_guard.py` | 86 | 3 | SRP + KISS + OOP Basics (P1.x, P4.x) |\n| `pre_rules_mvc.py` | 113 | 4 | MVC-Trennung, Controller-Reinheit (P2.x) |\n| `pre_rules_validation.py` | 111 | 4 | PSR + Types (P3.x) |\n| `pre_rules_layers.py` | 122 | 6 | DIP + Architecture Guards (P6.x, H.x) |\n| `rule_base.py` | 150 | - | Shared: Allowlists, Helpers, Base Class |\n\n**Gesamt:** 628 LOC (vorher 438 LOC in einem File)\n\n### Regeln-Verteilung\n\n#### pre_rules_guard.py (3 Regeln)\n- `p1_1_responsibility_header` - @responsibility Header erforderlich\n- `p1_2_garbage_names` - Müllhalden-Namen blockieren\n- `p4_1_no_public_properties_in_domain` - Keine public Properties in Domain\n\n#### pre_rules_mvc.py (4 Regeln)\n- `p2_1_no_sql_in_controller` - Keine SQL in Controller\n- `p2_2_no_transactions_in_controller` - Keine Transaktionen in Controller\n- `p2_3_no_echo_in_controller` - Kein echo\/print in Controller\n- `p2_4_no_db_in_usecases` - Keine DB-Artefakte in UseCases\n\n#### pre_rules_validation.py (4 Regeln)\n- `p3_1_strict_types` - strict_types erforderlich\n- `p3_2_namespace_matches_path` - Namespace muss Pfad entsprechen\n- `p3_3_classname_matches_filename` - Klassenname muss Dateiname entsprechen\n- `p3_4_public_method_return_type` - Public Methods mit Return-Type\n\n#### pre_rules_layers.py (6 Regeln)\n- `p6_1_application_no_infrastructure_import` - DIP: Application → Infrastructure verboten\n- `p6_2_domain_no_application_import` - Domain → Application verboten\n- `h2_domain_no_infrastructure` - Domain → Infrastructure verboten\n- `h3_database_factory_only_in_factory` - DatabaseFactory nur in Factory\n- `h4_no_new_repository_in_controller` - new Repository in Controller verboten\n- `h5_no_new_infrastructure_in_controller` - new Infrastructure in Controller verboten\n\n## Vorteile der neuen Struktur\n\n1. **Übersichtlichkeit:** Jedes Modul < 150 LOC\n2. **Trennung:** Klare thematische Gruppierung\n3. **Wartbarkeit:** Änderungen isoliert in spezifischen Modulen\n4. **Konsistenz:** Analog zu post_rules-Struktur\n5. **Wiederverwendung:** Gemeinsame Basis in rule_base.py\n\n## Verwendung\n\n```python\nfrom quality import pre_rules\n\n# Check läuft automatisch über alle 17 Regeln\nresult = pre_rules.check(file_path, content)\n\nif not result[\"allowed\"]:\n print(result[\"message\"]) # QUALITY VIOLATION [Rule-ID]: Message\n```\n\n## Migration von post_rules analog\n\nDie gleiche Struktur sollte auch für `post_rules.py` (467 LOC) angewendet werden:\n- `post_rules_srp.py` - W1.x Regeln\n- `post_rules_mvc.py` - W2.x Regeln\n- `post_rules_types.py` - W3.x Regeln\n- `post_rules_oop.py` - W4.x Regeln\n- `post_rules_dry.py` - W5.x Regeln\n- `post_rules_solid.py` - W6.x + W7.x Regeln\n\n## Kompatibilität\n\n✅ Vollständig rückwärtskompatibel\n✅ Alle 17 Regeln funktional identisch\n✅ Keine Änderungen am Hook-System erforderlich\n"
}
}
{
"tool_response": {
"type": "create",
"filePath": "\/var\/www\/tools\/ki-protokoll\/claude-hook\/quality\/PRE_RULES_REFACTORING.md",
"content": "# Pre-Rules Refactoring - Modulare Struktur\n\n## Übersicht\n\nDas monolithische `pre_rules.py` (438 LOC) wurde in spezialisierte Module aufgeteilt.\n\n## Neue Struktur\n\n### Module (alle < 150 LOC)\n\n| Modul | LOC | Regeln | Verantwortlichkeit |\n|-------|-----|--------|-------------------|\n| `pre_rules.py` | 46 | - | Orchestrator, importiert alle Module |\n| `pre_rules_guard.py` | 86 | 3 | SRP + KISS + OOP Basics (P1.x, P4.x) |\n| `pre_rules_mvc.py` | 113 | 4 | MVC-Trennung, Controller-Reinheit (P2.x) |\n| `pre_rules_validation.py` | 111 | 4 | PSR + Types (P3.x) |\n| `pre_rules_layers.py` | 122 | 6 | DIP + Architecture Guards (P6.x, H.x) |\n| `rule_base.py` | 150 | - | Shared: Allowlists, Helpers, Base Class |\n\n**Gesamt:** 628 LOC (vorher 438 LOC in einem File)\n\n### Regeln-Verteilung\n\n#### pre_rules_guard.py (3 Regeln)\n- `p1_1_responsibility_header` - @responsibility Header erforderlich\n- `p1_2_garbage_names` - Müllhalden-Namen blockieren\n- `p4_1_no_public_properties_in_domain` - Keine public Properties in Domain\n\n#### pre_rules_mvc.py (4 Regeln)\n- `p2_1_no_sql_in_controller` - Keine SQL in Controller\n- `p2_2_no_transactions_in_controller` - Keine Transaktionen in Controller\n- `p2_3_no_echo_in_controller` - Kein echo\/print in Controller\n- `p2_4_no_db_in_usecases` - Keine DB-Artefakte in UseCases\n\n#### pre_rules_validation.py (4 Regeln)\n- `p3_1_strict_types` - strict_types erforderlich\n- `p3_2_namespace_matches_path` - Namespace muss Pfad entsprechen\n- `p3_3_classname_matches_filename` - Klassenname muss Dateiname entsprechen\n- `p3_4_public_method_return_type` - Public Methods mit Return-Type\n\n#### pre_rules_layers.py (6 Regeln)\n- `p6_1_application_no_infrastructure_import` - DIP: Application → Infrastructure verboten\n- `p6_2_domain_no_application_import` - Domain → Application verboten\n- `h2_domain_no_infrastructure` - Domain → Infrastructure verboten\n- `h3_database_factory_only_in_factory` - DatabaseFactory nur in Factory\n- `h4_no_new_repository_in_controller` - new Repository in Controller verboten\n- `h5_no_new_infrastructure_in_controller` - new Infrastructure in Controller verboten\n\n## Vorteile der neuen Struktur\n\n1. **Übersichtlichkeit:** Jedes Modul < 150 LOC\n2. **Trennung:** Klare thematische Gruppierung\n3. **Wartbarkeit:** Änderungen isoliert in spezifischen Modulen\n4. **Konsistenz:** Analog zu post_rules-Struktur\n5. **Wiederverwendung:** Gemeinsame Basis in rule_base.py\n\n## Verwendung\n\n```python\nfrom quality import pre_rules\n\n# Check läuft automatisch über alle 17 Regeln\nresult = pre_rules.check(file_path, content)\n\nif not result[\"allowed\"]:\n print(result[\"message\"]) # QUALITY VIOLATION [Rule-ID]: Message\n```\n\n## Migration von post_rules analog\n\nDie gleiche Struktur sollte auch für `post_rules.py` (467 LOC) angewendet werden:\n- `post_rules_srp.py` - W1.x Regeln\n- `post_rules_mvc.py` - W2.x Regeln\n- `post_rules_types.py` - W3.x Regeln\n- `post_rules_oop.py` - W4.x Regeln\n- `post_rules_dry.py` - W5.x Regeln\n- `post_rules_solid.py` - W6.x + W7.x Regeln\n\n## Kompatibilität\n\n✅ Vollständig rückwärtskompatibel\n✅ Alle 17 Regeln funktional identisch\n✅ Keine Änderungen am Hook-System erforderlich\n",
"structuredPatch": [],
"originalFile": null
}
}