File size: 2,768 Bytes
8a682b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
monitoring_patterns:
  missing_metrics:
    - pattern: "def\\s+(\\w+)\\s*\\([^)]*\\):"
      description: "Functions without performance metrics"
    - pattern: "except\\s+\\w+.*:"
      description: "Exception handling without logging"
    - pattern: "async\\s+def\\s+(\\w+)"
      description: "Async functions without timing metrics"
  basic_logging:
    - pattern: "print\\s*\\("
      description: "Using print instead of structured logging"
    - pattern: "logger\\.(info|debug)\\s*\\([^{]"
      description: "Logging without structured data"
  missing_telemetry:
    - pattern: "class\\s+\\w+Tool"
      description: "Tools without telemetry"
    - pattern: "@tool"
      description: "Tool decorators without metrics wrapper"

orchestration_patterns:
  sequential_execution:
    - pattern: "for\\s+tool\\s+in\\s+tools:"
      description: "Sequential tool execution"
    - pattern: "result\\s*=\\s*tool\\("
      description: "Direct tool calls without orchestration"
  missing_retry:
    - pattern: "except.*:\\s*\\n\\s*(return|raise)"
      description: "No retry logic for failures"
    - pattern: "requests\\.(get|post)"
      description: "HTTP calls without retry"
  no_circuit_breaker:
    - pattern: "external_api"
      description: "External API calls without circuit breaker"
    - pattern: "supabase\\."
      description: "Database calls without circuit breaker"

testing_patterns:
  missing_tests:
    - pattern: "class\\s+(\\w+)(?!Test)"
      description: "Classes without corresponding tests"
    - pattern: "def\\s+(\\w+)(?!test_)"
      description: "Functions without test coverage"
  weak_assertions:
    - pattern: "assert\\s+\\w+\\s*$"
      description: "Weak assertions without comparison"
    - pattern: "assert.*is not None"
      description: "Only checking for None"
  no_mocking:
    - pattern: "test_.*real.*api"
      description: "Tests using real APIs"
    - pattern: "test_.*without.*mock"
      description: "Tests without proper mocking"

agent_patterns:
  missing_tool_registration:
    - pattern: "class\\s+\\w+Tool"
      description: "Tools not registered with orchestrator"
    - pattern: "@tool"
      description: "Tool decorators without registration"
  langgraph_issues:
    - pattern: "langgraph"
      description: "LangGraph without proper state management"
    - pattern: "StateGraph"
      description: "StateGraph without error handling"
  fsm_issues:
    - pattern: "fsm"
      description: "FSM without error handling"
    - pattern: "state.*machine"
      description: "State machine without timeout handling"
  async_tool_calls:
    - pattern: "await\\s+tool"
      description: "Sequential async tool calls"
    - pattern: "async.*def.*tool"
      description: "Async tools without parallel execution"