{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "python3 << 'PYEOF'\nimport os\nimport sys\nfrom pathlib import Path\n\n# Add quality module\nsys.path.insert(0, '\/var\/www\/tools\/ki-protokoll\/claude-hook')\n\nfrom quality.rules_failsafe import RULES as FAILSAFE_RULES\n\nSRC_PATH = \"\/var\/www\/dev.campus.systemische-tools.de\/src\"\n\nall_warnings = []\nfiles_checked = 0\n\nfor root, dirs, files in os.walk(SRC_PATH):\n # Skip vendor, tests\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 \n for rule in FAILSAFE_RULES:\n warnings = rule(file_path, content)\n for w in warnings:\n rel_path = file_path.replace(SRC_PATH + '\/', '')\n all_warnings.append(f\"{rel_path}: {w}\")\n\nprint(f\"=== W9.x Fail Safe Test ===\")\nprint(f\"Files checked: {files_checked}\")\nprint(f\"Warnings found: {len(all_warnings)}\")\nprint()\n\n# Group by rule\nfrom collections import Counter\nrule_counts = Counter()\nfor w in all_warnings:\n rule_id = w.split(': W')[1].split(':')[0] if ': W' in w else 'unknown'\n rule_counts[f\"W{rule_id}\"] += 1\n\nprint(\"By Rule:\")\nfor rule, count in sorted(rule_counts.items()):\n print(f\" {rule}: {count}\")\n\nprint()\nprint(\"Sample warnings (first 10):\")\nfor w in all_warnings[:10]:\n print(f\" - {w[:100]}...\")\nPYEOF",
"timeout": 60000,
"description": "Test W9.x Fail Safe rules on codebase"
}
}
{
"tool_response": {
"stdout": "=== W9.x Fail Safe Test ===\nFiles checked: 354\nWarnings found: 26\n\nBy Rule:\n W9.2: 11\n W9.3: 15\n\nSample warnings (first 10):\n - Controller\/ContentPipelineController.php: W9.2: Database operations without exception handling. Use ...\n - Controller\/ChatController.php: W9.2: Database operations without exception handling. Use try-catch o...\n - Controller\/CodeAnalysisController.php: W9.2: Database operations without exception handling. Use try...\n - Controller\/Api\/ChatController.php: W9.3: catch(Exception) without logging or rethrow. Errors should ...\n - Controller\/Api\/DocsController.php: W9.3: catch(Exception) without logging or rethrow. Errors should ...\n - Controller\/Api\/TaskController.php: W9.3: catch(Exception) without logging or rethrow. Errors should ...\n - Controller\/Api\/ExplorerController.php: W9.3: catch(Exception) without logging or rethrow. Errors sho...\n - Controller\/Api\/ContentController.php: W9.3: catch(Exception) without logging or rethrow. Errors shou...\n - UseCases\/Search\/EnhancedSearchUseCase.php: W9.2: Database operations without exception handling. Use...\n - UseCases\/Task\/UpdateTaskStatusUseCase.php: W9.2: Database operations without exception handling. Use...",
"stderr": "",
"interrupted": false,
"isImage": false
}
}