{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "\/opt\/mcp-servers\/mcp-contracts\/venv\/bin\/python -c \"\nimport sys\nimport yaml\nsys.path.insert(0, '\/opt\/mcp-servers\/mcp-contracts')\nfrom validators.contract_validator import ContractValidator\n\ncontract_yaml = '''\ncontract:\n name: code-quality-standards\n version: \\\"2.0\\\"\n status: active\n scope:\n paths:\n - \\\"\/src\/**\/*.php\\\"\n excludes:\n - \\\"\/src\/View\/**\\\"\n rules:\n - id: no-god-class\n check_type: line_count\n pattern: \\\"Controller\/*.php\\\"\n max_lines: 500\n severity: major\n description: \\\"Controller dürfen max 500 LOC haben\\\"\n - id: no-sql-in-controller\n check_type: forbidden_pattern\n patterns:\n - \\\"->query(\\\"\n - \\\"->prepare(\\\"\n - \\\"new PDO\\\"\n in_files: \\\"Controller\/*.php\\\"\n severity: critical\n description: \\\"Controller dürfen keine direkten SQL-Queries enthalten\\\"\n'''\n\ncontract_data = yaml.safe_load(contract_yaml)\nvalidator = ContractValidator(contract_data)\n\nprint('Testing _get_check_paths...')\npaths = validator._get_check_paths()\nprint(f'Found {len(paths)} paths')\nfor p in paths[:5]:\n print(f' {p}')\n\nprint()\nprint('Running full validation...')\nresult = validator.validate()\nprint(f'Outcome: {result.outcome}')\nprint(f'Critical: {result.critical}, Major: {result.major}, Minor: {result.minor}')\nprint(f'Findings: {len(result.findings)}')\nfor f in result.findings[:10]:\n print(f' - {f}')\n\"",
"description": "Test validator with contract data"
}
}
{
"tool_response": {
"stdout": "Testing _get_check_paths...\nFound 92 paths\n \/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/AI\/ChatService.php\n \/var\/www\/dev.campus.systemische-tools.de\/src\/Controller\/ConfigController.php\n \/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/TaskAssignmentRepository.php\n \/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/TaskCommentRepository.php\n \/var\/www\/dev.campus.systemische-tools.de\/src\/Domain\/Entity\/Task.php\n\nRunning full validation...\nOutcome: revision_required\nCritical: 0, Major: 4, Minor: 0\nFindings: 4\n - {'rule_id': 'no-god-class', 'factor': 'line_count', 'file': '\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/SystemExplorerRepository.php', 'message': 'File has 640 lines (max: 500)', 'actual': 640, 'limit': 500, 'type': 'major'}\n - {'rule_id': 'no-god-class', 'factor': 'line_count', 'file': '\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Docs\/ChunkSyncService.php', 'message': 'File has 551 lines (max: 500)', 'actual': 551, 'limit': 500, 'type': 'major'}\n - {'rule_id': 'no-god-class', 'factor': 'line_count', 'file': '\/var\/www\/dev.campus.systemische-tools.de\/src\/Controller\/ChatController.php', 'message': 'File has 711 lines (max: 500)', 'actual': 711, 'limit': 500, 'type': 'major'}\n - {'rule_id': 'no-god-class', 'factor': 'line_count', 'file': '\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/SemanticExplorerRepository.php', 'message': 'File has 797 lines (max: 500)', 'actual': 797, 'limit': 500, 'type': 'major'}",
"stderr": "",
"interrupted": false,
"isImage": false
}
}