# redup/duplication | 9 groups | 137f 20128L | 2026-03-23

SUMMARY:
  files_scanned: 137
  total_lines:   20128
  dup_groups:    9
  dup_fragments: 41
  saved_lines:   709
  scan_ms:       1967

DUPLICATES[9] (ranked by impact):
  [1544e6f8bbf22868] !! EXAC  run_validation  L=36 N=7 saved=216 sim=1.00
      validate_tasks_panel_refactoring.py:93-128  (run_validation)
      validate_dispatch_table_refactoring.py:86-119  (run_validation)
      validate_refactoring.py:100-135  (run_validation)
      validate_tools_panel_refactoring.py:100-135  (run_validation)
      validate_tool_health_refactoring.py:86-119  (run_validation)
      utils/validation_common.py:147-182  (run_validation)
      validate_human_task_refactoring.py:100-135  (run_validation)
  [92dee6fd3e4a9185] !! EXAC  validate_jsx_component  L=27 N=7 saved=162 sim=1.00
      validate_tasks_panel_refactoring.py:8-34  (validate_jsx_component)
      validate_dispatch_table_refactoring.py:8-32  (validate_jsx_component)
      validate_refactoring.py:8-34  (validate_jsx_component)
      validate_tools_panel_refactoring.py:8-34  (validate_jsx_component)
      validate_tool_health_refactoring.py:8-32  (validate_jsx_component)
      utils/validation_common.py:7-33  (validate_jsx_component)
      validate_human_task_refactoring.py:8-34  (validate_jsx_component)
  [531063de676a0061] !! EXAC  count_complexity  L=20 N=7 saved=120 sim=1.00
      validate_tasks_panel_refactoring.py:37-56  (count_complexity)
      validate_dispatch_table_refactoring.py:35-52  (count_complexity)
      validate_refactoring.py:37-56  (count_complexity)
      validate_tools_panel_refactoring.py:37-56  (count_complexity)
      validate_tool_health_refactoring.py:35-52  (count_complexity)
      utils/validation_common.py:36-55  (count_complexity)
      validate_human_task_refactoring.py:37-56  (count_complexity)
  [853f8475e813e5f1] ! EXAC  print_complexity_analysis  L=23 N=4 saved=69 sim=1.00
      validate_refactoring.py:65-87  (print_complexity_analysis)
      validate_tools_panel_refactoring.py:65-87  (print_complexity_analysis)
      utils/validation_common.py:84-106  (print_complexity_analysis)
      validate_human_task_refactoring.py:65-87  (print_complexity_analysis)
  [8a65731b8cd8801f] ! EXAC  print_summary_footer  L=8 N=7 saved=48 sim=1.00
      validate_tasks_panel_refactoring.py:83-90  (print_summary_footer)
      validate_dispatch_table_refactoring.py:77-83  (print_summary_footer)
      validate_refactoring.py:90-97  (print_summary_footer)
      validate_tools_panel_refactoring.py:90-97  (print_summary_footer)
      validate_tool_health_refactoring.py:77-83  (print_summary_footer)
      utils/validation_common.py:137-144  (print_summary_footer)
      validate_human_task_refactoring.py:90-97  (print_summary_footer)
  [a3dcfd6f5d2df45f] ! EXAC  print_complexity_analysis  L=16 N=3 saved=32 sim=1.00
      validate_tasks_panel_refactoring.py:65-80  (print_complexity_analysis)
      validate_dispatch_table_refactoring.py:60-74  (print_complexity_analysis)
      validate_tool_health_refactoring.py:60-74  (print_complexity_analysis)
  [41f9fc71232bf02b]   STRU  main  L=26 N=2 saved=26 sim=1.00
      validate_tasks_panel_refactoring.py:131-156  (main)
      validate_human_task_refactoring.py:138-164  (main)
  [2715cc2e8783ee18]   STRU  main  L=25 N=2 saved=25 sim=1.00
      validate_dispatch_table_refactoring.py:122-146  (main)
      validate_tool_health_refactoring.py:122-146  (main)
  [7b6715420dcc0c00]   STRU  cmd_sessions_list  L=11 N=2 saved=11 sim=1.00
      src/proxym/cli/context.py:74-84  (cmd_sessions_list)
      src/proxym/cli/context.py:87-97  (cmd_mcp_servers)

REFACTOR[9] (ranked by priority):
  [1] ◐ extract_function   → utils/run_validation.py
      WHY: 7 occurrences of 36-line block across 7 files — saves 216 lines
      FILES: utils/validation_common.py, validate_dispatch_table_refactoring.py, validate_human_task_refactoring.py, validate_refactoring.py, validate_tasks_panel_refactoring.py +2 more
  [2] ○ extract_function   → utils/validate_jsx_component.py
      WHY: 7 occurrences of 27-line block across 7 files — saves 162 lines
      FILES: utils/validation_common.py, validate_dispatch_table_refactoring.py, validate_human_task_refactoring.py, validate_refactoring.py, validate_tasks_panel_refactoring.py +2 more
  [3] ○ extract_function   → utils/count_complexity.py
      WHY: 7 occurrences of 20-line block across 7 files — saves 120 lines
      FILES: utils/validation_common.py, validate_dispatch_table_refactoring.py, validate_human_task_refactoring.py, validate_refactoring.py, validate_tasks_panel_refactoring.py +2 more
  [4] ○ extract_function   → utils/print_complexity_analysis.py
      WHY: 4 occurrences of 23-line block across 4 files — saves 69 lines
      FILES: utils/validation_common.py, validate_human_task_refactoring.py, validate_refactoring.py, validate_tools_panel_refactoring.py
  [5] ○ extract_function   → utils/print_summary_footer.py
      WHY: 7 occurrences of 8-line block across 7 files — saves 48 lines
      FILES: utils/validation_common.py, validate_dispatch_table_refactoring.py, validate_human_task_refactoring.py, validate_refactoring.py, validate_tasks_panel_refactoring.py +2 more
  [6] ○ extract_function   → utils/print_complexity_analysis.py
      WHY: 3 occurrences of 16-line block across 3 files — saves 32 lines
      FILES: validate_dispatch_table_refactoring.py, validate_tasks_panel_refactoring.py, validate_tool_health_refactoring.py
  [7] ○ extract_function   → utils/main.py
      WHY: 2 occurrences of 26-line block across 2 files — saves 26 lines
      FILES: validate_human_task_refactoring.py, validate_tasks_panel_refactoring.py
  [8] ○ extract_function   → utils/main.py
      WHY: 2 occurrences of 25-line block across 2 files — saves 25 lines
      FILES: validate_dispatch_table_refactoring.py, validate_tool_health_refactoring.py
  [9] ○ extract_function   → src/proxym/cli/utils/cmd_sessions_list.py
      WHY: 2 occurrences of 11-line block across 1 files — saves 11 lines
      FILES: src/proxym/cli/context.py

METRICS-TARGET:
  dup_groups:  9 → 0
  saved_lines: 709 lines recoverable
