version: '1'
project:
  name: proxy
  repo: /home/tom/github/wronai/proxy
  language: python
  analyzed_at: '2026-03-21T20:11:41Z'
  tool: code2llm
  stats:
    files: 38
    lines: 11178
    functions: 346
    classes: 45
health:
  cc_avg: 3.5
  critical_count: 14
  critical_limit: 10
  duplicates: 0
  cycles: 1
  alerts:
  - type: high_fan_out
    target: main
    value: 26
    limit: 10
    severity: critical
  - type: high_fan_out
    target: chat_completions
    value: 22
    limit: 10
    severity: critical
  - type: cc_exceeded
    target: table
    value: 21
    limit: 15
    severity: error
  - type: cc_exceeded
    target: table_body_rows
    value: 21
    limit: 15
    severity: error
  - type: cc_exceeded
    target: no_rows
    value: 21
    limit: 15
    severity: error
  - type: cc_exceeded
    target: footer
    value: 21
    limit: 15
    severity: error
  - type: cc_exceeded
    target: ratio_columns
    value: 21
    limit: 15
    severity: error
  - type: cc_exceeded
    target: filter_handler
    value: 21
    limit: 15
    severity: error
  - type: high_fan_out
    target: useDashboardData
    value: 18
    limit: 10
    severity: error
  - type: high_fan_out
    target: detect_firefox_profiles
    value: 17
    limit: 10
    severity: error
  - type: high_fan_out
    target: _detect_chromium_family
    value: 17
    limit: 10
    severity: error
  - type: high_fan_out
    target: analyze_request
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: sortColumn
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: table
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: table_body_rows
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: no_rows
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: footer
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: ratio_columns
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: filter_handler
    value: 15
    limit: 10
    severity: error
  - type: high_fan_out
    target: cmd_status
    value: 14
    limit: 10
    severity: warning
modules:
- path: htmlcov/coverage_html_cb_dd2e7eb5.js
  lines: 735
  classes: 0
  methods: 65
  cc_max: 21
  inbound_deps: 0
  exports:
  - name: debounce
    type: function
    cc: 1
  - name: timeoutId
    type: function
    cc: 1
  - name: checkVisible
    type: function
    cc: 2
  - name: rect
    type: function
    cc: 1
  - name: viewBottom
    type: function
    cc: 1
  - name: viewTop
    type: function
    cc: 1
  - name: on_click
    type: function
    cc: 2
  - name: elt
    type: function
    cc: 2
  - name: getCellValue
    type: function
    cc: 6
  - name: cell
    type: function
    cc: 2
  - name: child
    type: function
    cc: 2
  - name: rowComparator
    type: function
    cc: 3
  - name: valueA
    type: function
    cc: 3
  - name: valueB
    type: function
    cc: 3
  - name: sortColumn
    type: function
    cc: 11
    fan_out: 15
  - name: currentSortOrder
    type: function
    cc: 3
  - name: current_direction
    type: function
    cc: 2
  - name: stored_list
    type: function
    cc: 2
  - name: saved_filter_value
    type: function
    cc: 2
  - name: saved_hide100_value
    type: function
    cc: 2
  - name: table
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: table_body_rows
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: no_rows
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: footer
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: ratio_columns
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: filter_handler
    type: function
    cc: 21
    flag: split
    fan_out: 15
  - name: totals
    type: function
    cc: 2
  - name: text
    type: function
    cc: 12
  - name: casefold
    type: function
    cc: 12
  - name: hide100
    type: function
    cc: 12
  - name: show
    type: function
    cc: 5
  - name: celltext
    type: function
    cc: 2
  - name: places
    type: function
    cc: 1
  - name: by_region
    type: function
    cc: 2
  - name: sorted_by_region
    type: function
    cc: 2
  - name: frag
    type: function
    cc: 3
  - name: btn
    type: function
    cc: 3
  - name: category
    type: function
    cc: 2
  - name: helpCheck
    type: function
    cc: 1
  - name: classes
    type: function
    cc: 2
  - name: match
    type: function
    cc: 2
  - name: c
    type: function
    cc: 2
  - name: probe
    type: function
    cc: 4
  - name: begin
    type: function
    cc: 2
  - name: next_indicator
    type: function
    cc: 2
  - name: probe_line
    type: function
    cc: 2
  - name: chunk_indicator
    type: function
    cc: 4
  - name: end
    type: function
    cc: 1
  - name: prev_indicator
    type: function
    cc: 3
  - name: line
    type: function
    cc: 2
  - name: the_indicator
    type: function
    cc: 8
  - name: indicator
    type: function
    cc: 4
  - name: element
    type: function
    cc: 1
  - name: temp_scroll_marker
    type: function
    cc: 2
  - name: marker_scale
    type: function
    cc: 2
  - name: line_height
    type: function
    cc: 2
  - name: scroll_marker
    type: function
    cc: 2
  - name: line_top
    type: function
    cc: 2
  - name: line_number
    type: function
    cc: 2
  - name: header
    type: function
    cc: 2
  - name: header_bottom
    type: function
    cc: 2
  - name: updateHeader
    type: function
    cc: 2
  - name: ctxs
    type: function
    cc: 3
  - name: ctxs_text
    type: function
    cc: 2
  - name: width
    type: function
    cc: 2
- path: src/proxym/dashboard/panel.jsx
  lines: 347
  classes: 0
  methods: 26
  cc_max: 13
  inbound_deps: 0
  exports:
  - name: useState
    type: function
    cc: 2
  - name: useEffect
    type: function
    cc: 2
  - name: useCallback
    type: function
    cc: 2
  - name: StatusBadge
    type: function
    cc: 2
  - name: CostBar
    type: function
    cc: 4
  - name: pct
    type: function
    cc: 1
  - name: color
    type: function
    cc: 1
  - name: Card
    type: function
    cc: 2
  - name: ModelsTable
    type: function
    cc: 6
  - name: AccountRow
    type: function
    cc: 11
  - name: a
    type: function
    cc: 1
  - name: NewAccountForm
    type: function
    cc: 1
  - name: handleSubmit
    type: function
    cc: 1
  - name: AccountsPanel
    type: function
    cc: 5
  - name: handleCreate
    type: function
    cc: 1
  - name: VMCard
    type: function
    cc: 6
  - name: actions
    type: function
    cc: 1
  - name: VMsPanel
    type: function
    cc: 4
  - name: handleAction
    type: function
    cc: 1
  - name: DashboardHeader
    type: function
    cc: 3
  - name: TabNav
    type: function
    cc: 2
  - name: CostSummary
    type: function
    cc: 6
  - name: OverviewTab
    type: function
    cc: 13
  - name: Dashboard
    type: function
    cc: 5
  - name: data
    type: function
    cc: 1
  - name: root
    type: function
    cc: 1
- path: src/proxym/api/completions.py
  lines: 293
  classes: 0
  methods: 10
  cc_max: 12
  inbound_deps: 0
  exports:
  - name: chat_completions
    type: function
    cc: 12
    fan_out: 22
- path: src/proxym/accounts/__init__.py
  lines: 346
  classes: 8
  methods: 20
  cc_max: 10
  inbound_deps: 0
  exports:
  - name: ProviderType
    type: class
    cc_avg: 0.0
  - name: ToolType
    type: class
    cc_avg: 0.0
  - name: AccountCredentials
    type: class
    cc_avg: 5.0
  - name: UsageMetrics
    type: class
    cc_avg: 2.0
  - name: AccountLimits
    type: class
    cc_avg: 4.5
  - name: ToolBinding
    type: class
    cc_avg: 0.0
  - name: Account
    type: class
    cc_avg: 3.0
  - name: AccountManager
    type: class
    cc_avg: 3.2
    methods:
    - name: get_cost_summary
      cc: 10
- path: src/proxym/cache/__init__.py
  lines: 333
  classes: 3
  methods: 10
  cc_max: 9
  inbound_deps: 0
  exports:
  - name: FileSnapshot
    type: class
    cc_avg: 2.0
  - name: DeltaPayload
    type: class
    cc_avg: 0.0
  - name: DeltaBuffer
    type: class
    cc_avg: 4.7
    methods:
    - name: compute_delta
      cc: 5
      fan_out: 11
- path: src/proxym/cli/_client.py
  lines: 39
  classes: 0
  methods: 3
  cc_max: 9
  inbound_deps: 4
  exports:
  - name: make_client
    type: function
    cc: 3
  - name: print_json
    type: function
    cc: 1
  - name: print_table
    type: function
    cc: 9
- path: src/proxym/context/detector.py
  lines: 208
  classes: 0
  methods: 9
  cc_max: 9
  inbound_deps: 2
  exports:
  - name: detect_project
    type: function
    cc: 8
- path: src/proxym/router/strategy.py
  lines: 253
  classes: 3
  methods: 14
  cc_max: 9
  inbound_deps: 0
  exports:
  - name: RoutingDecision
    type: class
    cc_avg: 0.0
  - name: CostLedger
    type: class
    cc_avg: 2.5
  - name: Router
    type: class
    cc_avg: 3.0
- path: src/proxym/virt/_config.py
  lines: 87
  classes: 3
  methods: 1
  cc_max: 9
  inbound_deps: 0
  exports:
  - name: ProjectsConfig
    type: class
    cc_avg: 9.0
  - name: VMConfig
    type: class
    cc_avg: 0.0
  - name: VMStatus
    type: class
    cc_avg: 0.0
- path: src/proxym/virt/browser_profiles.py
  lines: 325
  classes: 2
  methods: 11
  cc_max: 9
  inbound_deps: 1
  exports:
  - name: BrowserProfile
    type: class
    cc_avg: 1.0
  - name: AppDataSync
    type: class
    cc_avg: 0.0
  - name: detect_firefox_profiles
    type: function
    cc: 9
    fan_out: 17
  - name: detect_chrome_profiles
    type: function
    cc: 1
  - name: detect_chromium_profiles
    type: function
    cc: 1
  - name: detect_all_profiles
    type: function
    cc: 1
  - name: generate_app_data_sync
    type: function
    cc: 8
- path: src/proxym/dashboard/hooks/useDashboardData.js
  lines: 52
  classes: 0
  methods: 4
  cc_max: 8
  inbound_deps: 0
  exports:
  - name: useDashboardData
    type: function
    cc: 8
    fan_out: 18
  - name: refresh
    type: function
    cc: 8
    fan_out: 13
  - name: h
    type: function
    cc: 8
  - name: i
    type: function
    cc: 1
- path: src/proxym/providers/__init__.py
  lines: 330
  classes: 3
  methods: 4
  cc_max: 8
  inbound_deps: 1
  exports:
  - name: TaskTier
    type: class
    cc_avg: 0.0
  - name: Capability
    type: class
    cc_avg: 0.0
  - name: ModelSpec
    type: class
    cc_avg: 0.0
  - name: models_for_tier
    type: function
    cc: 8
  - name: cheapest_model
    type: function
    cc: 2
  - name: get_model
    type: function
    cc: 1
- path: src/proxym/router/__init__.py
  lines: 340
  classes: 1
  methods: 14
  cc_max: 8
  inbound_deps: 1
  exports:
  - name: AnalysisResult
    type: class
    cc_avg: 0.0
  - name: analyze_request
    type: function
    cc: 4
    fan_out: 15
- path: src/proxym/cli/system.py
  lines: 69
  classes: 0
  methods: 3
  cc_max: 7
  inbound_deps: 0
  exports:
  - name: cmd_serve
    type: function
    cc: 4
  - name: cmd_status
    type: function
    cc: 7
    fan_out: 14
  - name: cmd_models
    type: function
    cc: 4
- path: src/proxym/ctl.py
  lines: 179
  classes: 0
  methods: 2
  cc_max: 7
  inbound_deps: 0
  exports:
  - name: main
    type: function
    cc: 3
    fan_out: 26
- path: src/proxym/virt/_orchestrator.py
  lines: 510
  classes: 1
  methods: 28
  cc_max: 7
  inbound_deps: 0
  exports:
  - name: VMOrchestrator
    type: class
    cc_avg: 3.8
    methods:
    - name: delete_vm
      cc: 6
      fan_out: 11
- path: src/proxym/cli/accounts.py
  lines: 70
  classes: 0
  methods: 3
  cc_max: 6
  inbound_deps: 0
  exports:
  - name: cmd_accounts_list
    type: function
    cc: 6
    fan_out: 10
  - name: cmd_accounts_add
    type: function
    cc: 4
  - name: cmd_accounts_costs
    type: function
    cc: 5
    fan_out: 11
- path: src/proxym/cli/browser.py
  lines: 65
  classes: 0
  methods: 4
  cc_max: 6
  inbound_deps: 0
  exports:
  - name: cmd_browser_list
    type: function
    cc: 6
  - name: cmd_browser_assign
    type: function
    cc: 2
  - name: cmd_browser_sync
    type: function
    cc: 2
  - name: cmd_browser_snapshot
    type: function
    cc: 2
- path: src/proxym/cli/vms.py
  lines: 107
  classes: 0
  methods: 8
  cc_max: 6
  inbound_deps: 1
  exports:
  - name: cmd_vm_list
    type: function
    cc: 3
  - name: cmd_vm_create
    type: function
    cc: 5
  - name: cmd_vm_action
    type: function
    cc: 2
  - name: cmd_vm_switch
    type: function
    cc: 2
  - name: cmd_vm_open
    type: function
    cc: 2
  - name: cmd_vm_ssh
    type: function
    cc: 2
  - name: cmd_vm_logs
    type: function
    cc: 1
- path: src/proxym/context/session.py
  lines: 144
  classes: 2
  methods: 8
  cc_max: 6
  inbound_deps: 0
  exports:
  - name: AgentSession
    type: class
    cc_avg: 1.5
  - name: SessionStore
    type: class
    cc_avg: 2.8
- path: src/proxym/mcp/client.py
  lines: 148
  classes: 2
  methods: 4
  cc_max: 6
  inbound_deps: 0
  exports:
  - name: MCPToolResult
    type: class
    cc_avg: 0.0
  - name: MCPClient
    type: class
    cc_avg: 4.0
- path: src/proxym/api/frontend.py
  lines: 108
  classes: 0
  methods: 6
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: dashboard_ui
    type: function
    cc: 2
  - name: dashboard_hook_js
    type: function
    cc: 1
  - name: dashboard_api_js
    type: function
    cc: 1
  - name: dashboard_jsx
    type: function
    cc: 1
  - name: get_frontend_config
    type: function
    cc: 2
- path: src/proxym/context/tool_selector.py
  lines: 101
  classes: 0
  methods: 2
  cc_max: 5
  inbound_deps: 1
  exports:
  - name: select_tools
    type: function
    cc: 5
- path: src/proxym/mcp/router.py
  lines: 95
  classes: 1
  methods: 4
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: MCPRouter
    type: class
    cc_avg: 3.0
- path: src/proxym/middleware/__init__.py
  lines: 60
  classes: 2
  methods: 3
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: AuthMiddleware
    type: class
    cc_avg: 3.0
  - name: CostTrackingMiddleware
    type: class
    cc_avg: 2.0
- path: src/proxym/virt/clonebox_adapter.py
  lines: 209
  classes: 2
  methods: 17
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: CloneBoxResult
    type: class
    cc_avg: 0.0
  - name: CloneBoxAdapter
    type: class
    cc_avg: 1.9
- path: src/proxym/virt/profiles/__init__.py
  lines: 69
  classes: 0
  methods: 4
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: get_builtin_profile
    type: function
    cc: 2
  - name: list_builtin_profiles
    type: function
    cc: 2
  - name: merge_profiles
    type: function
    cc: 5
  - name: load_profile_yaml
    type: function
    cc: 4
- path: src/proxym/watch/__init__.py
  lines: 146
  classes: 1
  methods: 5
  cc_max: 5
  inbound_deps: 0
  exports:
  - name: DeltaWatchClient
    type: class
    cc_avg: 3.2
  - name: cli
    type: function
    cc: 2
- path: src/proxym/api/system.py
  lines: 67
  classes: 0
  methods: 5
  cc_max: 4
  inbound_deps: 0
  exports:
  - name: favicon
    type: function
    cc: 1
  - name: health
    type: function
    cc: 1
  - name: list_models
    type: function
    cc: 4
  - name: budget_status
    type: function
    cc: 1
  - name: context_stats
    type: function
    cc: 1
- path: src/proxym/mcp/registry.py
  lines: 113
  classes: 3
  methods: 8
  cc_max: 4
  inbound_deps: 0
  exports:
  - name: MCPTransport
    type: class
    cc_avg: 0.0
  - name: MCPServerSpec
    type: class
    cc_avg: 0.0
  - name: MCPRegistry
    type: class
    cc_avg: 2.2
- path: src/proxym/config.py
  lines: 93
  classes: 1
  methods: 2
  cc_max: 3
  inbound_deps: 8
  exports:
  - name: Settings
    type: class
    cc_avg: 3.0
  - name: get_settings
    type: function
    cc: 2
- path: src/proxym/context/_context.py
  lines: 33
  classes: 1
  methods: 1
  cc_max: 3
  inbound_deps: 0
  exports:
  - name: ProjectContext
    type: class
    cc_avg: 3.0
- path: src/proxym/dashboard/__init__.py
  lines: 265
  classes: 4
  methods: 20
  cc_max: 3
  inbound_deps: 0
  exports:
  - name: CreateAccountReq
    type: class
    cc_avg: 0.0
  - name: BindToolReq
    type: class
    cc_avg: 0.0
  - name: CreateVMReq
    type: class
    cc_avg: 0.0
  - name: SwitchProjectReq
    type: class
    cc_avg: 0.0
  - name: list_accounts
    type: function
    cc: 3
  - name: create_account
    type: function
    cc: 1
  - name: get_account
    type: function
    cc: 2
  - name: delete_account
    type: function
    cc: 2
  - name: bind_tool
    type: function
    cc: 2
  - name: cost_summary
    type: function
    cc: 1
  - name: cost_detailed
    type: function
    cc: 2
  - name: list_vms
    type: function
    cc: 2
  - name: create_vm
    type: function
    cc: 1
  - name: start_vm
    type: function
    cc: 2
  - name: stop_vm
    type: function
    cc: 2
  - name: pause_vm
    type: function
    cc: 2
  - name: resume_vm
    type: function
    cc: 2
  - name: snapshot_vm
    type: function
    cc: 2
  - name: switch_project
    type: function
    cc: 2
  - name: delete_vm
    type: function
    cc: 2
  - name: dashboard_root
    type: function
    cc: 1
  - name: system_status
    type: function
    cc: 3
- path: src/proxym/main.py
  lines: 136
  classes: 0
  methods: 2
  cc_max: 3
  inbound_deps: 0
  exports:
  - name: lifespan
    type: function
    cc: 3
  - name: cli
    type: function
    cc: 3
- path: src/proxym/virt/_check.py
  lines: 17
  classes: 0
  methods: 1
  cc_max: 3
  inbound_deps: 1
- path: src/proxym/api/_state.py
  lines: 69
  classes: 0
  methods: 6
  cc_max: 2
  inbound_deps: 3
  exports:
  - name: get_router
    type: function
    cc: 2
  - name: get_delta_buffer
    type: function
    cc: 2
  - name: get_mcp_router
    type: function
    cc: 2
  - name: get_session_store
    type: function
    cc: 2
  - name: get_context_payload
    type: function
    cc: 1
  - name: set_context_payload
    type: function
    cc: 1
- path: src/proxym/api/context_api.py
  lines: 86
  classes: 0
  methods: 4
  cc_max: 2
  inbound_deps: 0
  exports:
  - name: receive_delta
    type: function
    cc: 1
  - name: detect_context
    type: function
    cc: 2
  - name: list_sessions
    type: function
    cc: 2
  - name: list_mcp_servers
    type: function
    cc: 2
- path: src/proxym/dashboard/api.js
  lines: 10
  classes: 0
  methods: 5
  cc_max: 2
  inbound_deps: 0
  exports:
  - name: API
    type: function
    cc: 1
  - name: KEY
    type: function
    cc: 1
  - name: DEBUG
    type: function
    cc: 1
  - name: get
    type: function
    cc: 2
  - name: post
    type: function
    cc: 2
- path: frontend/proxym-dashboard.jsx
  lines: 6
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: project.sh
  lines: 14
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: scripts/jetson-entrypoint.sh
  lines: 43
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: scripts/setup.sh
  lines: 93
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/__init__.py
  lines: 3
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/api/__init__.py
  lines: 16
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/cli/__init__.py
  lines: 1
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/context/__init__.py
  lines: 24
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/mcp/__init__.py
  lines: 24
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/virt/__init__.py
  lines: 41
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
- path: src/proxym/virt/_enums.py
  lines: 18
  classes: 2
  methods: 0
  cc_max: 0
  inbound_deps: 0
  exports:
  - name: VMBackend
    type: class
    cc_avg: 0.0
  - name: VMState
    type: class
    cc_avg: 0.0
- path: src/proxym/watch/client.py
  lines: 4
  classes: 0
  methods: 0
  cc_max: 0
  inbound_deps: 0
hotspots:
- name: main
  fan_out: 26
  note: Orchestrates 26 calls
- name: chat_completions
  fan_out: 22
  note: "OpenAI-compatible chat completions with intelligent routing.\n\nExtra headers:\n\
    \  X"
- name: useDashboardData
  fan_out: 18
  note: Orchestrates 18 calls
- name: detect_firefox_profiles
  fan_out: 17
  note: Detect Firefox profiles by parsing profiles.ini.
- name: _detect_chromium_family
  fan_out: 17
  note: Detect profiles for Chrome/Chromium from Local State file.
- name: analyze_request
  fan_out: 15
  note: Analysis pipeline, 15 stages
- name: sortColumn
  fan_out: 15
  note: Orchestrates 15 calls
- name: table
  fan_out: 15
  note: Orchestrates 15 calls
- name: table_body_rows
  fan_out: 15
  note: Orchestrates 15 calls
- name: no_rows
  fan_out: 15
  note: Orchestrates 15 calls
refactoring:
  priorities:
  - action: Split god module htmlcov/coverage_html_cb_dd2e7eb5.js (735L, 0 classes)
    impact: high
    effort: high
  - action: Split god module src/proxym/virt/_orchestrator.py (510L, 1 classes)
    impact: high
    effort: high
  - action: Split table (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: Split table_body_rows (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: Split no_rows (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: Split footer (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: Split ratio_columns (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: Split filter_handler (CC=21 → target CC<10)
    impact: medium
    effort: low
    module: coverage_html_cb_dd2e7eb5.js
  - action: 'Break circular dependency: src.proxym.virt.profiles.merge_profiles'
    impact: medium
    effort: low
  - action: Reduce main fan-out (currently 26)
    impact: medium
    effort: medium
  - action: Reduce chat_completions fan-out (currently 22)
    impact: medium
    effort: medium
  - action: Reduce useDashboardData fan-out (currently 18)
    impact: medium
    effort: medium
evolution:
- date: '2026-03-21'
  cc_avg: 3.5
  critical: 14
  lines: 11178
  note: Automated analysis
