# redup/duplication | 3 groups | 138f 20667L | 2026-03-24

SUMMARY:
  files_scanned: 138
  total_lines:   20667
  dup_groups:    3
  dup_fragments: 8
  saved_lines:   73
  scan_ms:       2855

DUPLICATES[3] (ranked by impact):
  [82b21036da0e13cb] ! STRU  main  L=16 N=4 saved=48 sim=1.00
      validate_dispatch_table_refactoring.py:21-36  (main)
      validate_tool_health_refactoring.py:21-36  (main)
      validate_tasks_panel_refactoring.py:21-36  (main)
      validate_human_task_refactoring.py:21-36  (main)
  [ca9a591540f3f5c6]   STRU  main  L=15 N=2 saved=15 sim=1.00
      validate_refactoring.py:20-34  (main)
      validate_tools_panel_refactoring.py:21-35  (main)
  [7b6715420dcc0c00]   STRU  cmd_sessions_list  L=10 N=2 saved=10 sim=1.00
      src/proxym/cli/utils/cmd_sessions_list.py:25-34  (cmd_sessions_list)
      src/proxym/cli/utils/cmd_sessions_list.py:37-46  (cmd_mcp_servers)

REFACTOR[3] (ranked by priority):
  [1] ○ extract_function   → utils/main.py
      WHY: 4 occurrences of 16-line block across 4 files — saves 48 lines
      FILES: validate_dispatch_table_refactoring.py, validate_human_task_refactoring.py, validate_tasks_panel_refactoring.py, validate_tool_health_refactoring.py
  [2] ○ extract_function   → utils/main.py
      WHY: 2 occurrences of 15-line block across 2 files — saves 15 lines
      FILES: validate_refactoring.py, validate_tools_panel_refactoring.py
  [3] ○ extract_function   → src/proxym/cli/utils/utils/cmd_sessions_list.py
      WHY: 2 occurrences of 10-line block across 1 files — saves 10 lines
      FILES: src/proxym/cli/utils/cmd_sessions_list.py

METRICS-TARGET:
  dup_groups:  3 → 0
  saved_lines: 73 lines recoverable
