Protokoll #28903

ID28903
Zeitstempel2025-12-28 22:34:12.527483
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens847 (Input: 671, Output: 176)
Dauer2532174 ms
Request-Zeit2025-12-28 22:34:12.527483
Response-Zeit2025-12-28 23:16:24.701664

Request

{
    "event": "PreToolUse",
    "tool_name": "Bash",
    "tool_input": {
        "command": "python3 << 'PYEOF'\nimport os\nimport sys\nfrom collections import Counter\n\nsys.path.insert(0, '\/var\/www\/tools\/ki-protokoll\/claude-hook')\n\nfrom quality import post_rules\n\nSRC_PATH = \"\/var\/www\/dev.campus.systemische-tools.de\/src\"\n\nrule_counts = Counter()\ntotal_warnings = 0\nfiles_checked = 0\n\nfor root, dirs, files in os.walk(SRC_PATH):\n    dirs[:] = [d for d in dirs if d not in ['vendor', 'tests', 'Test']]\n    \n    for file in files:\n        if not file.endswith('.php'):\n            continue\n            \n        file_path = os.path.join(root, file)\n        try:\n            with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:\n                content = f.read()\n        except Exception:\n            continue\n            \n        files_checked += 1\n        result = post_rules.check(file_path, content)\n        \n        for w in result['warnings']:\n            total_warnings += 1\n            # Extract rule ID (e.g., W1.1, W9.2)\n            if ': ' in w:\n                rule_id = w.split(':')[0]\n                rule_counts[rule_id] += 1\n\nprint(\"=\" * 60)\nprint(\"VOLLSTÄNDIGER POST-HOOK TEST (50 Regeln)\")\nprint(\"=\" * 60)\nprint(f\"Dateien geprüft: {files_checked}\")\nprint(f\"Warnungen gesamt: {total_warnings}\")\nprint()\nprint(\"Nach Regel-Kategorie:\")\n\n# Group by category\ncategories = {}\nfor rule, count in rule_counts.items():\n    if rule.startswith('W1'):\n        cat = 'W1.x SRP\/Metriken'\n    elif rule.startswith('W2'):\n        cat = 'W2.x MVC'\n    elif rule.startswith('W3'):\n        cat = 'W3.x Types'\n    elif rule.startswith('W4'):\n        cat = 'W4.x OOP'\n    elif rule.startswith('W5'):\n        cat = 'W5.x DRY'\n    elif rule.startswith('W6'):\n        cat = 'W6.x SOLID'\n    elif rule.startswith('W7'):\n        cat = 'W7.x Constants'\n    elif rule.startswith('W8'):\n        cat = 'W8.x Fail Fast'\n    elif rule.startswith('W9'):\n        cat = 'W9.x Fail Safe (Phase 3)'\n    elif rule.startswith('W10'):\n        cat = 'W10.x Trade-offs (Phase 3)'\n    elif rule.startswith('W14'):\n        cat = 'W14.x Test Isolation'\n    elif rule.startswith('W15'):\n        cat = 'W15.x Least Surprise'\n    else:\n        cat = 'Andere'\n    \n    if cat not in categories:\n        categories[cat] = 0\n    categories[cat] += count\n\nfor cat in sorted(categories.keys()):\n    print(f\"  {cat}: {categories[cat]}\")\n\nprint()\nprint(\"Top 15 Regeln:\")\nfor rule, count in rule_counts.most_common(15):\n    print(f\"  {rule}: {count}\")\nPYEOF",
        "timeout": 120000,
        "description": "Full post-hook test on codebase"
    }
}

Response

{
    "tool_response": {
        "stdout": "============================================================\nVOLLSTÄNDIGER POST-HOOK TEST (50 Regeln)\n============================================================\nDateien geprüft: 354\nWarnungen gesamt: 531\n\nNach Regel-Kategorie:\n  W1.x SRP\/Metriken: 258\n  W2.x MVC: 5\n  W3.x Types: 3\n  W4.x OOP: 52\n  W5.x DRY: 68\n  W6.x SOLID: 23\n  W7.x Constants: 68\n  W8.x Fail Fast: 28\n  W9.x Fail Safe (Phase 3): 26\n\nTop 15 Regeln:\n  W15.3: 80\n  W7.1: 65\n  W1.1: 46\n  W1.2: 44\n  W15.1: 42\n  W5.2: 40\n  W1.3: 29\n  W5.1: 28\n  W6.1: 23\n  W4.3: 20\n  W8.4: 17\n  W9.3: 15\n  W4.1: 15\n  W4.2: 15\n  W9.2: 11",
        "stderr": "",
        "interrupted": false,
        "isImage": false
    }
}
← Vorheriger Zur Liste Nächster →