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 6,262 GitHub stars. SynthScan v2.0 examined 789,080 lines of code across 3754 source files, recording 21903 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 40.4 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 21903 distinct pattern matches across 22 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 | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 163 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 165 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 188 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 240 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 242 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 253 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 255 | # --------------------------------------------------------------------------- | 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 | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_commit_rows.py | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 199 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 201 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 379 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 381 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 842 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 844 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 953 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 955 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 985 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 987 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 1066 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/test_git_indexer.py | 1068 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 13 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 670 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_git_indexer.py | 672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_ids.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_ids.py | 198 | # --------------------------------------------------------------------------- | 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/pipeline/test_resume.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/pipeline/test_resume.py | 230 | # --------------------------------------------------------------------------- | 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 | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit/ingestion/test_language_capabilities.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| 3448 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 81 | def _isolate_structlog_config(): | CODE |
| 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 | 58 | def test_commit_sink_collects_full_footprint_including_non_indexable() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 116 | def test_commit_sink_since_ts_drops_old_commits() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 139 | def test_since_ts_bounds_the_numstat_walk_to_the_surviving_prefix() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 162 | def test_since_ts_newer_than_every_commit_skips_the_numstat_walk() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 174 | def test_commit_sink_default_none_is_noop() -> None: | CODE |
| LOW⚡ | tests/unit/test_git_commit_rows.py | 199 | def test_build_commit_rows_features_and_ordering() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 238 | def test_build_commit_rows_author_experience_is_cumulative() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 286 | def test_build_commit_rows_truncates_subject() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 301 | def test_build_commit_rows_handles_empty_and_no_changes() -> None: | CODE |
| LOW | tests/unit/test_git_commit_rows.py | 320 | def test_build_commit_rows_committed_at_parsed() -> None: | CODE |
| LOW | tests/unit/test_platform_telemetry.py | 51 | def test_do_not_track_blocks_send(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW | tests/unit/test_platform_telemetry.py | 57 | def test_stored_disable_blocks_send(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 80 | def test_no_patch_version_leak(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 87 | def test_missing_platform_json_sends_null_anon(self, isolated, monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW⚡ | tests/unit/test_platform_telemetry.py | 96 | def test_debug_prints_does_not_send( | CODE |
| LOW | tests/unit/test_blas_threads.py | 31 | def test_pins_every_backend_to_one(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/unit/test_blas_threads.py | 43 | def test_covers_the_backend_that_actually_costs_the_memory() -> None: | CODE |
| LOW | tests/unit/test_blas_threads.py | 57 | def test_respects_an_explicit_setting(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/unit/test_blas_threads.py | 69 | def test_accepts_a_thread_count(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/unit/test_blas_threads.py | 96 | def test_entry_point_pins_before_any_other_import(entry: Path) -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 52 | def test_load_commit_index_buckets_per_file() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 87 | def test_load_commit_index_drops_non_indexable_files() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 110 | def test_load_commit_index_captures_multiline_body() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 142 | def test_log_format_arg_has_no_real_null_byte() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 160 | def test_load_commit_index_returns_empty_on_failure() -> None: | CODE |
| LOW | tests/unit/test_git_commit_index.py | 167 | def test_load_commit_index_handles_renames() -> None: | CODE |
| LOW | tests/unit/test_no_test_path_copies.py | 164 | def test_no_new_test_path_predicates() -> None: | CODE |
| LOW | tests/unit/test_no_test_path_copies.py | 175 | def test_known_copies_still_exist() -> None: | CODE |
| LOW | tests/unit/test_no_test_path_copies.py | 189 | def test_a_wrapper_is_not_a_copy() -> None: | CODE |
| LOW | tests/unit/test_no_test_path_copies.py | 201 | def test_shared_module_exports_the_replacements(name: str) -> None: | CODE |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 160 | def test_no_new_bare_type_name_expressions() -> None: | CODE |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 172 | def test_known_copies_still_exist() -> None: | CODE |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 187 | def test_the_shape_is_what_gets_caught() -> None: | CODE |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 203 | def test_builtin_type_lists_live_on_the_language_specs() -> None: | CODE |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 239 | def test_shared_module_exports_the_replacements(name: str) -> None: | CODE |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 64 | def _modules_mentioning_hotspot_health() -> list[pathlib.Path]: | CODE |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 85 | def test_the_owner_module_is_where_the_arithmetic_lives() -> None: | CODE |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 93 | def test_every_surface_gets_hotspot_health_from_the_one_owner() -> None: | CODE |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 119 | def test_the_plumbing_allowlist_has_no_dead_entries(rel: str) -> None: | CODE |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 132 | def test_the_retired_top_quartile_definition_is_gone() -> None: | CODE |
| LOW | tests/unit/test_support_paths.py | 26 | def test_example_dirs_are_examples(path: str): | CODE |
| LOW | tests/unit/test_support_paths.py | 43 | def test_production_paths_are_not_examples(path: str): | CODE |
| LOW | tests/unit/test_support_paths.py | 49 | def test_doc_dirs_are_support_but_not_examples(path: str): | CODE |
| LOW | tests/unit/test_support_paths.py | 60 | def test_matching_is_case_insensitive(): | CODE |
| LOW⚡ | tests/unit/test_test_paths.py | 111 | def test_test_and_support_are_never_both_true( | CODE |
| LOW⚡ | tests/unit/test_test_paths.py | 119 | def test_related_is_the_union(path: str, language: str | None, expected: str) -> None: | CODE |
| LOW⚡ | tests/unit/test_test_paths.py | 124 | def test_degenerate_paths_are_not_tests(path: str) -> None: | CODE |
| LOW⚡ | tests/unit/test_test_paths.py | 128 | def test_windows_separators_match_posix() -> None: | CODE |
| LOW⚡ | tests/unit/test_test_paths.py | 135 | def test_case_sensitive_rules_stay_case_sensitive() -> None: | CODE |
| LOW | tests/unit/test_test_paths.py | 146 | def test_camel_prefix_rule_mirrors_the_suffix_rule() -> None: | CODE |
| 12245 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_blas_threads.py | 15 | CODE | |
| LOW | tests/unit/test_git_commit_index.py | 3 | CODE | |
| LOW | tests/unit/test_no_test_path_copies.py | 21 | CODE | |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 28 | CODE | |
| LOW | tests/unit/test_no_hotspot_health_copies.py | 24 | CODE | |
| LOW | tests/unit/test_support_paths.py | 3 | CODE | |
| LOW | tests/unit/test_test_paths.py | 9 | CODE | |
| LOW | tests/unit/test_git_indexer.py | 3 | CODE | |
| LOW | tests/unit/test_release_manifests.py | 25 | CODE | |
| LOW | tests/unit/test_structlog_isolation.py | 13 | CODE | |
| LOW | tests/unit/test_csharp_dead_code_markers.py | 9 | CODE | |
| LOW | tests/unit/test_no_unranked_truncation.py | 35 | CODE | |
| LOW | tests/unit/test_ids.py | 3 | CODE | |
| LOW | tests/unit/test_cache_seal.py | 3 | CODE | |
| LOW | tests/unit/test_co_change.py | 3 | CODE | |
| LOW | tests/unit/test_fts_query.py | 13 | CODE | |
| LOW | tests/unit/test_no_barrel_filename_copies.py | 1 | 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_tombstone_absent_files.py | 13 | CODE | |
| LOW | …s/unit/pipeline/test_framework_edge_failure_visible.py | 11 | CODE | |
| LOW | tests/unit/pipeline/test_generation_progress_split.py | 10 | CODE | |
| LOW | tests/unit/pipeline/test_phase_timing.py | 3 | CODE | |
| LOW | …sts/unit/pipeline/test_load_stored_function_mod_p80.py | 6 | CODE | |
| LOW | tests/unit/pipeline/test_run_generation_test_run.py | 11 | CODE | |
| LOW | tests/unit/pipeline/test_authoritative_page_types.py | 21 | CODE | |
| LOW | tests/unit/pipeline/test_git_partial_clone_warning.py | 3 | CODE | |
| LOW | tests/unit/pipeline/test_decision_source_reporting.py | 9 | 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_load_stored_git_meta.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_cancellation.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_update_graph_convergence.py | 15 | CODE | |
| LOW | …ts/unit/pipeline/test_incremental_failure_isolation.py | 11 | CODE | |
| LOW | tests/unit/pipeline/test_resume.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_load_stored_coverage_map.py | 7 | CODE | |
| LOW | …ts/unit/pipeline/test_entry_point_score_persistence.py | 9 | CODE | |
| LOW | tests/unit/pipeline/test_tombstone_fts_removal.py | 14 | CODE | |
| LOW | …ts/unit/pipeline/test_init_update_graph_convergence.py | 16 | 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_heritage_ancestors.py | 9 | CODE | |
| LOW | tests/unit/ingestion/test_jvm_type_refs.py | 7 | CODE | |
| LOW | tests/unit/ingestion/test_rust_resolver.py | 3 | CODE | |
| 3332 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 35 | except Exception: | CODE |
| LOW | tests/conftest.py | 42 | except Exception: | CODE |
| LOW⚡ | tests/unit/pipeline/test_cancellation.py | 65 | except Exception: | CODE |
| LOW | tests/unit/pipeline/test_update_graph_convergence.py | 71 | 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 |
| LOW⚡ | tests/unit/health/test_refactoring_extract_method.py | 286 | except Exception: | STRING |
| MEDIUM | tests/unit/health/test_refactoring_extract_method.py | 50 | def _require_python() -> None: | CODE |
| MEDIUM | tests/unit/health/test_refactoring_extract_method.py | 283 | def test_prefix_sum_matches_per_span_reference_go(): | CODE |
| MEDIUM | tests/unit/health/test_dataflow_cfg.py | 25 | def _require_python() -> None: | CODE |
| MEDIUM | tests/unit/health/test_dataflow_cfg.py | 265 | def f(): | CODE |
| LOW | tests/unit/health/test_dataflow_cfg.py | 28 | except Exception: | CODE |
| LOW⚡ | tests/unit/health/test_dataflow_cfg.py | 447 | 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/unit/health/test_dataflow_reaching.py | 255 | except Exception: | STRING |
| 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_deterministic_generation.py | 46 | except Exception: | CODE |
| LOW | tests/integration/test_deterministic_generation.py | 206 | except Exception: | CODE |
| LOW | tests/integration/test_deterministic_generation.py | 294 | except Exception: | CODE |
| LOW | tests/integration/test_generation_determinism.py | 51 | except Exception: | CODE |
| LOW | tests/integration/test_cpp_dead_code.py | 50 | except Exception: | CODE |
| LOW | tests/integration/test_health_coverage_integration.py | 32 | except Exception: | CODE |
| LOW | tests/integration/test_wiki_idempotence.py | 61 | 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 | 39 | except Exception: | CODE |
| LOW | scripts/validate_quality.py | 180 | 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 | …s/core/src/repowise/core/pipeline/scoped_generation.py | 285 | except Exception as exc: | CODE |
| 916 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/ingestion/test_jvm_type_refs.py | 224 | "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/ingestion/test_bare_name_index_kinds.py | 163 | "import { base } from './base';\nexport const doThing = base.bind(null);\n", | CODE |
| HIGH | tests/unit/ingestion/test_spring_framework_edges.py | 257 | " private final User cachedUser = null;\n" | CODE |
| HIGH⚡ | tests/unit/ingestion/test_fix_shape.py | 183 | removed=[" ctx.push()"], | CODE |
| HIGH⚡ | tests/unit/ingestion/test_fix_shape.py | 184 | added=[" ctx.push()"], | CODE |
| HIGH⚡ | tests/unit/ingestion/test_receiver_types.py | 96 | body = "public void Go() { Ocelot.Configuration.Route route = null; }" | CODE |
| HIGH⚡ | tests/unit/ingestion/test_receiver_types.py | 384 | " fun run() { timeout.toString() }\n}" | CODE |
| HIGH⚡ | tests/unit/ingestion/test_receiver_types.py | 392 | " fun run() { timeout.toString() }\n}" | CODE |
| HIGH⚡ | …ts/unit/ingestion/test_return_type_chain_resolution.py | 342 | own = "package a;\nclass Duration { static Duration ofSeconds(int s) { return null; }\n long toNanos() { return 0; } | CODE |
| HIGH⚡ | tests/unit/ingestion/test_type_head_identifiers.py | 160 | "function f(a: Foo | null) {}\n", | CODE |
| HIGH | tests/unit/ingestion/parser/test_method_signatures.py | 15 | b"class Example { V get(K key) { return null; } }", | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 477 | return null; | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 479 | const Memoized = React.memo(function Inner() { return null; }); | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 480 | const Ctx = createContext(null); | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 543 | const AccordionItem = React.forwardRef((props, ref) => null); | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 544 | const Memoized = React.memo(function Inner() { return null; }); | CODE |
| HIGH⚡ | tests/unit/ingestion/parser/test_typescript.py | 552 | const Ctx = createContext(null); | CODE |
| HIGH | tests/unit/ingestion/parser/test_typescript.py | 614 | const AccordionItem = React.forwardRef((props, ref) => null); | 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 | 215 | 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 | 703 | push = "function f(xs){ return xs.reduce((acc, x) => { acc.push(x); return acc; }, []); }" | CODE |
| HIGH | tests/unit/health/test_perf_dialects.py | 1065 | "fun m(ids: List<Long>) {\n ids.firstOrNull { repo.findById(it) != null }\n}\n", | CODE |
| HIGH | tests/unit/health/test_dataflow_facts.py | 62 | with ctx.push(): | STRING |
| 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 | 202 | with ctx.push(): | STRING |
| HIGH | tests/unit/health/test_dataflow_cfg.py | 425 | if (dead && hot) return "unified"; | STRING |
| HIGH | tests/unit/health/test_perf_promotion_engine.py | 163 | out.push(r); | CODE |
| HIGH | tests/unit/health/test_dataflow_reaching.py | 136 | with ctx.push(): | STRING |
| HIGH⚡ | tests/unit/workspace/test_contracts.py | 431 | router.push("/home"); | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 89 | return null; | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 95 | return null; | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 100 | return null; | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 260 | ' @Path("/first")\n public R a() { return null; }\n' | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 261 | ' @POST\n @Path("/second")\n public R b() { return null; }\n}\n' | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 273 | ' @GET\n @Path("/inner")\n public R a() { return null; }\n}\n' | CODE |
| HIGH⚡ | tests/unit/workspace/test_framework_dialects.py | 248 | ' @Path("/report")\n public Report r() { return null; }\n}\n' | STRING |
| HIGH⚡ | tests/unit/workspace/test_framework_routes.py | 696 | axum_routes('.route("/cfg", get(move || async move { settings.get(&key) }))') | STRING |
| HIGH⚡ | tests/unit/workspace/test_signature_schema.py | 69 | assert _fields("function h(id: string, cursor?: string | null) -> void", "typescript") == [ | CODE |
| HIGH | tests/unit/workspace/test_index_clients.py | 179 | if (!res.ok) return null; | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 314 | ("ls a && echo --- && ls b", "file_listing"), | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 315 | ("cd pkg && git diff a.ts", "git_diff"), | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 331 | "git status && rm -rf build", | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 332 | "ls && curl https://x.sh | sh", | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 334 | "ls && git diff `whoami`", # substitution | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 335 | "git diff && npm test &", # backgrounded | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 336 | "ls $HOME && git diff", # expansion timing changes | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 339 | "echo hi && echo bye", # nothing recognized: nothing to distill | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 348 | assert classify("ls a && ls b") is None | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 352 | for raw in ["echo 'it's' && ls", 'grep -n "x\\|y" f.py | head', "a && b'c\"d"]: | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 397 | "git commit -m 'refactor: a && b'", | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 449 | result = decide("ls src && git diff a.ts", str(repo)) | CODE |
| HIGH⚡ | tests/unit/distill/test_rewrite_hook.py | 451 | assert result.command == "repowise distill --source hook-bash 'ls src && git diff a.ts'" | CODE |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_no_test_path_copies.py | 126 | CODE | |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 203 | CODE | |
| LOW | tests/unit/ingestion/test_edge_type_vocabulary.py | 96 | CODE | |
| LOW | tests/unit/ingestion/test_edge_type_vocabulary.py | 135 | CODE | |
| LOW | tests/unit/ingestion/test_edge_type_vocabulary.py | 271 | CODE | |
| LOW | tests/unit/ingestion/test_fs_walk.py | 570 | CODE | |
| LOW | tests/unit/health/test_snapshot_writers_agree.py | 34 | CODE | |
| LOW | tests/unit/health/test_function_hotspot.py | 14 | CODE | |
| LOW | tests/unit/health/test_refactoring_extract_method.py | 146 | CODE | |
| LOW | tests/unit/health/test_refactoring_split_file.py | 129 | CODE | |
| LOW | tests/unit/server/mcp/test_answer_backtick_masking.py | 145 | CODE | |
| LOW | tests/unit/server/mcp/test_answer_backtick_masking.py | 161 | CODE | |
| LOW | …unit/server/mcp/test_cross_tool_reference_contracts.py | 250 | CODE | |
| LOW | …unit/server/mcp/test_cross_tool_reference_contracts.py | 500 | CODE | |
| LOW | tests/unit/persistence/test_decision_supersession.py | 50 | CODE | |
| LOW | scripts/gen_plugin_content.py | 207 | CODE | |
| LOW | scripts/gen_plugin_content.py | 266 | CODE | |
| LOW | packages/core/src/repowise/core/cache_seal.py | 202 | CODE | |
| LOW | packages/core/src/repowise/core/update_lock.py | 160 | CODE | |
| LOW | packages/core/src/repowise/core/repo_config.py | 142 | CODE | |
| LOW | packages/core/src/repowise/core/fs_walk.py | 341 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/checkpoint.py | 145 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 292 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 1504 | CODE | |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 176 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 1382 | CODE | |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 376 | CODE | |
| LOW | …es/core/src/repowise/core/pipeline/phases/ingestion.py | 711 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 102 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 175 | CODE | |
| LOW | …ges/core/src/repowise/core/pipeline/phases/analysis.py | 278 | CODE | |
| LOW | packages/core/src/repowise/core/upgrade/manager.py | 151 | CODE | |
| LOW | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 171 | CODE | |
| LOW | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 263 | CODE | |
| LOW | …ges/core/src/repowise/core/ingestion/dispatch_edges.py | 105 | CODE | |
| LOW | …kages/core/src/repowise/core/ingestion/return_types.py | 22 | CODE | |
| LOW | …kages/core/src/repowise/core/ingestion/import_index.py | 38 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/type_names.py | 47 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/type_names.py | 118 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 611 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 957 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/parser.py | 1000 | CODE | |
| LOW | …ges/core/src/repowise/core/ingestion/parser_helpers.py | 34 | CODE | |
| LOW | …ges/core/src/repowise/core/ingestion/parser_helpers.py | 384 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 50 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 115 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/graph_warmups.py | 292 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/sfc_source.py | 227 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 396 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 811 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 866 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 1043 | CODE | |
| LOW | …ages/core/src/repowise/core/ingestion/call_resolver.py | 1974 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 894 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 1070 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 1154 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 1173 | CODE | |
| LOW | packages/core/src/repowise/core/ingestion/traverser.py | 643 | CODE | |
| LOW | …es/core/src/repowise/core/ingestion/change_detector.py | 379 | CODE | |
| LOW | …s/core/src/repowise/core/ingestion/git_commit_index.py | 78 | CODE | |
| 451 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_no_test_path_copies.py | 61 | # `protest/`, `latest/` and `contest/` all counted as tests, while | COMMENT |
| LOW | tests/unit/test_no_test_path_copies.py | 81 | # Excludes bare `test/` on purpose: `django/test/` and `flask/testing.py` | COMMENT |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 61 | # of; in scope so moving it did not move it out of reach. | COMMENT |
| LOW | tests/unit/test_no_bare_type_name_copies.py | 81 | # qualifier that is a type rather than a package must not be discarded. | COMMENT |
| LOW | tests/unit/ingestion/test_fs_walk.py | 501 | _write(tmp_path, "a/b/c/package.json", "{}") # 4 parts — boundary, kept | COMMENT |
| LOW | tests/unit/ingestion/test_fs_walk.py | 521 | # nested repos even when matches are filtered afterwards; | COMMENT |
| LOW | tests/unit/ingestion/parser/test_pascal.py | 221 | ) -> None: | COMMENT |
| LOW | tests/unit/ingestion/parser/test_typescript.py | 201 | ) -> None: | COMMENT |
| LOW | tests/unit/dead_code/test_interfaces.py | 161 | # so the strongest assertion is "no spurious COM clamp masked the | COMMENT |
| LOW | tests/unit/workspace/test_extraction_walk_budget.py | 161 | monkeypatch: pytest.MonkeyPatch, | COMMENT |
| LOW | tests/unit/distill/test_rewrite_perf.py | 121 | _fmt = ", ".join(f"{t:.0f}" for t in timings) | COMMENT |
| LOW | tests/unit/server/mcp/test_keyless_vector_leg.py | 241 | # -------------------------------------------------------------------------- | COMMENT |
| LOW | tests/unit/server/mcp/test_tool_table_drift.py | 41 | # Header + separator + one line per row. | COMMENT |
| LOW | tests/unit/cli/test_pricing_table_agreement.py | 21 | from __future__ import annotations | COMMENT |
| LOW | tests/unit/generation/test_page_confidence.py | 41 | ) | COMMENT |
| LOW | tests/unit/generation/test_page_selection.py | 81 | records = [PageRecord("file_page:src/a.py", "file_page", "src\\a.py", is_template=True)] | 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/__tests__/docs/docs-tree.test.tsx | 861 | }); | 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/commits/code-evolution-chart.tsx | 41 | COMMENT | |
| LOW | packages/ui/src/commits/priority-badge.tsx | 1 | import { cn } from "../lib/cn"; | COMMENT |
| LOW | packages/ui/src/health/health-file-drawer.tsx | 261 | for (const c of breakdown?.categories ?? []) { | COMMENT |
| LOW | packages/ui/src/graph/symbol-relations.ts | 21 | /** Heading per edge type, per side. Both halves of a relation are named, since | COMMENT |
| LOW | packages/ui/src/graph/sigma/sigma-controls.tsx | 21 | }: SigmaControlsProps) { | COMMENT |
| LOW | packages/ui/src/graph/sigma/use-sigma.ts | 61 | }; | COMMENT |
| LOW | packages/ui/src/wiki/wiki-markdown.tsx | 181 | } | COMMENT |
| LOW | packages/ui/src/docs/docs-tree.tsx | 281 | // longest-prefix path matching to guess which module owned a file. It is now | COMMENT |
| LOW | packages/ui/src/docs/docs-tree.tsx | 321 | "layer_page", | COMMENT |
| LOW | packages/ui/src/docs/docs-tree.tsx | 921 | ); | 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/ui/src/docs/page-labels.ts | 1 | // Display labels for wiki pages — replace raw graph ids with derived names. | COMMENT |
| LOW | packages/ui/src/docs/docs-reader.tsx | 281 | }) { | COMMENT |
| LOW | packages/ui/src/docs/doc-nav.ts | 1 | // Framework-neutral navigation helpers for the wiki reader. | COMMENT |
| LOW | packages/ui/src/decisions/decisions-table.tsx | 101 | const prefix = linkPrefix ?? `/repos/${repoId}`; | COMMENT |
| LOW | packages/ui/src/decisions/decisions-table.tsx | 181 | render: (d) => <DecisionStatusMark status={d.status} />, | COMMENT |
| LOW | packages/ui/src/lib/layers.ts | 1 | // Which layer of the architecture spine a page belongs to, and how to group a | COMMENT |
| LOW | packages/ui/src/lib/page-types.ts | 141 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | packages/ui/src/lib/page-types.ts | 161 | getting_started: "Getting Started", | COMMENT |
| LOW | packages/ui/src/files/file-overview-tab.tsx | 41 | const fixedCount = Object.values(rawFixCounts).filter((n) => n > 0).length; | COMMENT |
| LOW | packages/core/src/repowise/core/rate_limiter.py | 41 | COMMENT | |
| LOW | packages/core/src/repowise/core/update_lock.py | 21 | COMMENT | |
| LOW | packages/core/src/repowise/core/test_paths.py | 61 | # the filename's own case, deliberately: a lowercase ``tests.py`` is the | COMMENT |
| LOW | packages/core/src/repowise/core/test_paths.py | 81 | # the tree requirement costs nothing and the widening would buy nothing. | COMMENT |
| LOW | packages/core/src/repowise/core/fs_walk.py | 181 | # can be asked without the answer depending on the path the caller | COMMENT |
| LOW | packages/core/src/repowise/core/fs_walk.py | 201 | cycle_pruned.append(d) | COMMENT |
| LOW | …s/core/src/repowise/core/pipeline/scoped_generation.py | 241 | async with get_session(session_factory) as session: | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 861 | Returns ``(deleted_path_count, refusals)``, where a refusal is a one-line | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/persist.py | 1581 | # and file pages are rendered structurally now, so the directive had no | COMMENT |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 261 | # Mode policy: FAST forces ESSENTIAL git indexing and disables doc | COMMENT |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 801 | # legitimately emitted zero pages of it. | COMMENT |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 821 | has_code_to_group = any( | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 701 | try: | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 741 | # knowledge a full index had — the stored rows ARE what the last full | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 1641 | # Drop file-scoped rows for files that have actually been deleted. | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 1661 | else {pf.file_info.path for pf in parsed_files or []} | COMMENT |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 1721 | # The swept half is not repairable this way, because the sweeps | COMMENT |
| LOW | …es/core/src/repowise/core/pipeline/resume/rehydrate.py | 61 | COMMENT | |
| 444 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/health/test_dataflow_facts.py | 0 | def f(ctx, cond): with ctx.push(): if cond: result = 1 else: result = 2 return result | STRING |
| HIGH | tests/unit/health/test_dataflow_cfg.py | 0 | def f(ctx, cond): with ctx.push(): if cond: result = 1 else: result = 2 return result | STRING |
| HIGH | tests/unit/health/test_dataflow_reaching.py | 0 | def f(ctx, cond): with ctx.push(): if cond: result = 1 else: result = 2 return result | 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 | tests/unit/generation/test_page_confidence.py | 0 | a provider that fails the way a real outage does: every call raises. | STRING |
| HIGH | tests/unit/generation/test_overview_architecture_map.py | 0 | a provider that fails the way a real outage does: every call raises. | STRING |
| HIGH | tests/unit/generation/test_stub_on_provider_error.py | 0 | a provider that fails the way a real outage does: every call raises. | 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/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/pipeline/test_generation_progress_split.py | 39 | def set_cost(self, total_cost: float) -> None: | CODE |
| LOW⚡ | tests/unit/server/mcp/test_mcp_exclude_filter.py | 155 | def _set_excluded(monkeypatch, tmp_path, pattern: str) -> None: | CODE |
| LOW | tests/unit/server/mcp/test_hotspot_health_surfaces.py | 24 | async def _set_hotspots(session, repo_id: str, paths: set[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/co_change.py | 30 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/cache_seal.py | 30 | __all__ = [ | 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/docs_mode.py | 19 | __all__ = ["DOCS_MODES", "DocsMode", "docs_mode_state_fields", "resolve_docs_mode"] | CODE |
| LOW | packages/core/src/repowise/core/support_paths.py | 16 | __all__ = ["is_example_path", "is_support_path"] | CODE |
| LOW | packages/core/src/repowise/core/fs_walk.py | 49 | __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 | 30 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/pipeline/modes.py | 25 | __all__ = ["OrchestratorMode"] | CODE |
| LOW | packages/core/src/repowise/core/pipeline/fix_rollups.py | 35 | __all__ = ["apply_fix_rollups"] | 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 | 173 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/version.py | 62 | __all__ = [ | CODE |
| LOW | packages/core/src/repowise/core/upgrade/registry.py | 82 | __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 | 242 | __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 | 35 | __all__ = [ | CODE |
| LOW | …ckages/core/src/repowise/core/ingestion/parse_cache.py | 46 | __all__ = ["ParseCache", "parser_fingerprint"] | CODE |
| LOW | …e/src/repowise/core/ingestion/git_indexer/co_change.py | 35 | __all__ = ["compute_co_changes_and_entropy"] | CODE |
| LOW | …e/src/repowise/core/ingestion/git_indexer/fix_shape.py | 49 | __all__ = ["SHAPE_KINDS", "classify_fix_shape", "is_code_path", "is_test_path"] | CODE |
| LOW | …core/src/repowise/core/ingestion/git_indexer/enrich.py | 27 | __all__ = [ | CODE |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/records.py | 14 | __all__ = [ | CODE |
| LOW | …re/src/repowise/core/ingestion/git_indexer/__init__.py | 62 | __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_PHASE", "backfill_full_tier"] | CODE |
| LOW | …c/repowise/core/ingestion/git_indexer/prior_defects.py | 51 | __all__ = ["FixCommit", "FixWalk", "PriorDefects", "collect_fix_commits", "compute_prior_defects"] | CODE |
| LOW | …ore/src/repowise/core/ingestion/git_indexer/indexer.py | 46 | __all__ = ["GitIndexer"] | CODE |
| LOW | …epowise/core/ingestion/git_indexer/agent_provenance.py | 76 | __all__ = [ | CODE |
| LOW | …/src/repowise/core/ingestion/git_indexer/fix_events.py | 37 | __all__ = ["build_fix_events"] | CODE |
| LOW | …rc/repowise/core/ingestion/git_indexer/file_history.py | 67 | __all__ = ["DECAY_REFRESH_KEYS", "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 | 784 | __all__ = [ | CODE |
| LOW | …c/repowise/core/ingestion/external_systems/__init__.py | 24 | __all__ = [ | CODE |
| LOW⚡ | …/src/repowise/core/ingestion/external_systems/bazel.py | 315 | __all__ = [ | CODE |
| LOW | …kages/core/src/repowise/core/ingestion/graph/_edges.py | 58 | def update_co_change_edges(self, updated_meta: dict, min_count: int = 3) -> None: | CODE |
| LOW | …src/repowise/core/ingestion/graph/_centrality_cache.py | 41 | __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 | 141 | def set_tsconfig_resolver(self, resolver: Any) -> None: | CODE |
| LOW⚡ | …ages/core/src/repowise/core/ingestion/graph/builder.py | 196 | def set_source_map(self, source_map: dict[str, bytes] | None) -> None: | CODE |
| LOW | …epowise/core/ingestion/lightweight_imports/__init__.py | 62 | __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 | 147 | __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 | 86 | __all__ = [ | CODE |
| LOW | …src/repowise/core/ingestion/resolvers/cpp_workspace.py | 455 | __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__ = ["DynamicEdge", "DynamicHintExtractor", "HintRegistry"] | 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 | 15 | __all__ = [ | CODE |
| LOW | …epowise/core/ingestion/extractors/heritage/__init__.py | 124 | __all__ = ["HERITAGE_EXTRACTORS", "extract_heritage", "heritage_node_types_for"] | CODE |
| 174 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | package-lock.json | 15570 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", | CODE |
| LOW⚡ | tests/unit/ingestion/test_typescript_resolver.py | 739 | # resolver's job upstream; here we just return None. | COMMENT |
| MEDIUM | …sts/unit/ingestion/test_git_commit_rows_integration.py | 127 | # robust assertion; the precise boundary is covered by the unit test.) | COMMENT |
| MEDIUM⚡ | tests/unit/health/test_dataflow_reaching.py | 415 | # 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 | 188 | """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 | 157 | # Per-file leverage: (8 - score) * nloc, 0 once healthy. | COMMENT |
| MEDIUM | tests/unit/server/mcp/test_health.py | 445 | # Big and low-scoring, so it outranks the seeded worst file on leverage — | COMMENT |
| MEDIUM | tests/unit/cli/test_update_pending_cleanup.py | 121 | # index_repo_full does not persist state.json in the test harness; record | COMMENT |
| MEDIUM | tests/unit/cli/test_update_up_to_date_lock.py | 65 | # index_repo_full does not persist state.json in the test harness; record | COMMENT |
| MEDIUM | tests/unit/sessions/test_efficacy.py | 328 | # The paired record the harness also writes for the same firing. | COMMENT |
| MEDIUM⚡ | tests/unit/sessions/test_adapter_seam.py | 118 | # The three drive paths, all reached by a second harness | COMMENT |
| MEDIUM⚡ | tests/unit/sessions/test_adapter_seam.py | 256 | # Intents: the harness's key names live on the adapter, not in a consumer | 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 | 229 | // 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 | 51 | # Consumed by the KG validation harness (density floors, honesty checks); | COMMENT |
| MEDIUM | …e/src/repowise/core/ingestion/extractors/visibility.py | 413 | # nodes — but textual matching is robust across grammar versions. | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/analysis/kg_curation.py | 1078 | # The harness signal is "this test file *depends on* that one" — type | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/analysis/kg_curation.py | 1082 | # wiring is not harness evidence. "heritage" used to be a third member and was | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 70 | # harness uses, calibrated on the 13-repo matrix: express (1.89, broken CJS | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1167 | # consumers (UI, harness) can see the degradation level. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1232 | # Shared test harness files — base classes and helpers imported by two | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1272 | # Drop harness files unless that would leave nothing. One | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1273 | # single-target import from another test file is already harness | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/dead_code/constants.py | 500 | # `#[cfg(test)] mod tests;` and the Cargo test harness, not production imports. | COMMENT |
| MEDIUM | …/core/src/repowise/core/analysis/dead_code/analyzer.py | 423 | # ---- libFuzzer / Honggfuzz / AFL fuzz harness entries ------------ | COMMENT |
| MEDIUM | …se/core/analysis/health/biomarkers/untested_hotspot.py | 59 | # 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 | 48 | #: stringly (cancellations, rejections, permission denials, harness errors) | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/distill/corrections.py | 218 | # rejections, and harness errors are neither failure nor success. | COMMENT |
| MEDIUM | …s/core/src/repowise/core/sessions/adapters/registry.py | 27 | #: The harness assumed when a caller names none. | COMMENT |
| MEDIUM | …kages/core/src/repowise/core/sessions/adapters/base.py | 31 | #: A consumer asks for an intent; the adapter owns which of its harness's | COMMENT |
| MEDIUM | …kages/core/src/repowise/core/sessions/adapters/base.py | 32 | #: key names spot it, so harness vocabulary never leaks into a miner. | COMMENT |
| MEDIUM | …kages/core/src/repowise/core/sessions/miners/demand.py | 236 | # a second harness's discovery may fail in ways OSError does not name. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 294 | # ``generation.styles.resolve_style``. "comprehensive" (default) is inert and | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 169 | # Resolve the wiki style once. "comprehensive" (default) is inert, so this | COMMENT |
| MEDIUM | …re/src/repowise/core/generation/page_generator/core.py | 536 | # 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 | 1569 | # ``kpis``, the module rollup, the leverage view and the churn quadrant | COMMENT |
| MEDIUM | …s/server/src/repowise/server/mcp_server/tool_health.py | 1784 | # set would report no plans on a file while the highest-leverage | COMMENT |
| MEDIUM | …s/server/src/repowise/server/mcp_server/tool_health.py | 1933 | # The one list whose entire purpose is leverage ranking, so it is the | COMMENT |
| MEDIUM | …src/repowise/server/mcp_server/tool_context/targets.py | 330 | # counts are small, so picking in Python is robust and cheap. | COMMENT |
| MEDIUM | packages/cli/src/repowise/cli/agent_adapters/codex.py | 84 | #: nothing to the Read and Grep surfaces for this harness. That is the | COMMENT |
| MEDIUM | …ckages/cli/src/repowise/cli/agent_adapters/__init__.py | 23 | #: **This mapping is the whole cost of adding a harness.** Payload parsing, | COMMENT |
| MEDIUM | …ckages/cli/src/repowise/cli/agent_adapters/__init__.py | 34 | #: because it was the only harness when the hooks were written. | COMMENT |
| MEDIUM | packages/cli/src/repowise/cli/agent_adapters/base.py | 30 | #: harness", and an unattributable count is not written at all. | COMMENT |
| MEDIUM | packages/cli/src/repowise/cli/agent_adapters/base.py | 155 | #: original harness does (``hook-bash`` / ``hook-powershell``). Declared | COMMENT |
| MEDIUM | packages/cli/src/repowise/cli/agent_adapters/base.py | 171 | #: harness is assumed unable to replace until its adapter says otherwise, | COMMENT |
| MEDIUM | packages/cli/src/repowise/cli/agent_adapters/base.py | 184 | #: harness that calls its editor ``apply_patch`` needs no branch of its | COMMENT |
| MEDIUM | …ges/cli/src/repowise/cli/agent_adapters/claude_code.py | 49 | #: The only harness observed so far whose PostToolUse protocol can replace | COMMENT |
| LOW | packages/cli/src/repowise/cli/commands/costs_cmd.py | 136 | # would just return an empty result and confuse the user. | COMMENT |
| MEDIUM | …s/cli/src/repowise/cli/commands/augment_cmd/command.py | 109 | #: dispatcher carries no tool-name literals and a third harness needs no branch | COMMENT |
| MEDIUM | …s/cli/src/repowise/cli/commands/augment_cmd/command.py | 386 | # the tool output, and not every harness's protocol can honour that. | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/augment_cmd/search.py | 400 | #: these helpers cannot just return ``None`` on failure: that would turn a | COMMENT |
| LOW | …ages/cli/src/repowise/cli/commands/init_cmd/command.py | 1206 | # resolve_provider / interactive provider selection may have just set | COMMENT |
| MEDIUM | …epowise/cli/commands/health_cmd/refactoring_targets.py | 93 | # The order is the canonical recommendation rank (benefit and leverage, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/unit/workspace/test_framework_dialects.py | 82 | @io.swagger.v3.oas.annotations.tags.Tag(name = "Account") | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_edenai_provider.py | 204 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 365 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 380 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openai_provider.py | 391 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_openai_provider.py | 303 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_ollama_provider.py | 105 | provider._client.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_kimi_provider.py | 183 | mock_client.return_value.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/test_providers/test_kimi_provider.py | 280 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_deepseek_provider.py | 177 | mock_client.return_value.chat.completions.create.assert_called_once() | CODE |
| CRITICAL | tests/unit/test_providers/test_deepseek_provider.py | 203 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL⚡ | tests/unit/test_providers/test_openrouter_provider.py | 346 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| CRITICAL | tests/unit/test_providers/test_openrouter_provider.py | 327 | mock_client.return_value.chat.completions.create.assert_not_called() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_test_paths.py | 80 | # scaffolding tokens missed because those only count inside a test tree. | COMMENT |
| 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 | 19 | 7. [Agentic Loop](#7-agentic-loop) | CODE |
| MEDIUM | docs/architecture/language-support.md | 147 | parser.py # ASTParser (language-agnostic orchestration) | CODE |
| MEDIUM | packages/core/src/repowise/core/test_paths.py | 68 | # Directories that hold the scaffolding rather than the tests. These only count | COMMENT |
| MEDIUM | packages/core/src/repowise/core/test_paths.py | 201 | # token, a test- or support-shaped filename, or a scaffolding dir beneath it | COMMENT |
| MEDIUM | packages/core/src/repowise/core/test_paths.py | 254 | # A scaffolding directory that needs no test tree around it settles the | COMMENT |
| MEDIUM | packages/core/src/repowise/core/test_paths.py | 264 | # scaffolding directory demotes it to support. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/upgrade/version.py | 59 | #: state.json key holding the embedding model id the vectors were built with. | COMMENT |
| MEDIUM | packages/core/src/repowise/core/upgrade/manager.py | 105 | # be format-current yet hold vectors from a different embedding model (#426), | COMMENT |
| MEDIUM | packages/core/src/repowise/core/ingestion/parser.py | 681 | # scaffolding, not a runtime variable in the symbol graph. | COMMENT |
| MEDIUM | …re/src/repowise/core/ingestion/dynamic_hints/dotnet.py | 102 | # in microservice repos, so we emit dynamic edges to *every* | COMMENT |
| MEDIUM | packages/core/src/repowise/core/analysis/kg_curation.py | 1628 | # Recognised scaffolding earns a real role instead of a bare name | COMMENT |
| MEDIUM⚡ | …core/src/repowise/core/analysis/decisions/extractor.py | 1163 | # Anti-hallucination substring gate (Phase 1D) | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/decisions/extractor.py | 149 | # anti-hallucination substring gate (Phase 1D). | COMMENT |
| MEDIUM | …core/src/repowise/core/analysis/decisions/extractor.py | 1310 | # Raw per-source pool, then the anti-hallucination gate. | COMMENT |
| MEDIUM⚡ | …ore/src/repowise/core/analysis/decisions/provenance.py | 147 | # Anti-hallucination substring gate | COMMENT |
| MEDIUM⚡ | packages/core/src/repowise/core/workspace/update.py | 632 | # Workspace update orchestration | COMMENT |
| MEDIUM | packages/core/src/repowise/core/persistence/models.py | 868 | # 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 | 195 | # Top-level orchestration | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 279 | # RAG search is bypassed entirely until the vector store has at least | COMMENT |
| MEDIUM | packages/core/src/repowise/core/generation/models.py | 525 | # 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 | 226 | # generate_all — orchestration (delegates to orchestrate.py) | COMMENT |
| MEDIUM⚡ | …repowise/core/generation/page_generator/orchestrate.py | 709 | # next level's RAG search depends on these landing in the store. | COMMENT |
| MEDIUM⚡ | …repowise/core/generation/page_generator/orchestrate.py | 710 | # Embedding is a RAG enhancement, not load-bearing, so a failure must | COMMENT |
| MEDIUM | …repowise/core/generation/page_generator/orchestrate.py | 618 | # embedder round-trip and the level drains before the next level's RAG | COMMENT |
| MEDIUM | …/repowise/core/generation/page_generator/validation.py | 448 | # Whole-name hallucinations — the high-signal case — are | COMMENT |
| MEDIUM | …se/core/generation/onboarding/subkinds/key_concepts.py | 607 | # identical from outside, and a scaffolding list that stops matching | COMMENT |
| MEDIUM | …se/core/generation/onboarding/subkinds/key_concepts.py | 608 | # anything reads the same as a repository with no scaffolding in it. | COMMENT |
| MEDIUM | packages/server/src/repowise/server/app.py | 117 | # Honour the indexed embedding model so serve doesn't silently rebuild | COMMENT |
| MEDIUM | packages/server/src/repowise/server/routers/chat.py | 244 | # agentic loop internally (e.g. Gemini for thought_signature). | COMMENT |
| MEDIUM | …rver/src/repowise/server/mcp_server/_answer_context.py | 223 | 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 | 40 | # 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 | 88 | # 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 | 169 | # plausible and (b) synthesis hallucination on tangential top hits. | COMMENT |
| MEDIUM | …r/src/repowise/server/mcp_server/tool_answer/answer.py | 658 | # dropped before formatting, so the prompt never carries hollow scaffolding. | COMMENT |
| MEDIUM | packages/api-client/src/chat.test.ts | 35 | // running the agentic loop against a body nobody reads. | 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 | 26 | ## Step 2: Check if this repo is already indexed | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 37 | ## Step 3: Offer the mode, but do not block on it | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 169 | ## Step 4: Provider selection (model-written wiki only) | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 207 | ## Step 5: Exclusions | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 215 | ## Step 6: Run it | COMMENT |
| LOW | plugins/claude-code/commands/init.md | 229 | ## Step 7: Post-setup | COMMENT |
| LOW | plugins/shared/commands/init.md | 11 | ## Step 1: Check if repowise is installed | COMMENT |
| LOW | plugins/shared/commands/init.md | 27 | ## Step 2: Check if this repo is already indexed | COMMENT |
| LOW | plugins/shared/commands/init.md | 38 | ## Step 3: Offer the mode, but do not block on it | COMMENT |
| LOW | plugins/shared/commands/init.md | 170 | ## Step 4: Provider selection (model-written wiki only) | COMMENT |
| LOW | plugins/shared/commands/init.md | 208 | ## Step 5: Exclusions | COMMENT |
| LOW | plugins/shared/commands/init.md | 216 | ## Step 6: Run it | COMMENT |
| LOW | plugins/shared/commands/init.md | 230 | ## Step 7: Post-setup | COMMENT |
| LOW | website/getting-started.md | 99 | ### Step 1: Install the plugin | COMMENT |
| LOW | website/getting-started.md | 108 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 173 | ### Step 1: Install repowise | COMMENT |
| LOW⚡ | website/getting-started.md | 179 | ### Step 2: Set your API key | COMMENT |
| LOW⚡ | website/getting-started.md | 187 | ### Step 3: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 196 | ### Step 4: Connect Claude Code | COMMENT |
| LOW⚡ | website/getting-started.md | 212 | ### Step 1: Install repowise and Codex | COMMENT |
| LOW⚡ | website/getting-started.md | 221 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 230 | ### Step 3: Start Codex | COMMENT |
| LOW⚡ | website/getting-started.md | 244 | ### Step 1: Install and set up | COMMENT |
| LOW⚡ | website/getting-started.md | 251 | ### Step 2: Index your repo | COMMENT |
| LOW⚡ | website/getting-started.md | 258 | ### Step 3: Start the web dashboard | COMMENT |
| LOW⚡ | website/getting-started.md | 266 | ### 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 | 180 | #### Step 1: Add a `LanguageSpec` module | COMMENT |
| LOW | docs/architecture/language-support.md | 248 | #### Step 2: Add the `LanguageTag` | COMMENT |
| LOW | docs/architecture/language-support.md | 256 | #### Step 3: Write a tree-sitter query file | COMMENT |
| LOW | docs/architecture/language-support.md | 286 | #### Step 4: Add a `LanguageConfig` entry | COMMENT |
| LOW | docs/architecture/language-support.md | 307 | #### Step 5: Add the tree-sitter grammar dependency | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 149 | # Step 1: try path alias entries. | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 159 | # Step 2: baseUrl-only fallback. | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 898 | # Step 3: Save workspace config with updated timestamps | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 902 | # Step 4: Run cross-repo hooks (Phase 3/4 placeholder). ``run_hooks`` lets | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 683 | # Step 1: Determine which repos are stale | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 695 | # Step 0: Sync ``last_commit_at_index`` from each repo's state.json so | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 761 | # Step 2: Update stale repos (parallel with concurrency limit) | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 426 | # Step 1: Parse git logs for all repos | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 433 | # Step 2: Drop noise files, then commits left with nothing, then | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 449 | # Step 3: Group all commits by author identity, tagged with repo alias | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 455 | # Step 4: Walk each author's sessions, accumulating per-file activity | COMMENT |
| LOW | …s/core/src/repowise/core/generation/knowledge_graph.py | 380 | # Step 1: main entry point | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 729 | # Step 3: Create workspace config | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 826 | # Step 5: Cross-repo analysis (co-changes, package deps, contracts) | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 829 | # Step 6: Register primary repo with configured editor clients | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 835 | # Step 7: Completion summary | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 618 | # Step 1: Select repos to index | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 634 | # Step 2: Select primary repo | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 756 | # Step 4: Index each selected repo (always generate_docs=False; generation is separate) | COMMENT |
| LOW | …cli/agent_targets/_data/codex_prompts/repowise-init.md | 9 | ## Step 1: Check if repowise is installed | COMMENT |
| LOW | …cli/agent_targets/_data/codex_prompts/repowise-init.md | 25 | ## Step 2: Check if this repo is already indexed | COMMENT |
| LOW | …cli/agent_targets/_data/codex_prompts/repowise-init.md | 36 | ## Step 3: Offer the mode, but do not block on it | COMMENT |
| LOW | …cli/agent_targets/_data/codex_prompts/repowise-init.md | 168 | ## Step 4: Provider selection (model-written wiki only) | COMMENT |
| LOW | …cli/agent_targets/_data/codex_prompts/repowise-init.md | 206 | ## Step 5: Exclusions | COMMENT |
| 2 more matches not shown… | ||||
| 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 | 144 | prov = _classify(an="Jane Doe", ae="jane@anthropic.com") | CODE |
| LOW⚡ | tests/unit/workspace/test_update.py | 109 | ["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_bot_filter.py | 46 | ("Jane Doe", "jane@anthropic.com"), | CODE |
| LOW | tests/unit/server/test_stats_superlatives.py | 28 | "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_provider_prompt.py | 38 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW⚡ | tests/unit/cli/test_init_failure_reporting.py | 461 | assert "placeholder" not in output | CODE |
| LOW | tests/unit/cli/test_docs_pointer.py | 60 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/unit/cli/test_workspace_docs_pointer.py | 35 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/unit/cli/test_update_e2e.py | 74 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/unit/cli/test_update_e2e.py | 190 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 225 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 239 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 250 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW⚡ | tests/unit/test_providers/test_gemini_provider.py | 261 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 145 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 159 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 171 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 185 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | tests/unit/test_providers/test_gemini_provider.py | 204 | provider = GeminiProvider(api_key="fake-key") | CODE |
| LOW | packages/ui/__tests__/chat/chat-dock.test.tsx | 62 | "placeholder", | CODE |
| LOW | packages/ui/__tests__/chat/chat-dock.test.tsx | 80 | "placeholder", | CODE |
| LOW | packages/ui/__tests__/chat/chat-interface.test.tsx | 204 | "placeholder", | CODE |
| 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 | 149 | # Step 1: try path alias entries. | COMMENT |
| LOW⚡ | …/core/src/repowise/core/ingestion/tsconfig_resolver.py | 159 | # Step 2: baseUrl-only fallback. | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 898 | # Step 3: Save workspace config with updated timestamps | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/update.py | 902 | # Step 4: Run cross-repo hooks (Phase 3/4 placeholder). ``run_hooks`` lets | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 683 | # Step 1: Determine which repos are stale | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 695 | # Step 0: Sync ``last_commit_at_index`` from each repo's state.json so | COMMENT |
| LOW | packages/core/src/repowise/core/workspace/update.py | 761 | # Step 2: Update stale repos (parallel with concurrency limit) | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 426 | # Step 1: Parse git logs for all repos | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 433 | # Step 2: Drop noise files, then commits left with nothing, then | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 449 | # Step 3: Group all commits by author identity, tagged with repo alias | COMMENT |
| LOW⚡ | packages/core/src/repowise/core/workspace/cross_repo.py | 455 | # Step 4: Walk each author's sessions, accumulating per-file activity | COMMENT |
| LOW | …s/core/src/repowise/core/generation/knowledge_graph.py | 380 | # Step 1: main entry point | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 729 | # Step 3: Create workspace config | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 826 | # Step 5: Cross-repo analysis (co-changes, package deps, contracts) | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 829 | # Step 6: Register primary repo with configured editor clients | COMMENT |
| LOW⚡ | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 835 | # Step 7: Completion summary | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 618 | # Step 1: Select repos to index | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 634 | # Step 2: Select primary repo | COMMENT |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 756 | # Step 4: Index each selected repo (always generate_docs=False; generation is separate) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/pipeline/test_authoritative_page_types.py | 35 | "def helper(n: int) -> int:\n return n + 1\n", | CODE |
| LOW | …ts/unit/pipeline/test_init_update_graph_convergence.py | 47 | "def helper(x):\n return x + 1\n", | CODE |
| 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 | 119 | (tmp_path / "src" / "utils.py").write_text("def helper(): pass") | CODE |
| LOW⚡ | tests/unit/ingestion/test_star_import_barrel.py | 46 | "pkg/leaf.py": "def helper(x):\n return x\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_star_import_barrel.py | 49 | "other.py": "class Thing:\n def helper(self, x):\n return x\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_star_import_barrel.py | 163 | "pkg/leaf.py": "def helper(x):\n return x\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_star_import_barrel.py | 166 | "other.py": "class Thing:\n def helper(self, x):\n return x\n", | CODE |
| LOW | tests/unit/ingestion/test_enclosing_class_calls.py | 107 | def helper(self): | STRING |
| LOW | tests/unit/ingestion/test_enclosing_class_calls.py | 115 | def helper(self): | STRING |
| LOW | tests/unit/ingestion/test_single_query_pass.py | 32 | def helper(arg: str) -> str: | CODE |
| LOW | tests/unit/ingestion/test_working_tree_changes.py | 33 | (tmp_path / "util.py").write_text("def helper():\n return 2\n", encoding="utf-8") | CODE |
| LOW | tests/unit/ingestion/test_value_reference_edges.py | 253 | "def helper():\n return 1\n\n\ndef run():\n return helper()\n" | CODE |
| LOW | tests/unit/ingestion/test_self_call_resolution.py | 62 | def helper(self): | CODE |
| LOW⚡ | tests/unit/ingestion/test_pytest_fixture_edges.py | 162 | "def helper(client):\n return client\n" | CODE |
| LOW⚡ | tests/unit/ingestion/test_subgraph_cache.py | 42 | 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_dispatch_edges.py | 204 | "base.py": "class Base:\n def helper(self):\n return 1\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_dispatch_edges.py | 225 | "l.py": "class Left:\n def helper(self):\n return 1\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_dispatch_edges.py | 226 | "r.py": "class Right:\n def helper(self):\n return 2\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_dispatch_edges.py | 247 | "base.py": "class Base:\n def helper(self):\n return 1\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_dispatch_edges.py | 251 | " def helper(self):\n" | CODE |
| LOW | tests/unit/ingestion/test_dispatch_edges.py | 327 | "base.py": "class Base:\n def helper(self):\n return 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 | 28 | "def helper(x):\n return x + 1\n", | CODE |
| LOW⚡ | tests/unit/ingestion/test_parse_cache.py | 86 | "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 | 112 | b"def helper(session, r):\n" | CODE |
| LOW | tests/unit/health/test_refactoring_extract_method.py | 245 | def helper(v): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/workspace/test_registry.py | 32 | # 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 | 528 | # Create the MCP server | COMMENT |
| MEDIUM | …ages/cli/src/repowise/cli/commands/init_cmd/command.py | 1289 | # Create the engine, session factory, and repository row *before* | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/health/test_coverage_biomarkers.py | 15 | CODE | |
| LOW | tests/unit/server/mcp/test_why_search_payload.py | 26 | CODE | |
| LOW | tests/unit/generation/conftest.py | 49 | CODE | |
| LOW | tests/unit/generation/test_onboarding.py | 105 | CODE | |
| LOW | tests/unit/generation/test_workspace_claude_md.py | 36 | CODE | |
| LOW | …ckages/core/src/repowise/core/pipeline/orchestrator.py | 176 | CODE | |
| LOW | packages/core/src/repowise/core/pipeline/incremental.py | 1382 | CODE | |
| LOW | …s/core/src/repowise/core/pipeline/phases/generation.py | 30 | CODE | |
| LOW | …kages/core/src/repowise/core/analysis/health/engine.py | 932 | CODE | |
| LOW | packages/core/src/repowise/core/workspace/update.py | 638 | CODE | |
| LOW | …s/core/src/repowise/core/persistence/crud/decisions.py | 63 | CODE | |
| LOW | …s/core/src/repowise/core/persistence/crud/decisions.py | 165 | CODE | |
| LOW | …kages/core/src/repowise/core/persistence/crud/pages.py | 226 | CODE | |
| LOW | …/core/src/repowise/core/persistence/crud/repository.py | 131 | CODE | |
| LOW | …s/core/src/repowise/core/registry/mcp_tool_registry.py | 83 | CODE | |
| LOW | …core/src/repowise/core/generation/context/assembler.py | 463 | CODE | |
| LOW | …src/repowise/core/generation/page_generator/pertype.py | 186 | CODE | |
| LOW | …src/repowise/core/generation/page_generator/pertype.py | 375 | CODE | |
| LOW | …re/src/repowise/core/generation/page_generator/core.py | 229 | CODE | |
| LOW | …ages/server/src/repowise/server/routers/refactoring.py | 266 | CODE | |
| LOW | …ckages/server/src/repowise/server/routers/decisions.py | 36 | CODE | |
| LOW | packages/server/src/repowise/server/routers/symbols.py | 197 | CODE | |
| LOW | packages/server/src/repowise/server/routers/pages.py | 123 | CODE | |
| LOW | …rc/repowise/server/routers/code_health/files_routes.py | 40 | CODE | |
| LOW | …erver/src/repowise/server/mcp_server/tool_dead_code.py | 266 | CODE | |
| LOW | …s/server/src/repowise/server/mcp_server/tool_health.py | 1088 | CODE | |
| LOW | packages/cli/src/repowise/cli/ui/result_panels.py | 32 | CODE | |
| LOW | …li/src/repowise/cli/commands/update_cmd/persistence.py | 346 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/update_cmd/command.py | 344 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/update_cmd/command.py | 518 | CODE | |
| LOW | …/cli/src/repowise/cli/commands/update_cmd/workspace.py | 49 | CODE | |
| LOW | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 568 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …kages/core/src/repowise/core/providers/llm/registry.py | 251 | 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 | 258 | 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 | 56 | Instantiate an embedder by name. Args: name: Embedder identifier ('openai', 'gemini', 'mock'). | STRING |
| HIGH | …es/core/src/repowise/core/generation/page_redirects.py | 161 | The live page id a retired one now points at, or ``None``. Follows retirement chains to their end, so the returned | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/repowise/core/ingestion/resolvers/rust_workspace.py | 245 | # 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 | 247 | # Check if the containing file is marked as an entry point | COMMENT |
| LOW | …repowise/core/analysis/health/complexity/cyclomatic.py | 289 | # Check if this is a case/arm inside a flat match — skip it. | 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 | 210 | # Check if client disconnected | COMMENT |
| LOW | …rver/src/repowise/server/mcp_server/tool_dependency.py | 273 | # Check if they're in completely disconnected components | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …es/cli/src/repowise/cli/commands/init_cmd/workspace.py | 197 | # A previously-persisted embedder on THIS repo counts as requested (re-init | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/server/test_chat_stream_terminal_event.py | 58 | CODE |