Issue breakdown
No issues detected
176 files · 82,053 lines · 1,376 callables · 171 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.
12 candidates across 176 ranked modules — disproportionate size, complexity, or coupling.
tests/test_report_contract_coverage.pyTeststests/test_report.pyTestscodeclone/cache.pyProductioncodeclone/report/json_contract.pyProductioncodeclone/cli.pyProductionDimension scores across all quality axes.
| Function ? | File ? | CC ? | Nesting ? | Risk ? |
|---|---|---|---|---|
| _run_analysis_stages | codeclone/cli.py | 20 | 3 | medium |
| decode_segment_report_projection | codeclone/cache_segments.py | 20 | 3 | medium |
| _encode_wire_file_entry | codeclone/cache.py | 20 | 3 | medium |
| write_report_outputs | codeclone/_cli_reports.py | 20 | 3 | medium |
| render_text_report_document | codeclone/report/serialize.py | 20 | 2 | medium |
| compute_lcom4 | codeclone/metrics/cohesion.py | 19 | 4 | medium |
| resolve_clone_baseline_state | codeclone/_cli_baselines.py | 18 | 5 | medium |
| _collect_paths_from_metrics | codeclone/report/json_contract.py | 18 | 3 | medium |
| _enforce_gating | codeclone/cli.py | 18 | 2 | medium |
| build_overloaded_modules_payload | codeclone/metrics/overloaded_modules.py | 17 | 3 | medium |
| Cache._load_and_validate | codeclone/cache.py | 17 | 2 | medium |
| _parse_api_surface_snapshot | codeclone/metrics_baseline.py | 16 | 4 | medium |
| Baseline.save | codeclone/baseline.py | 16 | 4 | medium |
| render_meta_panel | codeclone/_html_report/_sections/_meta.py | 16 | 4 | medium |
| _FunctionStructureScanner._visit_statement | codeclone/structural_findings.py | 16 | 3 | medium |
| render_markdown_report_document | codeclone/report/markdown.py | 15 | 4 | medium |
| _collect_report_file_list | codeclone/report/json_contract.py | 15 | 4 | medium |
| extract_units_and_stats_from_source | codeclone/extractor.py | 15 | 3 | medium |
| CFGBuilder._visit_try | codeclone/cfg.py | 15 | 2 | medium |
| build_codeclone_args | .github/actions/codeclone/_action_impl.py | 15 | 1 | medium |
| _signature_break_detail | codeclone/metrics/api_surface.py | 14 | 2 | medium |
| _render_group_explanation | codeclone/_html_report/_sections/_clones.py | 14 | 2 | medium |
| _derive_group_display_name | codeclone/_html_report/_sections/_clones.py | 13 | 4 | medium |
| _load_metrics_baseline_for_diff | codeclone/_cli_baselines.py | 13 | 3 | medium |
| CodeCloneMCPService._safe_refactor_shape | codeclone/mcp_service.py | 13 | 1 | medium |
| _has_cache_entry_container_shape | codeclone/cache.py | 13 | 1 | medium |
| serialize_finding_group_card | codeclone/report/overview.py | 12 | 10 | medium |
| process | codeclone/pipeline.py | 12 | 7 | medium |
| discover | codeclone/pipeline.py | 12 | 4 | medium |
| _parse_limits | codeclone/extractor.py | 12 | 3 | medium |
| _location_entry | codeclone/report/sarif.py | 12 | 2 | medium |
| enrich_with_assert_facts | codeclone/report/explain.py | 12 | 2 | medium |
| report | codeclone/pipeline.py | 12 | 2 | medium |
| CodeCloneMCPService._render_resource | codeclone/mcp_service.py | 12 | 2 | medium |
| _main_impl | codeclone/cli.py | 12 | 2 | medium |
| Cache.get_file_entry | codeclone/cache.py | 12 | 2 | medium |
| Baseline.load | codeclone/baseline.py | 12 | 2 | medium |
| parse_metric_reason_entry | codeclone/_cli_gating.py | 12 | 2 | medium |
| load_pyproject_config | codeclone/_cli_config.py | 12 | 1 | medium |
| _canonicalize_cache_entry | codeclone/cache.py | 11 | 3 | medium |
| _build_layer_groups | codeclone/_html_report/_sections/_dependencies.py | 11 | 3 | medium |
| render_quality_panel | codeclone/_html_report/_sections/_coupling.py | 11 | 3 | medium |
| _build_design_groups | codeclone/report/json_contract.py | 11 | 2 | medium |
| _public_symbol_from_cache_dict | codeclone/pipeline.py | 11 | 2 | medium |
| MetricsBaseline.load | codeclone/metrics_baseline.py | 11 | 2 | medium |
| _resolve_report_filename | codeclone/metrics/coverage_join.py | 11 | 2 | medium |
| _health_gauge_html | codeclone/_html_report/_sections/_overview.py | 11 | 2 | medium |
| build_html_report | codeclone/_html_report/_assemble.py | 11 | 2 | medium |
| render_clones_panel | codeclone/_html_report/_sections/_clones.py | 11 | 1 | medium |
| build_directory_hotspots | codeclone/report/overview.py | 10 | 4 | low |
| Class ? | File ? | CBO ? | Risk ? | Coupled classes ? |
|---|---|---|---|---|
| CodeCloneMCPService | codeclone/mcp_service.py | 10 | medium | CodeClon..RunStoreMCPAnalysisRequestMCPFindi..undError(+7 more) |
| CacheEntry | codeclone/cache.py | 9 | medium | CacheEntryBaseClassMetricsDictDeadCandidateDict(+6 more) |
| ProjectMetrics | codeclone/models.py | 6 | medium | ApiSurfaceSnapshotDeadItemHealthScore(+3 more) |
| FileMetrics | codeclone/models.py | 6 | medium | ClassMetricsDeadCandidateModuleApiSurface(+3 more) |
| Cache | codeclone/cache.py | 6 | medium | AnalysisProfileCacheDataCacheEntry(+3 more) |
| AstNormalizer | codeclone/normalize.py | 3 | low | Normaliz..onConfigastcopy |
| _FunctionStructureScanner | codeclone/structural_findings.py | 3 | low | Function..ureFactsastsys |
| CodeCloneMCPRunStore | codeclone/mcp_service.py | 3 | low | MCPRunNo..undErrorMCPRunRecordMCPServi..actError |
| CFGBuilder | codeclone/cfg.py | 3 | low | _LoopContext_TryLikeast |
| _FixedExecutor | tests/test_cli_inprocess.py | 2 | low | _FalseExitContext_FixedFuture |
| MetricsBaseline | codeclone/metrics_baseline.py | 2 | low | MetricsB..neStatushmac |
| Baseline | codeclone/baseline.py | 2 | low | BaselineStatushmac |
| _DummyExecutor | tests/test_cli_inprocess.py | 2 | low | _DummyFuture_FalseExitContext |
| CacheData | codeclone/cache.py | 2 | low | AnalysisProfileCacheEntry |
| _ArgumentParser | codeclone/_cli_args.py | 2 | low | argparsesys |
| TestAdmissionThresholdBoundaries | tests/test_extractor.py | 1 | low | pytest |
| _FailingExecutor | tests/test_cli_inprocess.py | 1 | low | _FalseExitContext |
| Block | codeclone/cfg_model.py | 1 | low | ast |
| _FileCache | codeclone/_html_snippets.py | 1 | low | _CacheInfo |
| _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 |
| _StatementRecord | codeclone/report/explain.py | 1 | low | ast |
| QualnameCollector | codeclone/qualnames.py | 1 | low | ast |
| BootstrapResult | codeclone/pipeline.py | 1 | low | OutputPaths |
| 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 |
| CoverageJoinResult | codeclone/models.py | 1 | low | UnitCoverageFact |
| ApiSurfaceSnapshot | codeclone/models.py | 1 | low | ModuleApiSurface |
| _CoverageReport | codeclone/metrics/coverage_join.py | 1 | low | _CoverageFileLines |
| MCPServiceContractError | codeclone/mcp_service.py | 1 | low | MCPServiceError |
| MCPRunRecord | codeclone/mcp_service.py | 1 | low | MCPAnalysisRequest |
| MCPRunNotFoundError | codeclone/mcp_service.py | 1 | low | MCPServiceError |
| MCPGitDiffError | codeclone/mcp_service.py | 1 | low | MCPServiceError |
| MCPFindingNotFoundError | codeclone/mcp_service.py | 1 | low | MCPServiceError |
| _ModuleWalkState | codeclone/extractor.py | 1 | low | ast |
| ValidationError | codeclone/errors.py | 1 | low | CodeCloneError |
| ParseError | codeclone/errors.py | 1 | low | FileProc..ingError |
| FileProcessingError | codeclone/errors.py | 1 | low | CodeCloneError |
| CacheError | codeclone/errors.py | 1 | low | CodeCloneError |
| BaselineValidationError | codeclone/errors.py | 1 | low | Baseline..emaError |
| BaselineSchemaError | codeclone/errors.py | 1 | low | CodeCloneError |
| CFG | codeclone/cfg_model.py | 1 | low | Block |
| _TryLike | codeclone/cfg.py | 1 | low | ast |
| StructuralFindingGroupDict | codeclone/cache.py | 1 | low | Structur..enceDict |
| Class ? | File ? | LCOM4 ? | Risk ? | Methods ? | Fields ? |
|---|---|---|---|---|---|
| CodeCloneMCPService | codeclone/mcp_service.py | 1 | low | 131 | 118 |
| CacheEntry | codeclone/cache.py | 1 | low | 0 | 0 |
| ProjectMetrics | codeclone/models.py | 1 | low | 0 | 0 |
| FileMetrics | codeclone/models.py | 1 | low | 0 | 0 |
| Cache | codeclone/cache.py | 1 | low | 15 | 25 |
| AstNormalizer | codeclone/normalize.py | 2 | medium | 13 | 5 |
| _FunctionStructureScanner | codeclone/structural_findings.py | 1 | low | 8 | 16 |
| CodeCloneMCPRunStore | codeclone/mcp_service.py | 1 | low | 6 | 5 |
| CFGBuilder | codeclone/cfg.py | 1 | low | 19 | 20 |
| _FixedExecutor | tests/test_cli_inprocess.py | 2 | medium | 3 | 1 |
| MetricsBaseline | codeclone/metrics_baseline.py | 2 | medium | 7 | 13 |
| Baseline | codeclone/baseline.py | 2 | medium | 7 | 11 |
| _DummyExecutor | tests/test_cli_inprocess.py | 1 | low | 4 | 2 |
| CacheData | codeclone/cache.py | 1 | low | 0 | 0 |
| _ArgumentParser | codeclone/_cli_args.py | 1 | low | 1 | 2 |
| TestAdmissionThresholdBoundaries | tests/test_extractor.py | 2 | medium | 5 | 2 |
| _FailingExecutor | tests/test_cli_inprocess.py | 2 | medium | 2 | 1 |
| Block | codeclone/cfg_model.py | 2 | medium | 3 | 2 |
| _FileCache | codeclone/_html_snippets.py | 2 | medium | 4 | 3 |
| _InlineExecutor | tests/test_golden_v2.py | 1 | low | 1 | 0 |
| _DummyProgress | tests/test_cli_inprocess.py | 1 | low | 5 | 2 |
| ReportArtifacts | scripts/build_docs_example_report.py | 1 | low | 0 | 0 |
| _StatementRecord | codeclone/report/explain.py | 1 | low | 0 | 0 |
| QualnameCollector | codeclone/qualnames.py | 1 | low | 5 | 9 |
| BootstrapResult | codeclone/pipeline.py | 1 | low | 0 | 0 |
| Suggestion | codeclone/models.py | 1 | low | 0 | 0 |
| StructuralFindingGroup | codeclone/models.py | 1 | low | 0 | 0 |
| PublicSymbol | codeclone/models.py | 1 | low | 0 | 0 |
| ModuleApiSurface | codeclone/models.py | 1 | low | 0 | 0 |
| MetricsDiff | codeclone/models.py | 1 | low | 0 | 0 |
| FunctionGroupItem | codeclone/models.py | 1 | low | 0 | 0 |
| DepGraph | codeclone/models.py | 1 | low | 0 | 0 |
| CoverageJoinResult | codeclone/models.py | 1 | low | 0 | 0 |
| ApiSurfaceSnapshot | codeclone/models.py | 1 | low | 0 | 0 |
| _CoverageReport | codeclone/metrics/coverage_join.py | 1 | low | 0 | 0 |
| MCPServiceContractError | codeclone/mcp_service.py | 1 | low | 0 | 0 |
| MCPRunRecord | codeclone/mcp_service.py | 1 | low | 0 | 0 |
| MCPRunNotFoundError | codeclone/mcp_service.py | 1 | low | 0 | 0 |
| MCPGitDiffError | codeclone/mcp_service.py | 1 | low | 0 | 0 |
| MCPFindingNotFoundError | codeclone/mcp_service.py | 1 | low | 0 | 0 |
| _ModuleWalkState | codeclone/extractor.py | 1 | low | 0 | 0 |
| ValidationError | codeclone/errors.py | 1 | low | 0 | 0 |
| ParseError | codeclone/errors.py | 1 | low | 0 | 0 |
| FileProcessingError | codeclone/errors.py | 1 | low | 0 | 0 |
| CacheError | codeclone/errors.py | 1 | low | 0 | 0 |
| BaselineValidationError | codeclone/errors.py | 1 | low | 1 | 1 |
| BaselineSchemaError | codeclone/errors.py | 1 | low | 0 | 0 |
| CFG | codeclone/cfg_model.py | 1 | low | 2 | 4 |
| _TryLike | codeclone/cfg.py | 1 | low | 0 | 0 |
| StructuralFindingGroupDict | codeclone/cache.py | 1 | low | 0 | 0 |
| Module | File ? | Score | Status | LOC | Fan-in/out | Complexity total |
|---|---|---|---|---|---|---|
| tests.test_report_contract_coverage | tests/test_report_contract_coverage.py | 0.9814 | candidate | 2819 | 0/9 | 30 |
| tests.test_report | tests/test_report.py | 0.9747 | candidate | 3172 | 0/13 | 74 |
| codeclone.cache | codeclone/cache.py | 0.9733 | candidate | 2803 | 11/8 | 307 |
| codeclone.report.json_contract | codeclone/report/json_contract.py | 0.9698 | candidate | 2918 | 9/11 | 148 |
| codeclone.cli | codeclone/cli.py | 0.9694 | candidate | 1741 | 3/20 | 79 |
| tests.test_cli_inprocess | tests/test_cli_inprocess.py | 0.9644 | candidate | 4267 | 0/12 | 153 |
| tests.test_html_report | tests/test_html_report.py | 0.9591 | candidate | 3227 | 0/11 | 65 |
| codeclone.mcp_service | codeclone/mcp_service.py | 0.9556 | candidate | 4727 | 2/17 | 333 |
| tests.test_cli_unit | tests/test_cli_unit.py | 0.9496 | candidate | 2141 | 0/17 | 57 |
| codeclone.baseline | codeclone/baseline.py | 0.9369 | candidate | 767 | 14/5 | 80 |
| codeclone.extractor | codeclone/extractor.py | 0.9319 | candidate | 1149 | 4/13 | 92 |
| codeclone.metrics_baseline | codeclone/metrics_baseline.py | 0.9198 | candidate | 1317 | 4/9 | 95 |
| codeclone.report.overview | codeclone/report/overview.py | 0.9272 | non_candidate | 775 | 4/6 | 87 |
| codeclone.report.sarif | codeclone/report/sarif.py | 0.9263 | non_candidate | 990 | 3/7 | 86 |
| tests.test_cache | tests/test_cache.py | 0.9163 | non_candidate | 1921 | 0/7 | 54 |
| codeclone.pipeline | codeclone/pipeline.py | 0.8955 | non_candidate | 2773 | 8/23 | 149 |
| tests.test_metrics_modules | tests/test_metrics_modules.py | 0.8753 | non_candidate | 628 | 0/4 | 9 |
| tests.test_html_report_helpers | tests/test_html_report_helpers.py | 0.8714 | non_candidate | 580 | 0/15 | 12 |
| tests.test_cfg | tests/test_cfg.py | 0.8683 | non_candidate | 831 | 0/6 | 39 |
| tests.test_metrics_baseline | tests/test_metrics_baseline.py | 0.8647 | non_candidate | 1047 | 0/5 | 31 |
| tests.test_baseline | tests/test_baseline.py | 0.8644 | non_candidate | 1269 | 0/3 | 62 |
| codeclone.report.suggestions | codeclone/report/suggestions.py | 0.8501 | non_candidate | 785 | 6/7 | 40 |
| codeclone.structural_findings | codeclone/structural_findings.py | 0.846 | non_candidate | 1047 | 9/3 | 121 |
| codeclone._html_report._sections._clones | codeclone/_html_report/_sections/_clones.py | 0.8397 | non_candidate | 840 | 2/18 | 67 |
| tests.test_mcp_service | tests/test_mcp_service.py | 0.8366 | non_candidate | 3934 | 0/8 | 57 |
| tests.test_normalize | tests/test_normalize.py | 0.8254 | non_candidate | 479 | 0/4 | 9 |
| tests.test_structural_findings | tests/test_structural_findings.py | 0.8245 | non_candidate | 963 | 0/3 | 17 |
| codeclone.report.derived | codeclone/report/derived.py | 0.819 | non_candidate | 281 | 5/4 | 21 |
| codeclone.report.serialize | codeclone/report/serialize.py | 0.8158 | non_candidate | 878 | 4/3 | 68 |
| codeclone._html_report._sections._meta | codeclone/_html_report/_sections/_meta.py | 0.8146 | non_candidate | 558 | 2/5 | 30 |
| tests.test_mcp_server | tests/test_mcp_server.py | 0.8061 | non_candidate | 733 | 0/4 | 12 |
| tests.test_golden_v2 | tests/test_golden_v2.py | 0.8061 | non_candidate | 338 | 0/10 | 18 |
| tests.test_report_branch_invariants | tests/test_report_branch_invariants.py | 0.7997 | non_candidate | 381 | 0/10 | 7 |
| tests.test_core_branch_coverage | tests/test_core_branch_coverage.py | 0.7977 | non_candidate | 1004 | 0/10 | 13 |
| codeclone._cli_baselines | codeclone/_cli_baselines.py | 0.7949 | non_candidate | 459 | 3/6 | 55 |
| tests.test_scanner_extra | tests/test_scanner_extra.py | 0.7907 | non_candidate | 316 | 0/2 | 20 |
| tests.test_extractor | tests/test_extractor.py | 0.7904 | non_candidate | 1774 | 0/6 | 48 |
| codeclone.normalize | codeclone/normalize.py | 0.7884 | non_candidate | 250 | 15/1 | 20 |
| codeclone._html_report._sections._overview | codeclone/_html_report/_sections/_overview.py | 0.7779 | non_candidate | 1065 | 2/6 | 63 |
| codeclone.blocks | codeclone/blocks.py | 0.7728 | non_candidate | 132 | 5/3 | 17 |
| codeclone._html_report._sections._structural | codeclone/_html_report/_sections/_structural.py | 0.77 | non_candidate | 560 | 3/14 | 22 |
| codeclone.report.markdown | codeclone/report/markdown.py | 0.7692 | non_candidate | 659 | 3/6 | 33 |
| codeclone._html_report._context | codeclone/_html_report/_context.py | 0.7636 | non_candidate | 297 | 11/6 | 17 |
| codeclone._html_report._sections._dependencies | codeclone/_html_report/_sections/_dependencies.py | 0.7617 | non_candidate | 473 | 2/7 | 36 |
| codeclone.metrics.api_surface | codeclone/metrics/api_surface.py | 0.7577 | non_candidate | 421 | 3/3 | 38 |
| codeclone.models | codeclone/models.py | 0.7557 | non_candidate | 425 | 51/0 | 0 |
| codeclone._html_report._assemble | codeclone/_html_report/_assemble.py | 0.7553 | non_candidate | 437 | 1/20 | 11 |
| codeclone._html_snippets | codeclone/_html_snippets.py | 0.7469 | non_candidate | 207 | 9/1 | 27 |
| codeclone.cache_io | codeclone/cache_io.py | 0.7447 | non_candidate | 66 | 3/1 | 0 |
| tests.test_pipeline_metrics | tests/test_pipeline_metrics.py | 0.744 | non_candidate | 1107 | 0/4 | 16 |
| Longest chain ? | Length ? |
|---|---|
| test_htm.._helpers→_assemble→_coupling→_coverage_join→_tables→_context→overview→derived→paths→source_scope→__future__ | 11 |
| test_mcp_server→mcp_server→mcp_service→pipeline→markdown→json_contract→overview→derived→paths→source_scope→__future__ | 11 |
| _assemble→_coupling→_coverage_join→_tables→_context→overview→derived→paths→source_scope→__future__ | 10 |
| mcp_server→mcp_service→pipeline→markdown→json_contract→overview→derived→paths→source_scope→__future__ | 10 |
| test_cli_unit→cli→pipeline→markdown→json_contract→overview→derived→paths→source_scope→__future__ | 10 |
| Name ? | File ? | Line ? | Kind ? | Confidence ? | Rule | Source |
|---|---|---|---|---|---|---|
| resolve_install_target | .github/actions/codeclone/_action_impl.py | 110 | function | high | dead-code | inline_codeclone |