Codebase intelligence for AI and humans: code health scores, auto-generated docs, git analytics, dead code detection, and architectural decisions via MCP.
This report presents the forensic synthetic code analysis of repowise-dev/repowise, a Python project with 3,606 GitHub stars. SynthScan v2.0 examined 498,538 lines of code across 2803 source files, recording 13302 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 42.1 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 13302 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 1 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 3 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 174 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 197 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 199 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 212 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 35 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_procutils.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 131 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 193 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 373 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 750 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 752 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 772 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 774 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 804 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 806 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 885 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 887 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 14 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 580 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 582 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 153 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/pipeline/test_resume.py | 155 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 187 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_traverser.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_traverser.py | 14 | # --------------------------------------------------------------------------- | COMMENT |
| 2626 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/test_procutils.py | 42 | def test_pid_alive_dead_child() -> None: | CODE |
| LOW⚡ | tests/unit/test_procutils.py | 47 | def test_pid_alive_rejects_garbage() -> None: | CODE |
| LOW⚡ | tests/unit/test_procutils.py | 58 | def test_create_token_self_is_stable() -> None: | CODE |
| LOW⚡ | tests/unit/test_procutils.py | 65 | def test_create_token_dead_pid_is_none_or_differs_from_live() -> None: | CODE |
| LOW | tests/unit/test_procutils.py | 76 | def test_create_token_distinguishes_processes() -> None: | CODE |
| LOW⚡ | tests/unit/test_procutils.py | 93 | def test_parent_pid_of_child_is_us() -> None: | CODE |
| LOW⚡ | tests/unit/test_procutils.py | 102 | def test_process_name_of_child_is_python() -> None: | CODE |
| LOW | tests/unit/test_procutils.py | 113 | def test_ancestor_chain_starts_at_parent() -> None: | CODE |
| LOW | tests/unit/test_procutils.py | 124 | def test_ancestor_chain_excludes_self_and_has_no_duplicates() -> None: | CODE |
| LOW⚡ | tests/unit/test_git_commit_rows.py | 50 | def test_commit_sink_collects_full_footprint_including_non_indexable() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 85 | def test_commit_sink_since_ts_drops_old_commits() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 111 | def test_commit_sink_default_none_is_noop() -> None: | CODE |
| LOW⚡ | tests/unit/test_git_commit_rows.py | 136 | def test_build_commit_rows_features_and_ordering() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 175 | def test_build_commit_rows_author_experience_is_cumulative() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 223 | def test_build_commit_rows_truncates_subject() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 238 | def test_build_commit_rows_handles_empty_and_no_changes() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 257 | def test_build_commit_rows_committed_at_parsed() -> None: | CODE |
| LOW | tests/unit/test_platform_telemetry.py | 56 | def test_do_not_track_blocks_send(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW | tests/unit/test_platform_telemetry.py | 62 | def test_stored_disable_blocks_send(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 85 | def test_no_patch_version_leak(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 92 | def test_missing_platform_json_sends_null_anon(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 101 | def test_debug_prints_does_not_send( | CODE |
| LOW | tests/unit/test_git_commit_index.py | 44 | def test_load_commit_index_buckets_per_file() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 79 | def test_load_commit_index_drops_non_indexable_files() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 102 | def test_load_commit_index_captures_multiline_body() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 134 | def test_log_format_arg_has_no_real_null_byte() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 152 | def test_load_commit_index_returns_empty_on_failure() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 159 | def test_load_commit_index_handles_renames() -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 201 | def test_hotspot_classification(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 274 | def test_single_drive_by_commit_is_not_a_hotspot(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 284 | def test_repeated_trivial_commits_are_not_a_hotspot(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 293 | def test_real_activity_is_a_hotspot(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 301 | def test_high_commit_volume_escape_hatch(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 363 | def test_window_anchors_to_most_recent_author(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 381 | def test_stable_classification(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 759 | async def test_git_unavailable_graceful(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 780 | def test_co_change_below_threshold_skipped(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 813 | def test_change_entropy_focused_vs_scattered(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_git_indexer.py | 893 | def test_blame_ownership_computed(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 58 | def test_significant_commit_filter(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 328 | def test_counts_distinct_recent_authors(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 346 | def test_unknown_when_no_timestamps(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 404 | def test_top_authors_carry_per_author_timestamps(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 444 | def _mock_repo_with_old_commits(self) -> tuple[MagicMock, datetime]: | CODE |
| LOW | tests/unit/test_git_indexer.py | 458 | def test_default_uses_wall_clock(self, monkeypatch) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 466 | def test_anchor_to_head_commit(self, monkeypatch) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 479 | def test_include_patterns_match(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 489 | def test_exclude_overrides_include(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 534 | def test_counts_and_attributes_fixes(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 552 | def test_ignores_non_indexable_paths(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 615 | def test_only_target_file_counted(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 646 | def test_binary_file_stats_ignored(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 673 | def test_empty_output_returns_defaults(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 684 | def test_malformed_header_skipped(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 703 | def test_merge_commit_detected(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 720 | def test_rename_tracking_with_follow(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 855 | def test_change_entropy_percentile_silent_when_all_zero(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 867 | def test_change_entropy_percentile_ranks_nonzero(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 920 | def test_get_tracked_files_respects_exclude_patterns(self) -> None: | CODE |
| LOW | tests/unit/test_git_indexer.py | 931 | def test_get_tracked_files_no_exclude_patterns(self) -> None: | CODE |
| 6032 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 3 | CODE | |
| LOW | tests/unit/test_procutils.py | 9 | CODE | |
| LOW | tests/unit/test_git_commit_rows.py | 8 | CODE | |
| LOW | tests/unit/test_platform_telemetry.py | 8 | CODE | |
| LOW | tests/unit/test_git_commit_index.py | 3 | CODE | |
| LOW | tests/unit/test_git_indexer.py | 3 | CODE | |
| LOW | tests/unit/test_csharp_dead_code_markers.py | 9 | CODE | |
| LOW | tests/unit/test_function_blame_rollup.py | 3 | CODE | |
| LOW | tests/unit/pipeline/test_coverage_ingestion.py | 8 | CODE | |
| LOW | tests/unit/pipeline/test_phase_timing.py | 3 | CODE | |
| LOW | tests/unit/pipeline/test_drop_transient_git_signals.py | 11 | CODE | |
| LOW | tests/unit/pipeline/test_parallel_source_reads.py | 8 | CODE | |
| LOW | tests/unit/pipeline/test_cancellation.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_update_graph_convergence.py | 15 | CODE | |
| LOW | tests/unit/pipeline/test_resume.py | 9 | CODE | |
| LOW | …ts/unit/pipeline/test_entry_point_score_persistence.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_modes.py | 3 | CODE | |
| LOW | tests/unit/pipeline/test_checkpoint.py | 7 | CODE | |
| LOW | tests/unit/pipeline/test_kg_refresh.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_ingestion_parse_cache.py | 9 | CODE | |
| LOW | tests/unit/upgrade/test_release.py | 4 | CODE | |
| LOW | tests/unit/upgrade/test_bundled_changelog_sync.py | 10 | CODE | |
| LOW | tests/unit/upgrade/test_changelog.py | 3 | CODE | |
| LOW | tests/unit/upgrade/test_update_check_cache.py | 3 | CODE | |
| LOW | tests/unit/upgrade/test_whats_new.py | 3 | CODE | |
| LOW | tests/unit/upgrade/test_cli_executor.py | 9 | CODE | |
| LOW | tests/unit/upgrade/test_manager.py | 9 | CODE | |
| LOW | tests/unit/upgrade/test_parse_cache_decoupling.py | 8 | CODE | |
| LOW | tests/unit/ingestion/test_rust_framework_edges.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_language_capabilities.py | 20 | CODE | |
| LOW | tests/unit/ingestion/test_jvm_type_refs.py | 7 | CODE | |
| LOW | tests/unit/ingestion/test_jvm_type_refs.py | 13 | CODE | |
| LOW | tests/unit/ingestion/test_rust_resolver.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_rust_resolver.py | 11 | CODE | |
| LOW | tests/unit/ingestion/test_rust_resolver.py | 11 | CODE | |
| LOW | tests/unit/ingestion/test_rust_resolver.py | 11 | CODE | |
| LOW | …sts/unit/ingestion/test_type_ref_defined_name_index.py | 18 | CODE | |
| LOW | tests/unit/ingestion/test_resolver_merged_index.py | 8 | CODE | |
| LOW | tests/unit/ingestion/test_shell_extractors.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_traverser.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_shell_resolver.py | 9 | CODE | |
| LOW | tests/unit/ingestion/test_author_identity.py | 9 | CODE | |
| LOW | tests/unit/ingestion/test_cpp_dynamic_hints.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_swift_same_module.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_jvm_calls.py | 4 | CODE | |
| LOW | tests/unit/ingestion/test_jvm_calls.py | 9 | CODE | |
| LOW | tests/unit/ingestion/test_typescript_resolver.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_agent_provenance.py | 9 | CODE | |
| LOW | tests/unit/ingestion/test_csharp_resolver.py | 10 | CODE | |
| LOW | tests/unit/ingestion/test_rust_dynamic_hints.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_typo3_framework_edges.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_git_deep_commit_index.py | 13 | CODE | |
| LOW | tests/unit/ingestion/test_git_rename_markers.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_ts_reexport_dead_code.py | 11 | CODE | |
| LOW | tests/unit/ingestion/test_cpp_header_pairs.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_ts_framework_edges.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_laravel_framework_edges.py | 3 | CODE | |
| LOW | tests/unit/ingestion/test_c_type_use.py | 17 | CODE | |
| LOW | tests/unit/ingestion/test_cpp_framework_edges.py | 4 | CODE | |
| LOW | tests/unit/ingestion/test_dynamic_hints_per_language.py | 3 | CODE | |
| 2630 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 31 | except Exception: | CODE |
| LOW⚡ | tests/unit/pipeline/test_cancellation.py | 65 | except Exception: | CODE |
| LOW | tests/unit/pipeline/test_update_graph_convergence.py | 70 | except Exception: | CODE |
| LOW | tests/unit/health/test_dataflow_langs.py | 29 | except Exception: | CODE |
| LOW | tests/unit/health/test_complexity_walker.py | 47 | except Exception: | CODE |
| LOW | tests/unit/health/test_ff_track_d_exceptions.py | 31 | except Exception: | CODE |
| LOW | tests/unit/health/test_ff_track_d_exceptions.py | 35 | except Exception: | CODE |
| MEDIUM | tests/unit/health/test_dataflow_facts.py | 21 | def _require_python() -> None: | CODE |
| LOW | tests/unit/health/test_dataflow_facts.py | 24 | except Exception: | CODE |
| LOW | tests/unit/health/test_perf_promotion.py | 24 | except Exception: | CODE |
| MEDIUM | tests/unit/health/test_perf_promotion.py | 21 | def _require_python() -> None: | CODE |
| LOW | tests/unit/health/test_error_handling.py | 146 | except Exception: | CODE |
| LOW | tests/unit/health/test_error_handling.py | 150 | except Exception: | CODE |
| LOW | tests/unit/health/test_ff_track_bch_complexity.py | 31 | except Exception: # pragma: no cover - depends on optional deps | CODE |
| LOW | tests/unit/health/test_refactoring_extract_method.py | 53 | except Exception: | STRING |
| MEDIUM | tests/unit/health/test_refactoring_extract_method.py | 50 | def _require_python() -> None: | CODE |
| MEDIUM | tests/unit/health/test_dataflow_cfg.py | 25 | def _require_python() -> None: | CODE |
| MEDIUM | tests/unit/health/test_dataflow_cfg.py | 222 | def f(): | CODE |
| LOW | tests/unit/health/test_dataflow_cfg.py | 28 | except Exception: | CODE |
| LOW⚡ | tests/unit/health/test_dataflow_cfg.py | 404 | except Exception: | STRING |
| LOW | tests/unit/health/test_perf_promotion_engine.py | 20 | except Exception: | CODE |
| MEDIUM | tests/unit/health/test_perf_promotion_engine.py | 17 | def _require_python() -> None: | CODE |
| MEDIUM | tests/unit/health/test_dataflow_reaching.py | 24 | def _require_python() -> None: | CODE |
| LOW | tests/unit/health/test_dataflow_reaching.py | 27 | except Exception: | CODE |
| LOW | tests/integration/test_health_perf_benchmark.py | 70 | except Exception: | CODE |
| LOW | tests/integration/test_health_perf_benchmark.py | 110 | except Exception: | CODE |
| LOW | tests/integration/test_cpp_dead_code.py | 51 | except Exception: | CODE |
| LOW | tests/integration/test_health_coverage_integration.py | 32 | except Exception: | CODE |
| LOW | tests/integration/test_jvm_dead_code.py | 53 | except Exception: | CODE |
| LOW | tests/integration/test_dead_code_integration.py | 31 | except Exception: | CODE |
| LOW | tests/integration/test_persistence.py | 100 | except Exception: | CODE |
| LOW | tests/integration/test_generation_pipeline.py | 191 | except Exception: | CODE |
| LOW | tests/integration/persistence/test_sql_job_store_pg.py | 28 | except Exception as exc: # pragma: no cover - skip when Docker missing | CODE |
| MEDIUM | tests/integration/persistence/test_sql_job_store_pg.py | 24 | def postgres_container(): | CODE |
| LOW | tests/integration/persistence/test_graph_metrics_pg.py | 32 | except Exception as exc: # pragma: no cover - skip when Docker missing | CODE |
| MEDIUM | tests/integration/persistence/test_graph_metrics_pg.py | 28 | def postgres_container(): | CODE |
| LOW | tests/integration/persistence/test_embed_batch_pg.py | 33 | except Exception as exc: # pragma: no cover - skip when Docker / image missing | CODE |
| MEDIUM | tests/integration/persistence/test_embed_batch_pg.py | 29 | def pgvector_container(): | CODE |
| LOW | scripts/benchmark_large_repo.py | 148 | except Exception: | CODE |
| LOW | scripts/validate_quality.py | 40 | except Exception: | CODE |
| LOW | scripts/validate_quality.py | 181 | except Exception as exc: | CODE |
| LOW | scripts/benchmark_upgrade.py | 55 | except Exception: | CODE |
| LOW | scripts/benchmark_upgrade.py | 136 | except Exception: | CODE |
| LOW | scripts/kg_validate/run.py | 163 | except Exception as exc: | CODE |
| LOW | packages/core/src/repowise/core/fsutils.py | 22 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/procutils.py | 258 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/procutils.py | 288 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/procutils.py | 306 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/procutils.py | 327 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/procutils.py | 354 | except Exception: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/checkpoint.py | 163 | except Exception as exc: # checkpointing must never break a run | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 128 | except Exception as exc: # analysis is non-load-bearing for persistence | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 240 | except Exception as exc: # materialization is non-load-bearing | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 250 | except Exception as exc: # materialization is non-load-bearing | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 641 | except Exception as _sec_err: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 746 | except Exception as _snap_err: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 772 | except Exception as _purge_err: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 803 | except Exception as _evo_err: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 818 | except Exception as _stale_err: | CODE |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 850 | except Exception as _gov_err: | CODE |
| 719 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/health/test_function_hotspot.py | 14 | CODE | |
| LOW | tests/unit/health/test_refactoring_split_file.py | 129 | CODE | |
| LOW | tests/unit/persistence/test_decision_supersession.py | 30 | CODE | |
| LOW | tests/unit/generation/test_layer_pages.py | 195 | CODE | |
| LOW | packages/core/src/repowise/core/update_lock.py | 98 | CODE | |
| LOW | packages/core/src/repowise/core/fs_walk.py | 237 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/checkpoint.py | 143 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 144 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 684 | CODE | |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 155 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 45 | CODE | |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 180 | CODE | |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 484 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 71 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 144 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 246 | CODE | |
| LOW | packages/core/src/repowise/core/upgrade/manager.py | 124 | CODE | |
| LOW | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 153 | CODE | |
| LOW | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 245 | CODE | |
| LOW | …kages/core/src/repowise/core/ingestion/import_index.py | 38 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 349 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 552 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 595 | CODE | |
| LOW | …ges/core/src/repowise/core/ingestion/parser_helpers.py | 26 | CODE | |
| LOW | …ges/core/src/repowise/core/ingestion/parser_helpers.py | 217 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 37 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 102 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 191 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 263 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 138 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 560 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 600 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 667 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 686 | CODE | |
| LOW | …es/core/src/repowise/core/ingestion/change_detector.py | 119 | CODE | |
| LOW | …es/core/src/repowise/core/ingestion/change_detector.py | 260 | CODE | |
| LOW | …/repowise/core/ingestion/git_indexer/function_blame.py | 124 | CODE | |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/indexer.py | 312 | CODE | |
| LOW | …epowise/core/ingestion/git_indexer/agent_provenance.py | 366 | CODE | |
| LOW | …rc/repowise/core/ingestion/git_indexer/file_history.py | 134 | CODE | |
| LOW | …rc/repowise/core/ingestion/git_indexer/file_history.py | 220 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 156 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 271 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 423 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 459 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 659 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/bazel.py | 80 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/bazel.py | 120 | CODE | |
| LOW | …e/src/repowise/core/ingestion/external_systems/pypi.py | 50 | CODE | |
| LOW | …/src/repowise/core/ingestion/external_systems/maven.py | 80 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/graph/_resolvers.py | 29 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/graph/_resolvers.py | 186 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/graph/_resolvers.py | 244 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/graph/_resolvers.py | 311 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/graph/_resolvers.py | 470 | CODE | |
| LOW | …src/repowise/core/ingestion/graph/_centrality_cache.py | 107 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph/builder.py | 251 | CODE | |
| LOW | …core/src/repowise/core/ingestion/graph/_betweenness.py | 105 | CODE | |
| LOW | …rc/repowise/core/ingestion/lightweight_imports/lean.py | 40 | CODE | |
| LOW | …repowise/core/ingestion/lightweight_imports/clojure.py | 36 | CODE | |
| 336 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/ingestion/parser/conftest.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_csharp.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_misc.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_swift.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_python.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_kotlin.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_java.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_cpp.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_ruby.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_scala.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_php.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_go.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_typescript.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_luau.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/test_rust.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/ingestion/parser/_helpers.py | 0 | unit tests for the unified astparser. tests parse inline byte strings so no filesystem i/o is needed. covers python, typ | STRING |
| HIGH | tests/unit/server/mcp/conftest.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_search.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_why.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_risk.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_dead_code.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_config.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_context.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_overview.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/server/mcp/test_health.py | 0 | unit tests for repowise mcp server tools. tests all 9 mcp tools using an in-memory sqlite database with pre-populated te | STRING |
| HIGH | tests/unit/test_providers/test_openai_provider.py | 0 | unit tests for openrouterprovider. all tests mock the asyncopenai client — no real api calls are made. | STRING |
| HIGH | tests/unit/test_providers/test_kimi_provider.py | 0 | unit tests for openrouterprovider. all tests mock the asyncopenai client — no real api calls are made. | STRING |
| HIGH | tests/unit/test_providers/test_deepseek_provider.py | 0 | unit tests for openrouterprovider. all tests mock the asyncopenai client — no real api calls are made. | STRING |
| HIGH | tests/unit/test_providers/test_openrouter_provider.py | 0 | unit tests for openrouterprovider. all tests mock the asyncopenai client — no real api calls are made. | STRING |
| HIGH | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 0 | pipeline analysis phase. extracted from the former monolithic ``orchestrator.py``; ``run_pipeline`` (in orchestrator.py) | STRING |
| HIGH | packages/core/src/repowise/core/pipeline/phases/git.py | 0 | pipeline analysis phase. extracted from the former monolithic ``orchestrator.py``; ``run_pipeline`` (in orchestrator.py) | STRING |
| HIGH | …s/core/src/repowise/core/pipeline/phases/generation.py | 0 | pipeline analysis phase. extracted from the former monolithic ``orchestrator.py``; ``run_pipeline`` (in orchestrator.py) | STRING |
| HIGH | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 0 | pipeline analysis phase. extracted from the former monolithic ``orchestrator.py``; ``run_pipeline`` (in orchestrator.py) | STRING |
| HIGH | …kages/core/src/repowise/core/analysis/decision_gate.py | 0 | back-compat façade — moved to ``repowise.core.analysis.decisions.evolution``. import from the new path; this re-export k | STRING |
| HIGH | …core/src/repowise/core/analysis/decision_provenance.py | 0 | back-compat façade — moved to ``repowise.core.analysis.decisions.evolution``. import from the new path; this re-export k | STRING |
| HIGH | …/src/repowise/core/analysis/decision_semantic_match.py | 0 | back-compat façade — moved to ``repowise.core.analysis.decisions.evolution``. import from the new path; this re-export k | STRING |
| HIGH | …/core/src/repowise/core/analysis/decision_extractor.py | 0 | back-compat façade — moved to ``repowise.core.analysis.decisions.evolution``. import from the new path; this re-export k | STRING |
| HIGH | …/core/src/repowise/core/analysis/decision_evolution.py | 0 | back-compat façade — moved to ``repowise.core.analysis.decisions.evolution``. import from the new path; this re-export k | STRING |
| HIGH | …src/repowise/core/workspace/extractors/grpc/dialect.py | 0 | return the contracts found in *ctx* (may be empty). | STRING |
| HIGH | …src/repowise/core/workspace/extractors/http/dialect.py | 0 | return the contracts found in *ctx* (may be empty). | STRING |
| HIGH | …src/repowise/core/workspace/extractors/data/dialect.py | 0 | return the contracts found in *ctx* (may be empty). | STRING |
| HIGH | packages/core/src/repowise/core/distill/missed_mcp.py | 0 | only shell tool_use lines and result lines are worth parsing. | STRING |
| HIGH | packages/core/src/repowise/core/distill/corrections.py | 0 | only shell tool_use lines and result lines are worth parsing. | STRING |
| HIGH | packages/core/src/repowise/core/distill/missed.py | 0 | only shell tool_use lines and result lines are worth parsing. | STRING |
| HIGH | packages/core/src/repowise/core/persistence/crud/git.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …src/repowise/core/persistence/crud/external_systems.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …/src/repowise/core/persistence/crud/knowledge_graph.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …s/core/src/repowise/core/persistence/crud/decisions.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …kages/core/src/repowise/core/persistence/crud/graph.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …ckages/core/src/repowise/core/persistence/crud/chat.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …kages/core/src/repowise/core/persistence/crud/pages.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| HIGH | …/core/src/repowise/core/persistence/crud/repository.py | 0 | crud operations for the repository domain (repowise persistence layer). split out of the former monolithic ``crud.py``; | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/server/mcp/test_mcp_exclude_filter.py | 155 | def _set_excluded(monkeypatch, tmp_path, pattern: str) -> None: | CODE |
| LOW⚡ | tests/unit/cli/test_workspace_cmd.py | 463 | def _setup(self, root: Path) -> None: | CODE |
| LOW | tests/unit/persistence/conftest.py | 58 | __all__ = ["insert_repo", "make_page_kwargs", "make_repo_kwargs"] | CODE |
| LOW | packages/core/src/repowise/core/cancellation.py | 63 | def set_active_token(token: CancellationToken | None) -> None: | CODE |
| LOW | packages/core/src/repowise/core/fs_walk.py | 44 | __all__ = ["PRUNED_DIRS", "PRUNED_DIRS_DERIVED", "WalkSnapshot", "iter_glob", "walk_repo"] | CODE |
| LOW | packages/core/src/repowise/core/pipeline/checkpoint.py | 38 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/pipeline/__init__.py | 28 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/pipeline/modes.py | 20 | __all__ = ["OrchestratorMode"] | CODE |
| LOW | …es/core/src/repowise/core/pipeline/resume/rehydrate.py | 28 | __all__ = [ | CODE |
| LOW | …ges/core/src/repowise/core/pipeline/resume/__init__.py | 23 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/release.py | 172 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/version.py | 49 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/registry.py | 68 | __all__ = ["MIGRATIONS", "Migration", "migrations_between"] | CODE |
| LOW | packages/core/src/repowise/core/upgrade/__init__.py | 28 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/changelog.py | 144 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/manager.py | 175 | __all__ = ["UpgradeContext", "apply_auto", "assess", "stamp"] | CODE |
| LOW | packages/core/src/repowise/core/upgrade/verdict.py | 83 | __all__ = [ | CODE |
| LOW | …/core/src/repowise/core/ingestion/python_local_refs.py | 49 | __all__ = ["extract_python_local_refs"] | CODE |
| LOW | packages/core/src/repowise/core/ingestion/__init__.py | 34 | __all__ = [ | CODE |
| LOW | …ckages/core/src/repowise/core/ingestion/parse_cache.py | 47 | __all__ = ["ParseCache", "parser_fingerprint"] | CODE |
| LOW | …e/src/repowise/core/ingestion/git_indexer/co_change.py | 35 | __all__ = ["compute_co_changes", "compute_co_changes_and_entropy"] | CODE |
| LOW | …core/src/repowise/core/ingestion/git_indexer/enrich.py | 27 | __all__ = [ | CODE |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/records.py | 13 | __all__ = [ | CODE |
| LOW | …re/src/repowise/core/ingestion/git_indexer/__init__.py | 54 | __all__ = [ | CODE |
| LOW | …/repowise/core/ingestion/git_indexer/function_blame.py | 33 | __all__ = [ | CODE |
| LOW | …re/src/repowise/core/ingestion/git_indexer/backfill.py | 32 | __all__ = ["BACKFILL_BLAME_PHASE", "BACKFILL_PHASE", "backfill_blame", "backfill_full_tier"] | CODE |
| LOW | …c/repowise/core/ingestion/git_indexer/prior_defects.py | 39 | __all__ = ["compute_prior_defects"] | CODE |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/indexer.py | 40 | __all__ = ["GitIndexer"] | CODE |
| LOW | …epowise/core/ingestion/git_indexer/agent_provenance.py | 69 | __all__ = [ | CODE |
| LOW | …rc/repowise/core/ingestion/git_indexer/file_history.py | 77 | __all__ = ["index_file", "new_meta"] | CODE |
| LOW | …/core/src/repowise/core/ingestion/git_indexer/tiers.py | 15 | __all__ = ["GitIndexTier"] | CODE |
| LOW | …/src/repowise/core/ingestion/external_systems/cmake.py | 778 | __all__ = [ | CODE |
| LOW | …c/repowise/core/ingestion/external_systems/__init__.py | 24 | __all__ = [ | CODE |
| LOW⚡ | …/src/repowise/core/ingestion/external_systems/bazel.py | 316 | __all__ = [ | CODE |
| LOW | …kages/core/src/repowise/core/ingestion/graph/_edges.py | 69 | def update_co_change_edges(self, updated_meta: dict, min_count: int = 3) -> None: | CODE |
| LOW | …src/repowise/core/ingestion/graph/_centrality_cache.py | 39 | __all__ = ["CentralityCache", "subgraph_signature"] | CODE |
| LOW | …ges/core/src/repowise/core/ingestion/graph/__init__.py | 41 | __all__ = ["GraphBuilder", "_stem_priority", "build_stem_map"] | CODE |
| LOW | …ages/core/src/repowise/core/ingestion/graph/builder.py | 121 | def set_tsconfig_resolver(self, resolver: Any) -> None: | CODE |
| LOW | …epowise/core/ingestion/lightweight_imports/__init__.py | 54 | __all__ = [ | CODE |
| LOW | …core/src/repowise/core/ingestion/languages/__init__.py | 15 | __all__ = ["REGISTRY", "LanguageSpec"] | CODE |
| LOW | …rc/repowise/core/ingestion/languages/specs/__init__.py | 133 | __all__ = ["ALL_SPECS"] | CODE |
| LOW | …rc/repowise/core/ingestion/framework_edges/__init__.py | 106 | __all__ = [ | CODE |
| LOW | …src/repowise/core/ingestion/resolvers/kotlin_gradle.py | 18 | __all__ = [ | CODE |
| LOW | …core/src/repowise/core/ingestion/resolvers/__init__.py | 78 | __all__ = [ | CODE |
| LOW | …src/repowise/core/ingestion/resolvers/cpp_workspace.py | 446 | __all__ = [ | CODE |
| LOW | …c/repowise/core/ingestion/resolvers/dotnet/__init__.py | 20 | __all__ = [ | CODE |
| LOW | …/src/repowise/core/ingestion/dynamic_hints/__init__.py | 6 | __all__ = ["HintRegistry", "DynamicEdge", "DynamicHintExtractor"] | CODE |
| LOW | …ore/src/repowise/core/ingestion/dynamic_hints/_walk.py | 26 | __all__ = ["PRUNED_DIRS", "iter_glob"] | CODE |
| LOW | …ore/src/repowise/core/ingestion/extractors/__init__.py | 10 | __all__ = [ | CODE |
| LOW | …epowise/core/ingestion/extractors/heritage/__init__.py | 120 | __all__ = ["HERITAGE_EXTRACTORS", "extract_heritage", "heritage_node_types_for"] | CODE |
| LOW | …epowise/core/ingestion/extractors/bindings/__init__.py | 68 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/analysis/kg_curation.py | 152 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/analysis/kg_curation.py | 162 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/core/src/repowise/core/analysis/dead_code/__init__.py | 37 | __all__ = [ | CODE |
| LOW | …ges/core/src/repowise/core/analysis/health/__init__.py | 18 | __all__ = [ | CODE |
| LOW | …src/repowise/core/analysis/health/dataflow/__init__.py | 68 | __all__ = [ | CODE |
| LOW | …ise/core/analysis/health/dataflow/dialects/__init__.py | 47 | __all__ = [ | CODE |
| LOW | …c/repowise/core/analysis/health/biomarkers/__init__.py | 8 | __all__ = [ | CODE |
| LOW | …src/repowise/core/analysis/health/complexity/walker.py | 67 | __all__ = [ | CODE |
| LOW | …c/repowise/core/analysis/health/complexity/__init__.py | 18 | __all__ = [ | CODE |
| 127 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/ingestion/test_jvm_type_refs.py | 225 | "package com.foo\nclass Holder { val r: Repo? = null }\n", | CODE |
| HIGH⚡ | tests/unit/ingestion/test_ts_reexport_dead_code.py | 99 | "pkg/src/comp/search-bar.tsx": "export function SearchBar() {\n return null;\n}\n", | CODE |
| HIGH | tests/unit/ingestion/test_ts_reexport_dead_code.py | 116 | "pkg/src/widget.tsx": "export function Widget() {\n return null;\n}\n", | CODE |
| HIGH | tests/unit/ingestion/test_ts_framework_edges.py | 109 | "export function getUserHandler() { return null; }\n" | CODE |
| HIGH⚡ | tests/unit/health/test_dataflow_langs.py | 1010 | out.push(r); | CODE |
| HIGH | tests/unit/health/test_dataflow_langs.py | 369 | results.push(r); | CODE |
| HIGH | tests/unit/health/test_dataflow_langs.py | 904 | results.push(*r); | CODE |
| HIGH⚡ | tests/unit/health/test_complexity_walker.py | 126 | if (req.query.active && req.user) { | CODE |
| HIGH⚡ | tests/unit/health/test_ff_track_aefg_perf.py | 220 | b" acc.push(x);\n" | CODE |
| HIGH⚡ | tests/unit/health/test_perf_dialects.py | 512 | push = "function f(xs){ return xs.reduce((acc, x) => { acc.push(x); return acc; }, []); }" | CODE |
| HIGH⚡ | tests/unit/health/test_shell_complexity.py | 26 | assert _ccn("run || exit 1") == 2 | CODE |
| HIGH⚡ | tests/unit/health/test_shell_complexity.py | 29 | assert _ccn("a && b || c") == 3 | CODE |
| HIGH⚡ | tests/unit/health/test_shell_complexity.py | 29 | assert _ccn("a && b || c") == 3 | CODE |
| HIGH | tests/unit/health/test_dataflow_cfg.py | 382 | if (dead && hot) return "unified"; | STRING |
| HIGH | tests/unit/health/test_perf_promotion_engine.py | 163 | out.push(r); | CODE |
| HIGH⚡ | tests/unit/workspace/test_contracts.py | 431 | router.push("/home"); | CODE |
| HIGH | tests/unit/distill/test_rewrite_hook.py | 97 | "pytest && echo done", | CODE |
| HIGH | tests/unit/distill/test_rewrite_hook.py | 98 | "pytest || true", | CODE |
| HIGH⚡ | tests/unit/distill/test_corrections.py | 377 | ("cd /tmp && ls -la", "ls"), | CODE |
| HIGH | …e/analysis/health/biomarkers/array_spread_in_reduce.py | 5 | The fix is to mutate-and-return the accumulator (``a.push(x); return a``) or use | STRING |
| HIGH | packages/core/src/repowise/core/persistence/search.py | 5 | - PostgreSQL: GIN index on ``to_tsvector('english', title || content)``. | STRING |
| HIGH | …src/repowise/server/mcp_server/tool_context/targets.py | 517 | sym = sym_matches[0] # type: ignore[possibly-undefined] | CODE |
| HIGH | …src/repowise/server/mcp_server/tool_context/targets.py | 541 | if len(sym_matches) > 1: # type: ignore[possibly-undefined] | CODE |
| HIGH | …src/repowise/server/mcp_server/tool_context/targets.py | 545 | for m in sym_matches[1:5] # type: ignore[possibly-undefined] | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 65 | ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || exit 0 | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 67 | HEAD=$(git rev-parse HEAD 2>/dev/null) || HEAD="" | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 68 | TS=$(date +%s 2>/dev/null) || TS="" | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 71 | > "$ROOT/.repowise/.update.queued" 2>/dev/null || true | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 76 | "$(date 2>/dev/null)" "$HEAD" | CODE |
| HIGH⚡ | packages/cli/src/repowise/cli/hooks.py | 77 | } >> "$LOG" 2>/dev/null || true | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/dead_code/test_interfaces.py | 161 | # so the strongest assertion is "no spurious COM clamp masked the | COMMENT |
| LOW | docs/design/no-raw-hex-check.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/kg_validate/kg_checks.py | 21 | COMMENT | |
| LOW | scripts/kg_validate/kg_checks.py | 41 | SMALL_REPO_FILES = 10 | COMMENT |
| LOW | packages/ui/scripts/no-raw-hex-check.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/ui/scripts/ui-gates.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/ui/src/docs/docs-tree.tsx | 341 | deterministic.push(page); | COMMENT |
| LOW | packages/ui/src/docs/docs-tree.tsx | 401 | return best; | COMMENT |
| LOW | packages/ui/src/docs/reader-persona.ts | 1 | // Reader personas — a client-side lens that filters which sections of a | COMMENT |
| LOW | packages/core/src/repowise/core/rate_limiter.py | 41 | COMMENT | |
| LOW | …es/core/src/repowise/core/pipeline/resume/rehydrate.py | 61 | COMMENT | |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 61 | # Process-pool worker (module-level — must be picklable) | COMMENT |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 401 | logger.warning("dynamic_hints_failed", error=str(hints_exc)) | COMMENT |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 381 | node_type = def_node.type | COMMENT |
| LOW | …ges/core/src/repowise/core/ingestion/parser_helpers.py | 641 | return text | COMMENT |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 101 | "Builds", | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 61 | _MIN_MESSAGE_LEN = 12 | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 81 | # Per-file persisted contributor / commit fan-out. Previously hard-coded | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 121 | # meaningfully blowing up wall-clock time (single `git log` call). | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 161 | ), | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 321 | # Co-change temporal decay: half-life ~125 days (lambda for exp(-t/tau)). | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 341 | # threshold the health biomarkers already treat as hotspot-equivalent. | COMMENT |
| LOW | …/src/repowise/core/ingestion/git_indexer/_constants.py | 361 | # Files larger than this skip git blame. blame is O(lines) and blocks the | COMMENT |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/records.py | 21 | "_parse_commit_record", | COMMENT |
| LOW | …ages/core/src/repowise/core/ingestion/graph/builder.py | 401 | COMMENT | |
| LOW | …ages/core/src/repowise/core/ingestion/graph/builder.py | 421 | self._resolve_csharp_partials(ctx, progress=progress) | COMMENT |
| LOW | …ges/core/src/repowise/core/ingestion/languages/spec.py | 41 | COMMENT | |
| LOW | …ges/core/src/repowise/core/ingestion/languages/spec.py | 61 | # entry_stems: the flag set is deliberately tighter than the tour's | COMMENT |
| LOW | …ges/core/src/repowise/core/ingestion/languages/spec.py | 81 | # it never faces the test suite in the tour. | COMMENT |
| LOW | …ges/core/src/repowise/core/ingestion/languages/spec.py | 101 | suite_anchor_stems: tuple[str, ...] = () | COMMENT |
| LOW | …e/src/repowise/core/ingestion/framework_edges/typo3.py | 21 | COMMENT | |
| LOW | …ges/core/src/repowise/core/ingestion/resolvers/luau.py | 41 | from .context import ResolverContext | COMMENT |
| LOW | …src/repowise/core/ingestion/resolvers/jvm_workspace.py | 41 | re.MULTILINE, | COMMENT |
| LOW | …owise/core/ingestion/resolvers/dotnet/namespace_map.py | 21 | COMMENT | |
| LOW | …core/src/repowise/core/ingestion/dynamic_hints/xaml.py | 101 | COMMENT | |
| LOW | …re/src/repowise/core/ingestion/dynamic_hints/dotnet.py | 61 | COMMENT | |
| LOW | packages/core/src/repowise/core/analysis/kg_curation.py | 61 | # per-extension; fixture files hold test data, they never face the suite. | COMMENT |
| LOW | packages/core/src/repowise/core/analysis/kg_curation.py | 441 | COMMENT | |
| LOW | …core/src/repowise/core/analysis/dead_code/constants.py | 101 | # gRPC generated artifacts. | COMMENT |
| LOW | …core/src/repowise/core/analysis/dead_code/constants.py | 121 | # `[DllImport]`-mediated calls, never via a `using` directive that | COMMENT |
| LOW | …core/src/repowise/core/analysis/dead_code/constants.py | 501 | "**/fuzz/fuzz_targets/**/*.rs", | COMMENT |
| LOW | …core/src/repowise/core/analysis/dead_code/constants.py | 541 | "*zz_generated*.go", | COMMENT |
| LOW | …core/src/repowise/core/analysis/dead_code/constants.py | 941 | # locally-named Group instance, e.g.:: | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 61 | ) | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 121 | "Main", # C#, Java, Kotlin, Go, Rust, Swift, Scala | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 181 | "TEST_CLASS", | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 681 | COMMENT | |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 741 | if sym.get("visibility") != "public": | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 841 | # node with every type name referenced inside its own | COMMENT |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 881 | COMMENT | |
| LOW | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 921 | # so the demo doesn't ship public-API interfaces as | COMMENT |
| LOW | …c/repowise/core/analysis/dead_code/contract_methods.py | 61 | # Method names reserved by JVM ``Object`` / ``Serializable`` / ``Comparable`` / | COMMENT |
| LOW | …c/repowise/core/analysis/dead_code/contract_methods.py | 101 | # limit). Listed explicitly so a single set lookup covers the case. | COMMENT |
| LOW | …kages/core/src/repowise/core/analysis/health/models.py | 81 | # refactoring package here (it imports this module). | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 61 | Severity.HIGH: 1.2, | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 81 | # non-predictive at T0 are floored to 0.5 (kept as mild maintainability/parity | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 101 | "god_class": 1.13, | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 121 | "primitive_obsession": 0.5, | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 181 | # score into dimensions is purely additive: ``maintainability`` and | COMMENT |
| LOW | …ages/core/src/repowise/core/analysis/health/scoring.py | 321 | # conservative ceiling for this first release (a file loses at most two | COMMENT |
| 90 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 270 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 285 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 296 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_kimi_provider.py | 176 | mock_client.return_value.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/test_providers/test_kimi_provider.py | 273 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_deepseek_provider.py | 170 | mock_client.return_value.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/test_providers/test_deepseek_provider.py | 196 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openrouter_provider.py | 339 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_openrouter_provider.py | 320 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/server/mcp/test_code_rationale.py | 212 | "# The symbol cap is 40 because dense files flood the context window.\n" | STRING |
| MEDIUM | docs/architecture/ARCHITECTURE.md | 126 | │ │ │ │ ├── context_assembler.py# context assembly (RAG + graph + git + source) | CODE |
| MEDIUM | docs/architecture/chat.md | 18 | 7. [Agentic Loop](#7-agentic-loop) | CODE |
| MEDIUM | docs/architecture/language-support.md | 115 | parser.py # ASTParser (language-agnostic orchestration) | CODE |
| MEDIUM | packages/core/src/repowise/core/upgrade/version.py | 46 | #: state.json key holding the embedding model id the vectors were built with. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/upgrade/manager.py | 94 | # be format-current yet hold vectors from a different embedding model (#426), | COMMENT |
| MEDIUM | …re/src/repowise/core/ingestion/git_indexer/backfill.py | 37 | # orchestration; named so callers can distinguish a blame-only backfill from | COMMENT |
| MEDIUM | …re/src/repowise/core/ingestion/dynamic_hints/dotnet.py | 101 | # in microservice repos, so we emit dynamic edges to *every* | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1634 | # Recognised scaffolding earns a real role instead of a bare name | COMMENT |
| MEDIUM⚡ | …core/src/repowise/core/analysis/decisions/extractor.py | 1278 | # Anti-hallucination substring gate (Phase 1D) | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/decisions/extractor.py | 97 | # anti-hallucination substring gate (Phase 1D). | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/decisions/extractor.py | 1465 | # Raw per-source pool, then the anti-hallucination gate. | COMMENT |
| MEDIUM⚡ | …ore/src/repowise/core/analysis/decisions/provenance.py | 105 | # Anti-hallucination substring gate | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/workspace/update.py | 512 | # Workspace update orchestration | COMMENT |
| MEDIUM | packages/core/src/repowise/core/persistence/models.py | 649 | # Verification (anti-hallucination gate, Phase 1D). Aggregate over the | COMMENT |
| MEDIUM⚡ | …ages/core/src/repowise/core/generation/interlinking.py | 30 | # qualified names. The same expression used by the hallucination | COMMENT |
| MEDIUM⚡ | …ages/core/src/repowise/core/generation/interlinking.py | 169 | # Top-level orchestration | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 136 | # RAG search is bypassed entirely until the vector store has at least | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 240 | # cross-run reuse can key on it even when the rendered prompt (RAG | COMMENT |
| MEDIUM | …/core/src/repowise/core/generation/well_known_files.py | 21 | # scaffolding that shows up in almost every repo, where the filename alone is | COMMENT |
| MEDIUM⚡ | …re/src/repowise/core/generation/page_generator/core.py | 193 | # generate_all — orchestration (delegates to orchestrate.py) | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 264 | # RAG context: query vector store for related pages (B1). | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 422 | # rendered prompt embeds RAG context rebuilt fresh each run, so the | COMMENT |
| MEDIUM⚡ | …repowise/core/generation/page_generator/orchestrate.py | 454 | # next level's RAG search depends on these landing in the store. | COMMENT |
| MEDIUM⚡ | …repowise/core/generation/page_generator/orchestrate.py | 455 | # Embedding is a RAG enhancement, not load-bearing, so a failure must | COMMENT |
| MEDIUM | …repowise/core/generation/page_generator/orchestrate.py | 401 | # embedder round-trip and the level drains before the next level's RAG | COMMENT |
| MEDIUM | …/src/repowise/core/generation/page_generator/levels.py | 157 | # Store too small for useful RAG — the per-page gate would | COMMENT |
| MEDIUM | packages/server/src/repowise/server/app.py | 107 | # Honour the indexed embedding model so serve doesn't silently rebuild | COMMENT |
| MEDIUM | packages/server/src/repowise/server/routers/chat.py | 152 | # agentic loop internally (e.g. Gemini for thought_signature). | COMMENT |
| MEDIUM | …rver/src/repowise/server/mcp_server/_answer_context.py | 174 | return "## Context scaffolding\n\n" + "\n".join(f"- {s}" for s in sections) + "\n" | CODE |
| MEDIUM | …ckages/server/src/repowise/server/mcp_server/_state.py | 26 | # initialise we still fall back to MockEmbedder (so non-RAG tools stay up) but | COMMENT |
| MEDIUM | …s/server/src/repowise/server/mcp_server/tool_symbol.py | 70 | # can never blow up the agent's context window. Set to ~18 KB of source: | COMMENT |
| MEDIUM | …r/src/repowise/server/mcp_server/tool_answer/config.py | 123 | # (b) synthesis hallucination on tangential top hits. | COMMENT |
| MEDIUM | …r/src/repowise/server/mcp_server/tool_answer/answer.py | 850 | # call, zero LLM cost, and cannot hallucinate. Not cached: extraction is | COMMENT |
| MEDIUM | …r/src/repowise/server/mcp_server/tool_answer/answer.py | 908 | # dropped before formatting, so the prompt never carries hollow scaffolding. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | package-lock.json | 15494 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| LOW⚡ | tests/unit/ingestion/test_typescript_resolver.py | 296 | # resolver's job upstream; here we just return None. | COMMENT |
| MEDIUM | …sts/unit/ingestion/test_git_commit_rows_integration.py | 85 | # robust assertion; the precise boundary is covered by the unit test.) | COMMENT |
| MEDIUM⚡ | tests/unit/health/test_dataflow_reaching.py | 358 | # compute_def_use + compute_reaching can be driven without the file harness. | STRING |
| MEDIUM | tests/unit/server/test_mcp_decision_graph.py | 113 | content="# Test Repo\n\nA comprehensive test repository.", | CODE |
| MEDIUM | tests/unit/server/test_job_executor.py | 187 | """Unknown / missing / malformed style resolves to the comprehensive default.""" | STRING |
| MEDIUM | tests/unit/server/mcp/conftest.py | 103 | content="# Test Repo\n\nA comprehensive test repository.", | CODE |
| MEDIUM | tests/unit/server/mcp/test_health.py | 78 | # Per-file leverage: (8 - score) * nloc, 0 once healthy. | COMMENT |
| MEDIUM | tests/unit/generation/test_layer_pages.py | 347 | # Reuse the level-5 fixture harness verbatim. | COMMENT |
| MEDIUM | scripts/kg_validate/matrix.toml | 184 | # resolution at harness-friendly size. | COMMENT |
| MEDIUM | scripts/kg_validate/matrix.toml | 191 | # --- Structural-mode batch (no resolver; harness-only acceptance) --- | COMMENT |
| MEDIUM | packages/ui/src/health/findings-view.tsx | 208 | // not group size, so "Leverage" sorted stays leverage-led inside and out. | COMMENT |
| MEDIUM | …/repowise/core/ingestion/git_indexer/function_blame.py | 226 | # parser robust to out-of-order line emission from --incremental. | COMMENT |
| MEDIUM | …ges/core/src/repowise/core/ingestion/languages/spec.py | 50 | # Consumed by the KG validation harness (density floors, honesty checks); | COMMENT |
| MEDIUM | …e/src/repowise/core/ingestion/extractors/visibility.py | 193 | # nodes — but textual matching is robust across grammar versions. | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/analysis/kg_curation.py | 1087 | # The harness signal is "this test file *depends on* that one" — type | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 78 | # harness uses, calibrated on the 13-repo matrix: express (1.89, broken CJS | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1173 | # consumers (UI, harness) can see the degradation level. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1238 | # Shared test harness files — base classes and helpers imported by two | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1278 | # Drop harness files unless that would leave nothing. One | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1279 | # single-target import from another test file is already harness | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/dead_code/constants.py | 493 | # `#[cfg(test)] mod tests;` and the Cargo test harness, not production imports. | COMMENT |
| MEDIUM | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 167 | # ---- libFuzzer / Honggfuzz / AFL fuzz harness entries ------------ | COMMENT |
| MEDIUM | …se/core/analysis/health/biomarkers/untested_hotspot.py | 55 | # Not enough leverage to flag — would over-trigger on | COMMENT |
| MEDIUM | …wise/core/analysis/health/complexity/class_analysis.py | 262 | # keys off that index directly (robust to duplicate method names, which a | COMMENT |
| MEDIUM | packages/core/src/repowise/core/distill/corrections.py | 50 | #: stringly (cancellations, rejections, permission denials, harness errors) | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/distill/corrections.py | 221 | # rejections, and harness errors are neither failure nor success. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 152 | # ``generation.styles.resolve_style``. "comprehensive" (default) is inert and | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 151 | # Resolve the wiki style once. "comprehensive" (default) is inert, so this | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 603 | # styles, so default ("comprehensive") pages keep byte-identical metadata. | COMMENT |
| MEDIUM⚡ | …s/core/src/repowise/core/generation/styles/registry.py | 33 | # Built-in styles (see WIKI_STYLES_PLAN.md D1). ``comprehensive`` is inert by | COMMENT |
| MEDIUM | …s/core/src/repowise/core/generation/styles/registry.py | 160 | """Resolve a style name to a :class:`StyleSpec`, defaulting to ``comprehensive``. | STRING |
| MEDIUM | …s/server/src/repowise/server/mcp_server/tool_health.py | 591 | # impact_delta sort buries the highest-leverage plans — a Split File on a | COMMENT |
| MEDIUM | …s/server/src/repowise/server/mcp_server/tool_health.py | 593 | # per-file delta, so file leverage has to lead. ``refactoring_plans_total`` | COMMENT |
| MEDIUM | …src/repowise/server/mcp_server/tool_context/targets.py | 188 | # counts are small, so picking in Python is robust and cheap. | COMMENT |
| LOW | packages/cli/src/repowise/cli/commands/costs_cmd.py | 127 | # would just return an empty result and confuse the user. | COMMENT |
| LOW | …ages/cli/src/repowise/cli/commands/init_cmd/command.py | 893 | # resolve_provider / interactive provider selection may have just set | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/claude-code/commands/init.md | 10 | ## Step 1: Check if repowise is installed | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 27 | ## Step 2: Check if this repo is already indexed | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 38 | ## Step 3: Ask about mode | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 103 | ## Step 4: Provider selection (full mode only) | COMMENT |
| LOW⚡ | plugins/claude-code/commands/init.md | 136 | ## Step 5: Exclusions | COMMENT |
| LOW⚡ | plugins/claude-code/commands/init.md | 144 | ## Step 6: Run it | COMMENT |
| LOW⚡ | plugins/claude-code/commands/init.md | 150 | ## Step 7: Post-setup | COMMENT |
| LOW | website/getting-started.md | 97 | ### Step 1: Install the plugin | COMMENT |
| LOW | website/getting-started.md | 106 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 171 | ### Step 1: Install repowise | COMMENT |
| LOW⚡ | website/getting-started.md | 177 | ### Step 2: Set your API key | COMMENT |
| LOW⚡ | website/getting-started.md | 185 | ### Step 3: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 194 | ### Step 4: Connect Claude Code | COMMENT |
| LOW⚡ | website/getting-started.md | 210 | ### Step 1: Install repowise and Codex | COMMENT |
| LOW⚡ | website/getting-started.md | 219 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 228 | ### Step 3: Start Codex | COMMENT |
| LOW⚡ | website/getting-started.md | 242 | ### Step 1: Install and set up | COMMENT |
| LOW⚡ | website/getting-started.md | 249 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 256 | ### Step 3: Start the web dashboard | COMMENT |
| LOW⚡ | website/getting-started.md | 264 | ### Step 4: Start the MCP server (optional) | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 351 | # Step 1: Get overview | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 358 | # Step 2: Drill into auth module via get_context. | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 367 | # Step 3: Get file context | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 374 | # Step 4: Look up a symbol | COMMENT |
| LOW | docs/architecture/language-support.md | 140 | ### Step 1: Add a `LanguageSpec` module | COMMENT |
| LOW | docs/architecture/language-support.md | 174 | ### Step 2: Add the `LanguageTag` | COMMENT |
| LOW | docs/architecture/language-support.md | 181 | ### Step 3: Write a tree-sitter query file | COMMENT |
| LOW | docs/architecture/language-support.md | 201 | ### Step 4: Add a `LanguageConfig` entry | COMMENT |
| LOW | docs/architecture/language-support.md | 222 | ### Step 5: Add the tree-sitter grammar dependency | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 131 | # Step 1: try path alias entries. | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 141 | # Step 2: baseUrl-only fallback. | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 548 | # Step 1: Determine which repos are stale | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 557 | # Step 0: Sync ``last_commit_at_index`` from each repo's state.json so | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 741 | # Step 3: Save workspace config with updated timestamps | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 745 | # Step 4: Run cross-repo hooks (Phase 3/4 placeholder) | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 617 | # Step 2: Update stale repos (parallel with concurrency limit) | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 411 | # Step 1: Parse git logs for all repos | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 418 | # Step 2: Drop noise files, then commits left with nothing, then | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 434 | # Step 3: Group all commits by author identity, tagged with repo alias | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 440 | # Step 4: Walk each author's sessions, accumulating per-file activity | COMMENT |
| LOW | …s/core/src/repowise/core/generation/knowledge_graph.py | 327 | # Step 1: main entry point | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 454 | # Step 1: Select repos to index | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 463 | # Step 2: Select primary repo | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 548 | # Step 3: Create workspace config | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 629 | # Step 5: Cross-repo analysis (co-changes, package deps, contracts) | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 632 | # Step 6: Register primary repo with configured editor clients | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 638 | # Step 7: Completion summary | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 566 | # Step 4: Index each selected repo (always generate_docs=False; generation is separate) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/integration/test_mcp.py | 351 | # Step 1: Get overview | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 358 | # Step 2: Drill into auth module via get_context. | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 367 | # Step 3: Get file context | COMMENT |
| LOW⚡ | tests/integration/test_mcp.py | 374 | # Step 4: Look up a symbol | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 131 | # Step 1: try path alias entries. | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 141 | # Step 2: baseUrl-only fallback. | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 548 | # Step 1: Determine which repos are stale | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 557 | # Step 0: Sync ``last_commit_at_index`` from each repo's state.json so | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 741 | # Step 3: Save workspace config with updated timestamps | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 745 | # Step 4: Run cross-repo hooks (Phase 3/4 placeholder) | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 617 | # Step 2: Update stale repos (parallel with concurrency limit) | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 411 | # Step 1: Parse git logs for all repos | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 418 | # Step 2: Drop noise files, then commits left with nothing, then | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 434 | # Step 3: Group all commits by author identity, tagged with repo alias | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 440 | # Step 4: Walk each author's sessions, accumulating per-file activity | COMMENT |
| LOW | …s/core/src/repowise/core/generation/knowledge_graph.py | 327 | # Step 1: main entry point | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 454 | # Step 1: Select repos to index | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 463 | # Step 2: Select primary repo | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 548 | # Step 3: Create workspace config | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 629 | # Step 5: Cross-repo analysis (co-changes, package deps, contracts) | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 632 | # Step 6: Register primary repo with configured editor clients | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 638 | # Step 7: Completion summary | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 566 | # Step 4: Index each selected repo (always generate_docs=False; generation is separate) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/ingestion/test_author_identity.py | 63 | assert owner_key("Jane Doe", None) == "name:Jane Doe" | CODE |
| LOW⚡ | tests/unit/ingestion/test_author_identity.py | 83 | ("Jane Doe", "jane@company.com"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_author_identity.py | 84 | ("Jane Doe", "12345+jane@users.noreply.github.com"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_author_identity.py | 87 | assert resolve("Jane Doe", "jane@company.com") == "jane@company.com" | CODE |
| LOW⚡ | tests/unit/ingestion/test_author_identity.py | 88 | assert resolve("Jane Doe", "12345+jane@users.noreply.github.com") == "jane@company.com" | CODE |
| LOW | tests/unit/ingestion/test_author_identity.py | 115 | ("Jane Doe", "jane@company.com"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_agent_provenance.py | 139 | prov = _classify(an="Jane Doe", ae="jane@anthropic.com") | CODE |
| LOW⚡ | tests/unit/workspace/test_update.py | 110 | ["git", "config", "user.email", "test@test.com"], | CODE |
| LOW | tests/unit/workspace/test_incremental_update.py | 43 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/unit/workspace/test_cross_repo.py | 60 | author_name="Jane Doe", | CODE |
| LOW⚡ | tests/unit/server/test_stats_contributors.py | 45 | _commit("a1", "Jane Doe", "jane@company.com", 1000), | CODE |
| LOW⚡ | tests/unit/server/test_stats_contributors.py | 46 | _commit("a2", "Jane Doe", "12345+jane@users.noreply.github.com", 1100), | CODE |
| LOW⚡ | tests/unit/server/test_stats_contributors.py | 47 | _commit("a3", "Jane Doe", "999+jane@users.noreply.github.com", 1200), | CODE |
| LOW⚡ | tests/unit/server/test_stats_contributors.py | 71 | _commit("a1", "Jane Doe", "jane@company.com", 1_600_000_000), | CODE |
| LOW⚡ | tests/unit/server/test_stats_contributors.py | 72 | _commit("a2", "Jane Doe", "jane@company.com", 1_600_086_400), | CODE |
| LOW | tests/unit/server/test_stats_superlatives.py | 26 | "author_name": "Jane Doe", | CODE |
| LOW⚡ | tests/unit/server/test_owners.py | 208 | primary_owner_name="Jane Doe", | CODE |
| LOW⚡ | tests/unit/server/test_owners.py | 211 | [{"name": "Jane Doe", "email": "jane@company.com", "commit_count": 10}] | CODE |
| LOW⚡ | tests/unit/server/test_owners.py | 221 | primary_owner_name="Jane Doe", | CODE |
| LOW⚡ | tests/unit/server/test_owners.py | 226 | "name": "Jane Doe", | CODE |
| LOW | tests/unit/server/test_owners.py | 243 | assert jane.name == "Jane Doe" | CODE |
| LOW | tests/unit/server/test_stats_signals.py | 31 | "author_name": "Jane Doe", | CODE |
| LOW | tests/unit/server/mcp/test_ff_mcp_payload_overview.py | 26 | "primary_owner_name": "Jane Doe", | CODE |
| LOW⚡ | tests/unit/server/mcp/test_ff_mcp_payload_overview.py | 53 | assert top["name"] == "Jane Doe" | CODE |
| LOW⚡ | tests/unit/server/mcp/test_ff_mcp_payload_overview.py | 63 | assert _owner_display_name("Jane Doe", "jane.doe@example.com") == "Jane Doe" | CODE |
| LOW | tests/unit/cli/test_update_e2e.py | 36 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 206 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 220 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 231 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 242 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 137 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 149 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 165 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 185 | provider = GeminiProvider(api_key="fake-key") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/workspace/test_registry.py | 35 | # Create an empty wiki.db — init_db will create tables on first access | COMMENT |
| MEDIUM⚡ | tests/unit/cli/test_workspace_cmd.py | 312 | # Create a git repo inside the workspace root | COMMENT |
| MEDIUM | tests/unit/cli/test_workspace_cmd.py | 192 | # Create a subdirectory that has no workspace config anywhere in its tree | COMMENT |
| MEDIUM⚡ | tests/integration/test_dead_code_integration.py | 68 | # Create a mock provider | COMMENT |
| MEDIUM⚡ | tests/integration/test_git_intelligence_integration.py | 32 | # Create a temp dir with a file so GitIndexer has something to look at, | COMMENT |
| MEDIUM⚡ | …kages/server/src/repowise/server/mcp_server/_server.py | 386 | # Create the MCP server | COMMENT |
| MEDIUM | …ages/cli/src/repowise/cli/commands/init_cmd/command.py | 963 | # Create the engine, session factory, and repository row *before* | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/pipeline/test_ingestion_parse_cache.py | 17 | (repo / "util.py").write_text("def helper(x):\n return x + 1\n", encoding="utf-8") | CODE |
| LOW | tests/unit/pipeline/test_ingestion_parse_cache.py | 52 | "def helper(x):\n return x * 3\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_resolver_merged_index.py | 62 | "lib.py": ("python", "def helper():\n return 1\n"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_resolver_merged_index.py | 84 | "a_lib.py": ("python", "def helper():\n return 'a'\n"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_resolver_merged_index.py | 85 | "z_lib.py": ("python", "def helper():\n return 'z'\n"), | CODE |
| LOW⚡ | tests/unit/ingestion/test_resolver_merged_index.py | 152 | "class Other:\n def helper(self):\n return 1\n" | CODE |
| LOW⚡ | tests/unit/ingestion/test_traverser.py | 81 | (tmp_path / "src" / "utils.py").write_text("def helper(): pass") | CODE |
| LOW | tests/unit/ingestion/test_single_query_pass.py | 32 | def helper(arg: str) -> str: | CODE |
| LOW⚡ | tests/unit/ingestion/test_subgraph_cache.py | 40 | gb.add_file(_parsed(tmp_path, "b.py", "def helper():\n return 1\n")) | CODE |
| LOW | tests/unit/ingestion/test_centrality_cache.py | 20 | _UTIL = "def helper(x):\n return x + 1\n" | CODE |
| LOW | tests/unit/ingestion/test_metrics_precompute.py | 36 | "b.py": "def helper():\n return 1\n", | CODE |
| LOW | tests/unit/ingestion/test_parse_cache.py | 24 | "def helper(x):\n return x + 1\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_parse_cache.py | 82 | "def helper(x):\n return x * 2\n\n\ndef extra(y):\n return y\n", | CODE |
| LOW | tests/unit/ingestion/parser/test_scala.py | 21 | private def helper(): Unit = {} | CODE |
| LOW⚡ | tests/unit/health/test_perf_crossfn.py | 99 | b"def helper(session, r):\n" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/health/test_coverage_biomarkers.py | 15 | CODE | |
| LOW | tests/unit/generation/conftest.py | 49 | CODE | |
| LOW | tests/unit/generation/test_onboarding.py | 97 | CODE | |
| LOW | tests/unit/generation/test_workspace_claude_md.py | 37 | CODE | |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 155 | CODE | |
| LOW | …s/core/src/repowise/core/pipeline/phases/generation.py | 22 | CODE | |
| LOW | …kages/core/src/repowise/core/analysis/health/engine.py | 767 | CODE | |
| LOW | …s/core/src/repowise/core/persistence/crud/decisions.py | 59 | CODE | |
| LOW | …kages/core/src/repowise/core/persistence/crud/pages.py | 29 | CODE | |
| LOW | …src/repowise/core/generation/page_generator/pertype.py | 92 | CODE | |
| LOW | …re/src/repowise/core/generation/page_generator/core.py | 196 | CODE | |
| LOW | …ckages/server/src/repowise/server/routers/decisions.py | 35 | CODE | |
| LOW | packages/server/src/repowise/server/routers/symbols.py | 125 | CODE | |
| LOW | …rc/repowise/server/routers/code_health/files_routes.py | 40 | CODE | |
| LOW | …erver/src/repowise/server/mcp_server/tool_dead_code.py | 215 | CODE | |
| LOW | packages/cli/src/repowise/cli/ui/result_panels.py | 16 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/update_cmd/command.py | 268 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/update_cmd/command.py | 316 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 404 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …kages/core/src/repowise/core/providers/llm/registry.py | 92 | Instantiate a provider by name. Providers are imported lazily — only the requested provider's dependencies need | STRING |
| HIGH | packages/core/src/repowise/core/providers/llm/base.py | 143 | Generate a response from the LLM. Args: system_prompt: System-level instructions (role, output form | STRING |
| HIGH | …core/src/repowise/core/providers/embedding/registry.py | 54 | Instantiate an embedder by name. Args: name: Embedder identifier ('openai', 'gemini', 'mock'). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/repowise/core/ingestion/resolvers/rust_workspace.py | 248 | # Check if this is a proc-macro crate | COMMENT |
| LOW | …ges/core/src/repowise/core/ingestion/resolvers/rust.py | 106 | # Check if it might be a local module at the crate root first | COMMENT |
| LOW | …/repowise/core/ingestion/dynamic_hints/pytest_hints.py | 92 | # Check if any test function uses a fixture from this conftest | COMMENT |
| LOW | …ges/core/src/repowise/core/analysis/execution_flows.py | 177 | # Check if the containing file is marked as an entry point | COMMENT |
| LOW | …repowise/core/analysis/health/complexity/cyclomatic.py | 270 | # Check if this is a case/arm inside a flat match — skip it. | COMMENT |
| LOW | …core/src/repowise/core/analysis/decisions/extractor.py | 1373 | # Check if the commit message shares meaningful | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/scanner.py | 95 | # Check if root itself is a git repo | COMMENT |
| LOW | packages/server/src/repowise/server/routers/jobs.py | 182 | # Check if client disconnected | COMMENT |
| LOW | …rver/src/repowise/server/mcp_server/tool_dependency.py | 250 | # Check if they're in completely disconnected components | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/USER_GUIDE.md | 155 | ├── AGENTS.md # Auto-generated Codex context when enabled | CODE |