Issue breakdown
No issues detected
287 files · 97,614 lines · 1,555 callables · 217 classes. Thresholds: func 6/4 · block 20/8 · seg 20/10
Type/docstring adoption and public API surface are shown as facts, not style pressure.
11 candidates across 287 ranked modules — disproportionate size, complexity, or coupling.
tests/test_report_contract_coverage.pyTeststests/test_report.pyTeststests/test_cli_inprocess.pyTeststests/test_html_report.pyTeststests/test_cli_unit.pyTestsDimension scores across all quality axes.
| Class ? | File ? | CBO ? | Risk ? | Coupled classes ? |
|---|---|---|---|---|
| FileMetrics | codeclone/models.py | 8 | medium | ClassMetricsDeadCandidateModuleApiSurface(+5 more) |
| ProjectMetrics | codeclone/models.py | 7 | medium | ApiSurfaceSnapshotDeadItemHealthScore(+4 more) |
| _FileEntryV27 | codeclone/cache/entries.py | 4 | low | _FileEnt..sisFacts_FileEntryBase_FileEnt..ityFacts(+1 more) |
| _FileEntryQualityFacts | codeclone/cache/entries.py | 4 | low | ClassMetricsDictModuleDo..rageDictModuleTy..rageDict(+1 more) |
| _FileEntryAnalysisFacts | codeclone/cache/entries.py | 4 | low | DeadCandidateDictModuleDepDictRuntimeR..FactDict(+1 more) |
| _RuntimeReachabilityVisitor | codeclone/analysis/reachability.py | 4 | low | _Provide..stration_RouteRegistration_Target(+1 more) |
| AstNormalizer | codeclone/analysis/normalizer.py | 3 | low | Normaliz..onConfigastcopy |
| CodeCloneMCPRunStore | codeclone/surfaces/mcp/_session_shared.py | 3 | low | MCPRunNo..undErrorMCPRunRecordMCPServi..actError |
| _FunctionStructureScanner | codeclone/findings/structural/detectors.py | 3 | low | Function..ureFactsastsys |
| MCPTool | codeclone/surfaces/mcp/tools/_base.py | 2 | low | MCPToolSchemaMCPToolSession |
| _FixedExecutor | tests/test_cli_inprocess.py | 2 | low | _FalseExitContext_FixedFuture |
| _DummyExecutor | tests/test_cli_inprocess.py | 2 | low | _DummyFuture_FalseExitContext |
| SimpleMCPTool | codeclone/surfaces/mcp/tools/_base.py | 2 | low | MCPToolSchemaMCPToolSession |
| MetricFamily | codeclone/metrics/_base.py | 2 | low | MetricAggregateMetricPr..tContext |
| _ArgumentParser | codeclone/config/argparse_builder.py | 2 | low | argparsesys |
| _FileEntryReportFacts | codeclone/cache/entries.py | 2 | low | ModuleAp..faceDictStructur..roupDict |
| CFGBuilder | codeclone/analysis/cfg.py | 2 | low | _LoopContextast |
| _MCPSessionSummaryMixin | codeclone/surfaces/mcp/_session_state_mixin.py | 1 | low | _MCPSess..derMixin |
| _MCPSessionAnalysisArgsMixin | codeclone/surfaces/mcp/_session_state_mixin.py | 1 | low | _MCPSess..ionMixin |
| TestAdmissionThresholdBoundaries | tests/test_extractor.py | 1 | low | pytest |
| _FailingExecutor | tests/test_cli_inprocess.py | 1 | low | _FalseExitContext |
| _MCPSessionStateMixin | codeclone/surfaces/mcp/_session_state_mixin.py | 1 | low | _MCPSess..ortMixin |
| _MCPSessionRunSummaryBuilderMixin | codeclone/surfaces/mcp/_session_state_mixin.py | 1 | low | _MCPSess..rgsMixin |
| _MCPSessionFindingMixin | codeclone/surfaces/mcp/_session_finding_mixin.py | 1 | low | _StateLock |
| _FileCache | codeclone/report/html/widgets/snippets.py | 1 | low | _CacheInfo |
| MetricsBaseline | codeclone/baseline/metrics_baseline.py | 1 | low | hmac |
| Baseline | codeclone/baseline/clone_baseline.py | 1 | low | hmac |
| _ImportAliasVisitor | codeclone/analysis/reachability.py | 1 | low | ast |
| Block | codeclone/analysis/cfg_model.py | 1 | low | ast |
| _InlineExecutor | tests/test_golden_v2.py | 1 | low | _DummyFuture |
| _DummyProgress | tests/test_cli_inprocess.py | 1 | low | _FalseExitContext |
| ReportArtifacts | scripts/build_docs_example_report.py | 1 | low | json |
| _QueryServiceMixin | codeclone/surfaces/mcp/service.py | 1 | low | _RunDictService |
| CodeCloneMCPService | codeclone/surfaces/mcp/service.py | 1 | low | _QueryServiceMixin |
| _MCPSessionReportMixin | codeclone/surfaces/mcp/_session_state_mixin.py | 1 | low | _MCPSess..aryMixin |
| MCPServiceContractError | codeclone/surfaces/mcp/_session_shared.py | 1 | low | MCPServiceError |
| MCPRunRecord | codeclone/surfaces/mcp/_session_shared.py | 1 | low | MCPAnalysisRequest |
| MCPRunNotFoundError | codeclone/surfaces/mcp/_session_shared.py | 1 | low | MCPServiceError |
| MCPGitDiffError | codeclone/surfaces/mcp/_session_shared.py | 1 | low | MCPServiceError |
| MCPFindingNotFoundError | codeclone/surfaces/mcp/_session_shared.py | 1 | low | MCPServiceError |
| StatusConsole | codeclone/surfaces/cli/types.py | 1 | low | PrinterLike |
| _StatementRecord | codeclone/report/explain.py | 1 | low | ast |
| QualnameCollector | codeclone/qualnames/__init__.py | 1 | low | ast |
| Suggestion | codeclone/models.py | 1 | low | ReportLocation |
| StructuralFindingGroup | codeclone/models.py | 1 | low | Structur..currence |
| PublicSymbol | codeclone/models.py | 1 | low | ApiParamSpec |
| ModuleApiSurface | codeclone/models.py | 1 | low | PublicSymbol |
| MetricsDiff | codeclone/models.py | 1 | low | ApiBreakingChange |
| FunctionGroupItem | codeclone/models.py | 1 | low | Function..ItemBase |
| DepGraph | codeclone/models.py | 1 | low | ModuleDep |
| Module | File ? | Score | Status | LOC | Fan-in/out | Complexity total |
|---|---|---|---|---|---|---|
| tests.test_report_contract_coverage | tests/test_report_contract_coverage.py | 0.9917 | candidate | 3089 | 0/16 | 35 |
| tests.test_report | tests/test_report.py | 0.982 | candidate | 3171 | 0/20 | 74 |
| tests.test_cli_inprocess | tests/test_cli_inprocess.py | 0.9757 | candidate | 4373 | 0/19 | 155 |
| tests.test_html_report | tests/test_html_report.py | 0.9699 | candidate | 3865 | 0/15 | 74 |
| tests.test_cli_unit | tests/test_cli_unit.py | 0.9612 | candidate | 2476 | 0/24 | 62 |
| codeclone.surfaces.mcp._session_shared | codeclone/surfaces/mcp/_session_shared.py | 0.95 | candidate | 1202 | 5/22 | 30 |
| tests.test_core_branch_coverage | tests/test_core_branch_coverage.py | 0.9483 | candidate | 1419 | 0/20 | 17 |
| tests.test_cache | tests/test_cache.py | 0.9477 | candidate | 2282 | 0/12 | 59 |
| codeclone.report.document._common | codeclone/report/document/_common.py | 0.9474 | candidate | 414 | 7/7 | 66 |
| tests.test_mcp_service | tests/test_mcp_service.py | 0.9461 | candidate | 4230 | 0/15 | 61 |
| tests.test_pipeline_metrics | tests/test_pipeline_metrics.py | 0.9399 | candidate | 1665 | 0/12 | 21 |
| codeclone.report.renderers.sarif | codeclone/report/renderers/sarif.py | 0.9376 | non_candidate | 1013 | 4/7 | 86 |
| codeclone.cache._wire_decode | codeclone/cache/_wire_decode.py | 0.936 | non_candidate | 829 | 3/5 | 134 |
| codeclone.report.overview | codeclone/report/overview.py | 0.9346 | non_candidate | 765 | 4/6 | 87 |
| codeclone.cache.store | codeclone/cache/store.py | 0.9218 | non_candidate | 691 | 14/11 | 47 |
| codeclone.surfaces.cli.workflow | codeclone/surfaces/cli/workflow.py | 0.9171 | non_candidate | 547 | 4/18 | 2 |
| tests.test_metrics_modules | tests/test_metrics_modules.py | 0.9044 | non_candidate | 701 | 0/11 | 12 |
| codeclone.baseline._metrics_baseline_validation | codeclone/baseline/_metrics_baseline_validation.py | 0.904 | non_candidate | 648 | 2/8 | 71 |
| codeclone.metrics.registry | codeclone/metrics/registry.py | 0.904 | non_candidate | 783 | 4/8 | 6 |
| codeclone.report.document.metrics | codeclone/report/document/metrics.py | 0.9019 | non_candidate | 781 | 1/8 | 7 |
| codeclone.report.gates.evaluator | codeclone/report/gates/evaluator.py | 0.901 | non_candidate | 681 | 6/4 | 12 |
| tests.test_html_report_helpers | tests/test_html_report_helpers.py | 0.8992 | non_candidate | 663 | 0/17 | 13 |
| codeclone.baseline.metrics_baseline | codeclone/baseline/metrics_baseline.py | 0.8971 | non_candidate | 497 | 8/9 | 41 |
| tests.test_metrics_baseline | tests/test_metrics_baseline.py | 0.8909 | non_candidate | 1265 | 0/7 | 37 |
| tests.test_pipeline_process | tests/test_pipeline_process.py | 0.8888 | non_candidate | 587 | 0/10 | 13 |
| codeclone.surfaces.cli.baseline_state | codeclone/surfaces/cli/baseline_state.py | 0.8864 | non_candidate | 499 | 4/9 | 52 |
| codeclone.surfaces.cli.execution | codeclone/surfaces/cli/execution.py | 0.886 | non_candidate | 351 | 0/11 | 39 |
| codeclone.report.document._findings_groups | codeclone/report/document/_findings_groups.py | 0.8836 | non_candidate | 606 | 3/9 | 14 |
| tests.test_baseline | tests/test_baseline.py | 0.8835 | non_candidate | 1280 | 0/5 | 62 |
| codeclone.report.derived | codeclone/report/derived.py | 0.8744 | non_candidate | 281 | 8/4 | 21 |
| tests.test_cfg | tests/test_cfg.py | 0.8736 | non_candidate | 831 | 0/6 | 39 |
| codeclone.report.suggestions | codeclone/report/suggestions.py | 0.8633 | non_candidate | 785 | 6/7 | 40 |
| codeclone.report.document._design_groups | codeclone/report/document/_design_groups.py | 0.8594 | non_candidate | 389 | 2/8 | 24 |
| codeclone.cache._wire_helpers | codeclone/cache/_wire_helpers.py | 0.8572 | non_candidate | 307 | 2/3 | 55 |
| codeclone.analysis._module_walk | codeclone/analysis/_module_walk.py | 0.8568 | non_candidate | 728 | 2/5 | 56 |
| codeclone.report.html.sections._clones | codeclone/report/html/sections/_clones.py | 0.8551 | non_candidate | 842 | 2/18 | 67 |
| codeclone.findings.structural.detectors | codeclone/findings/structural/detectors.py | 0.8535 | non_candidate | 1047 | 11/3 | 121 |
| codeclone.report.document.derived | codeclone/report/document/derived.py | 0.85 | non_candidate | 425 | 2/8 | 18 |
| tests.test_extractor | tests/test_extractor.py | 0.8414 | non_candidate | 2489 | 0/10 | 58 |
| tests.test_mcp_server | tests/test_mcp_server.py | 0.8394 | non_candidate | 761 | 0/5 | 13 |
| tests.test_structural_findings | tests/test_structural_findings.py | 0.8372 | non_candidate | 963 | 0/3 | 17 |
| codeclone.surfaces.mcp._session_helpers | codeclone/surfaces/mcp/_session_helpers.py | 0.8341 | non_candidate | 919 | 1/9 | 90 |
| codeclone.surfaces.mcp.server | codeclone/surfaces/mcp/server.py | 0.8333 | non_candidate | 1028 | 4/4 | 19 |
| tests.test_coverage_edges | tests/test_coverage_edges.py | 0.8322 | non_candidate | 249 | 0/10 | 4 |
| codeclone.surfaces.cli.console | codeclone/surfaces/cli/console.py | 0.8298 | non_candidate | 203 | 5/4 | 4 |
| tests.test_normalize | tests/test_normalize.py | 0.8277 | non_candidate | 479 | 0/4 | 9 |
| codeclone.report.html.sections._meta | codeclone/report/html/sections/_meta.py | 0.8272 | non_candidate | 560 | 2/6 | 30 |
| codeclone.core.discovery_cache | codeclone/core/discovery_cache.py | 0.8269 | non_candidate | 680 | 4/5 | 67 |
| codeclone.cache.entries | codeclone/cache/entries.py | 0.8258 | non_candidate | 662 | 15/2 | 2 |
| codeclone.core.reporting | codeclone/core/reporting.py | 0.8222 | non_candidate | 267 | 6/10 | 14 |
| Category ? | Capability | Evidence | Source | Location ? | Review |
|---|---|---|---|---|---|
| Process boundary | Subprocess import | subprocess | Production | .github/actions/codeclone/_action_impl.py:22 | Module · capability present |
| Filesystem mutation | Builtin open write | open[mode=a] | Production | .github/actions/codeclone/_action_impl.py:152 | Callable · exact evidence |
| Process boundary | Subprocess run | subprocess.run | Production | .github/actions/codeclone/_action_impl.py:205 | Callable · exact evidence |
| Filesystem mutation | Builtin open write | open[mode=a] | Production | .github/actions/codeclone/_action_impl.py:262 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Production | benchmarks/run_benchmark.py:15 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Production | benchmarks/run_benchmark.py:181-187 | Callable · exact evidence |
| Filesystem mutation | Shutil rmtree | shutil.rmtree | Production | benchmarks/run_benchmark.py:266 | Callable · exact evidence |
| Filesystem mutation | Shutil rmtree | shutil.rmtree | Production | benchmarks/run_benchmark.py:547 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib.metadata.PackageNotFoundError | Production | codeclone/__init__.py:7 | Module · capability present |
| Dynamic loading | Importlib import | importlib.metadata.version | Production | codeclone/__init__.py:7 | Module · capability present |
| Crypto transport | Hmac import | hmac | Production | codeclone/baseline/clone_baseline.py:9 | Module · capability present |
| Crypto transport | Hmac import | hmac | Production | codeclone/baseline/metrics_baseline.py:9 | Module · capability present |
| Crypto transport | Hmac import | hmac | Production | codeclone/cache/integrity.py:10 | Module · capability present |
| Dynamic loading | Importlib import | importlib | Production | codeclone/config/pyproject_loader.py:3 | Module · capability present |
| Dynamic loading | Import module | importlib.import_module | Production | codeclone/config/pyproject_loader.py:194 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib | Production | codeclone/core/entrypoints.py:9 | Module · capability present |
| Dynamic loading | Import module | importlib.import_module | Production | codeclone/core/entrypoints.py:50 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib | Production | codeclone/report/html/widgets/snippets.py:10 | Module · capability present |
| Dynamic loading | Import module | importlib.import_module | Production | codeclone/report/html/widgets/snippets.py:103 | Callable · exact evidence |
| Dynamic loading | Import module | importlib.import_module | Production | codeclone/report/html/widgets/snippets.py:104 | Callable · exact evidence |
| Dynamic loading | Import module | importlib.import_module | Production | codeclone/report/html/widgets/snippets.py:105 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Production | codeclone/surfaces/cli/changed_scope.py:9 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Production | codeclone/surfaces/cli/changed_scope.py:103-110 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Production | codeclone/surfaces/mcp/_session_shared.py:10 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Production | codeclone/surfaces/mcp/_session_shared.py:879-886 | Callable · exact evidence |
| Filesystem mutation | Os replace | os.replace | Production | codeclone/utils/json_io.py:60 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Production | plugins/codeclone/scripts/launch_mcp.py:5 | Module · capability present |
| Process boundary | Subprocess import | subprocess | Production | scripts/build_docs_example_report.py:14 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Production | scripts/build_docs_example_report.py:76 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess.CompletedProcess | Tests | tests/test_benchmark.py:10 | Module · capability present |
| Process boundary | Subprocess import | subprocess | Tests | tests/test_cli_help_snapshot.py:4 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Tests | tests/test_cli_help_snapshot.py:15-21 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Tests | tests/test_cli_smoke.py:8 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Tests | tests/test_cli_smoke.py:32-47 | Callable · exact evidence |
| Process boundary | Subprocess import | subprocess | Tests | tests/test_cli_unit.py:9 | Module · capability present |
| Dynamic loading | Importlib import | importlib.util | Tests | tests/test_codex_plugin_launcher.py:3 | Module · capability present |
| Process boundary | Subprocess import | subprocess | Tests | tests/test_codex_plugin_launcher.py:4 | Module · capability present |
| Dynamic loading | Import spec from file | importlib.util.spec_from_file_location | Tests | tests/test_codex_plugin_launcher.py:13-16 | Callable · exact evidence |
| Dynamic loading | Runpy import | runpy | Tests | tests/test_docs_example_report.py:9 | Module · capability present |
| Dynamic loading | Run path | runpy.run_path | Tests | tests/test_docs_example_report.py:19 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib.util | Tests | tests/test_github_action_helpers.py:9 | Module · capability present |
| Dynamic loading | Import spec from file | importlib.util.spec_from_file_location | Tests | tests/test_github_action_helpers.py:25 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib | Tests | tests/test_html_report.py:7 | Module · capability present |
| Dynamic loading | Importlib import | importlib.metadata | Tests | tests/test_init.py:13 | Callable · exact evidence |
| Dynamic loading | Import module | importlib.import_module | Tests | tests/test_init.py:19 | Callable · exact evidence |
| Dynamic loading | Importlib import | importlib.metadata | Tests | tests/test_init.py:25 | Callable · exact evidence |
| Dynamic loading | Import module | importlib.import_module | Tests | tests/test_init.py:31 | Callable · exact evidence |
| Dynamic loading | Runpy import | runpy | Tests | tests/test_main_entrypoint.py:8 | Module · capability present |
| Process boundary | Subprocess import | subprocess | Tests | tests/test_main_entrypoint.py:9 | Module · capability present |
| Process boundary | Subprocess run | subprocess.run | Tests | tests/test_main_entrypoint.py:20-25 | Callable · exact evidence |
| Longest chain ? | Length ? |
|---|---|
| __main__→server→service→session→_session..te_mixin→_session..ng_mixin→_session_shared→reporting→markdown→builder→findings→_design_groups→_findings_groups→_common→detectors→findings | 16 |
| test_mcp_server→server→service→session→_session..te_mixin→_session..ng_mixin→_session_shared→reporting→markdown→builder→findings→_design_groups→_findings_groups→_common→detectors→findings | 16 |
| test_mcp..snapshot→server→service→session→_session..te_mixin→_session..ng_mixin→_session_shared→reporting→markdown→builder→findings→_design_groups→_findings_groups→_common→detectors→findings | 16 |
| test_tar.._imports→server→service→session→_session..te_mixin→_session..ng_mixin→_session_shared→reporting→markdown→builder→findings→_design_groups→_findings_groups→_common→detectors→findings | 16 |
| server→service→session→_session..te_mixin→_session..ng_mixin→_session_shared→reporting→markdown→builder→findings→_design_groups→_findings_groups→_common→detectors→findings | 15 |
| Name ? | File ? | Line ? | Kind ? | Confidence ? | Rule | Source |
|---|---|---|---|---|---|---|
| resolve_install_target | .github/actions/codeclone/_action_impl.py | 158 | function | high | dead-code | inline_codeclone |