Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
This report presents the forensic synthetic code analysis of tirth8205/code-review-graph, a Python project with 19,499 GitHub stars. SynthScan v2.0 examined 69,805 lines of code across 186 source files, recording 1895 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 41.5 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 1895 distinct pattern matches across 19 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⚡ | code_review_graph/communities.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/communities.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/communities.py | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/communities.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 65 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 231 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 233 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 345 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 347 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 436 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 438 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 580 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/communities.py | 582 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/exports.py | 16 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/exports.py | 18 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 82 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 84 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 153 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 155 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 315 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/exports.py | 317 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/changes.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/changes.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 214 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 272 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/changes.py | 274 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/spring_resolver.py | 50 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/spring_resolver.py | 53 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/spring_resolver.py | 74 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/spring_resolver.py | 81 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/spring_resolver.py | 100 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/spring_resolver.py | 103 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/spring_resolver.py | 113 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/spring_resolver.py | 115 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 31 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 33 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 61 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 63 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/tsconfig_resolver.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 582 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 584 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 672 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/refactor.py | 674 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/graph.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | code_review_graph/graph.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | code_review_graph/graph.py | 138 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | code_review_graph/graph.py | 140 | # --------------------------------------------------------------------------- | STRING |
| 268 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/communities.py | 635 | def incremental_detect_communities( | CODE |
| LOW | code_review_graph/communities.py | 806 | def get_architecture_overview(store: GraphStore) -> dict[str, Any]: | CODE |
| LOW | code_review_graph/analysis.py | 213 | def find_surprising_connections( | CODE |
| LOW | code_review_graph/analysis.py | 317 | def generate_suggested_questions( | CODE |
| LOW | code_review_graph/jedi_resolver.py | 234 | def _find_untracked_method_calls(root, is_test_file: bool = False): | CODE |
| LOW | code_review_graph/refactor.py | 229 | def _collect_type_referenced_names(store: GraphStore) -> set[str]: | CODE |
| LOW | code_review_graph/skills.py | 596 | def generate_codex_hooks_config(repo_root: Path) -> dict[str, Any]: | CODE |
| LOW | code_review_graph/skills.py | 1120 | def inject_platform_instructions(repo_root: Path, target: str = "all") -> list[str]: | CODE |
| LOW | code_review_graph/skills.py | 1150 | def generate_cursor_hooks_config() -> dict[str, Any]: | CODE |
| LOW | code_review_graph/skills.py | 1097 | def install_gemini_cli_skills(repo_root: Path) -> Path: | STRING |
| LOW | code_review_graph/context_savings.py | 201 | def format_context_savings_panel( | CODE |
| LOW | code_review_graph/graph.py | 360 | def search_edges_by_target_name(self, name: str, kind: str = "CALLS") -> list[GraphEdge]: | CODE |
| LOW | code_review_graph/graph.py | 481 | def resolve_bare_call_targets(self) -> int: | CODE |
| LOW | code_review_graph/graph.py | 752 | def _get_impact_radius_networkx( | STRING |
| LOW | code_review_graph/graph.py | 960 | def get_flow_criticalities_for_node(self, node_id: int) -> list[float]: | CODE |
| LOW | code_review_graph/graph.py | 980 | def get_community_ids_by_qualified_names( | CODE |
| LOW | code_review_graph/graph.py | 1011 | def get_nodes_without_signature(self) -> list[sqlite3.Row]: | CODE |
| LOW | code_review_graph/graph.py | 1154 | def get_nodes_by_community_id( | CODE |
| LOW | code_review_graph/rescript_resolver.py | 36 | def resolve_rescript_cross_module(store: GraphStore) -> dict: | CODE |
| LOW⚡ | code_review_graph/parser.py | 3711 | def _extract_js_var_functions( | CODE |
| LOW⚡ | code_review_graph/parser.py | 6752 | def _handle_r_binary_operator( | CODE |
| LOW | code_review_graph/parser.py | 680 | def _rescript_brace_depth_array(cleaned: str) -> list[int]: | CODE |
| LOW | code_review_graph/parser.py | 876 | def _detect_language_from_shebang(path: Path) -> Optional[str]: | CODE |
| LOW | code_review_graph/parser.py | 1503 | def _parse_databricks_py_notebook( | CODE |
| LOW | code_review_graph/parser.py | 2446 | def _elixir_function_name_and_params( | CODE |
| LOW | code_review_graph/parser.py | 2475 | def _extract_elixir_constructs( | CODE |
| LOW | code_review_graph/parser.py | 2661 | def _extract_nix_flake_input_urls( | CODE |
| LOW | code_review_graph/parser.py | 2711 | def _extract_nix_import_targets(self, rhs_node) -> list[tuple[str, int]]: | CODE |
| LOW | code_review_graph/parser.py | 2929 | def _extract_bash_source_command( | CODE |
| LOW | code_review_graph/parser.py | 2965 | def _extract_dart_calls_from_children( | CODE |
| LOW | code_review_graph/parser.py | 3122 | def _julia_call_first_identifier(self, call_expr) -> Optional[str]: | CODE |
| LOW | code_review_graph/parser.py | 3131 | def _extract_julia_constructs( | CODE |
| LOW | code_review_graph/parser.py | 3488 | def _handle_lua_variable_declaration( | CODE |
| LOW | code_review_graph/parser.py | 3597 | def _handle_lua_table_function( | CODE |
| LOW | code_review_graph/parser.py | 3798 | def _extract_js_field_function( | CODE |
| LOW | code_review_graph/parser.py | 3916 | def _emit_spring_field_injection( | CODE |
| LOW | code_review_graph/parser.py | 3988 | def _emit_spring_constructor_injection( | CODE |
| LOW | code_review_graph/parser.py | 4026 | def _emit_temporal_stub_fields( | CODE |
| LOW | code_review_graph/parser.py | 4084 | def _get_kafka_annotation_topics(annotation_node) -> list[str]: | CODE |
| LOW | code_review_graph/parser.py | 4114 | def _emit_kafka_edges_from_class( | CODE |
| LOW | code_review_graph/parser.py | 4196 | def _emit_kafka_edges_from_method( | CODE |
| LOW | code_review_graph/parser.py | 4721 | def _get_java_method_and_receiver(node) -> tuple[Optional[str], Optional[str]]: | CODE |
| LOW | code_review_graph/parser.py | 4762 | def _extract_jsx_component_call( | CODE |
| LOW | code_review_graph/parser.py | 4802 | def _resolve_jsx_component_target( | CODE |
| LOW | code_review_graph/parser.py | 4853 | def _extract_value_references( | CODE |
| LOW | code_review_graph/parser.py | 5063 | def _extract_solidity_constructs( | CODE |
| LOW | code_review_graph/parser.py | 5304 | def _collect_js_exported_local_names( | CODE |
| LOW | code_review_graph/parser.py | 6610 | def _get_jsx_component_reference(self, node) -> Optional[tuple[Optional[str], str]]: | CODE |
| LOW | code_review_graph/parser.py | 6645 | def _get_member_expression_root_name(self, node) -> Optional[str]: | CODE |
| LOW | code_review_graph/parser.py | 6655 | def _looks_like_component_name(name: str) -> bool: | CODE |
| LOW | code_review_graph/cli.py | 133 | def _instruction_files_to_modify( | STRING |
| LOW⚡ | code_review_graph/search.py | 80 | def extract_query_identifiers(query: str) -> list[str]: | STRING |
| LOW | code_review_graph/main.py | 96 | async def build_or_update_graph_tool( | CODE |
| LOW | code_review_graph/main.py | 279 | def semantic_search_nodes_tool( | CODE |
| LOW | code_review_graph/main.py | 395 | def find_large_functions_tool( | CODE |
| LOW | code_review_graph/main.py | 551 | def get_architecture_overview_tool( | CODE |
| LOW | code_review_graph/main.py | 795 | def get_surprising_connections_tool( | CODE |
| LOW | code_review_graph/main.py | 815 | def get_suggested_questions_tool( | CODE |
| LOW | code_review_graph/incremental.py | 234 | def _write_data_dir_gitignore(data_dir: Path) -> None: | CODE |
| LOW | code_review_graph/incremental.py | 327 | def ensure_repo_gitignore_excludes_crg(repo_root: Path) -> str: | CODE |
| 982 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | code_review_graph/skills.py | 998 | cat > /dev/null || true | CODE |
| HIGH⚡ | code_review_graph/skills.py | 1000 | msg="$(code-review-graph status --repo "__CRG_REPO__" 2>&1 | head -n 1 || true)" | CODE |
| HIGH⚡ | code_review_graph/skills.py | 1006 | ' 2>/dev/null || echo '{"suppressOutput": true}' | CODE |
| HIGH | code_review_graph/skills.py | 564 | "cat >/dev/null || true; " | CODE |
| HIGH | code_review_graph/skills.py | 582 | "cat >/dev/null || true; " | CODE |
| HIGH | code_review_graph/skills.py | 607 | "cat >/dev/null || true; " | CODE |
| HIGH | code_review_graph/skills.py | 625 | "cat >/dev/null || true; " | CODE |
| HIGH | code_review_graph/skills.py | 661 | code-review-graph update || true | CODE |
| HIGH | code_review_graph/skills.py | 662 | code-review-graph detect-changes --brief || true | CODE |
| HIGH | code_review_graph/skills.py | 1017 | cat > /dev/null || true | CODE |
| HIGH | code_review_graph/skills.py | 1019 | code-review-graph update --skip-flows --repo "__CRG_REPO__" >/dev/null 2>&1 || true | CODE |
| HIGH | code_review_graph/skills.py | 1217 | " 2>/dev/null || echo '{"passed":true}' | CODE |
| HIGH | code_review_graph/skills.py | 1239 | " <<< "$output" 2>/dev/null || echo '{"passed":true}' | CODE |
| HIGH | code_review_graph/skills.py | 1261 | " <<< "$output" 2>/dev/null || echo '{"passed":true}' | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 832 | var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 837 | if (d.line_start != null) h += '<div class="tt-row"><span class="tt-label">Lines: </span>' + d.line_start + ' \u2013 ' | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 837 | if (d.line_start != null) h += '<div class="tt-row"><span class="tt-label">Lines: </span>' + d.line_start + ' \u2013 ' | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 840 | if (d.community_id != null) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 890 | CONTAINS: { dash:null, width:1, opacity:0.14, marker:"" }, | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 891 | CALLS: { dash:null, width:2, opacity:0.7, marker:"url(#arrow-calls)" }, | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 898 | function eStyle(d) { return EDGE_CFG[d.kind] || {dash:null,width:1,opacity:0.3,marker:""}; } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 901 | if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 901 | if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 972 | var best = null, bestDist = Infinity; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 978 | if (ev.key === "ArrowRight" && dx > 0 && Math.abs(dy) < Math.abs(dx)) ok = true; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 979 | if (ev.key === "ArrowLeft" && dx < 0 && Math.abs(dy) < Math.abs(dx)) ok = true; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 980 | if (ev.key === "ArrowDown" && dy > 0 && Math.abs(dx) < Math.abs(dy)) ok = true; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 981 | if (ev.key === "ArrowUp" && dy < 0 && Math.abs(dx) < Math.abs(dy)) ok = true; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 982 | if (ok && dist < bestDist) { best = n; bestDist = dist; } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1170 | return d._hidden ? "none" : null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1179 | if (cid == null) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1182 | if (cid != null && hiddenCommunities.has(cid)) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1185 | return null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1190 | if (cid == null) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1193 | if (cid != null && hiddenCommunities.has(cid)) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1196 | return null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1200 | var activeFlowQns = null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1203 | if (idx === "") { activeFlowQns = null; clearFlowHighlight(); return; } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1212 | if (!activeFlowQns || activeFlowQns.size === 0) { clearFlowHighlight(); return; } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1249 | if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1249 | if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1250 | if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1250 | if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1253 | var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1259 | if (d.community_id != null) { | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1628 | CROSS_COMMUNITY: { dash: null, width: 2, opacity: 0.6, marker: "" }, | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1630 | CONTAINS: { dash: null, width: 1, opacity: 0.08, marker: "" }, | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1631 | CALLS: { dash: null, width: 1.5, opacity: 0.7, marker: "url(#arrow-calls)" }, | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1635 | function eStyle(d) { return EDGE_CFG[d.kind] || { dash: null, width: 1, opacity: 0.3, marker: "" }; } | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1740 | if (d.line_start != null) addRow("Lines", d.line_start + " \u2013 " + (d.line_end || d.line_start)); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1740 | if (d.line_start != null) addRow("Lines", d.line_start + " \u2013 " + (d.line_end || d.line_start)); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1743 | if (d.weight != null) addRow("Weight", d.weight); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1780 | var linkSel = null, labelSel = null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1782 | var simulation = null; | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1788 | if (d.kind === "Community") return Math.max(12, Math.min(40, 8 + Math.sqrt(d.member_count || 1) * 3)); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1790 | if (d.symbol_count != null) return Math.max(8, Math.min(30, 6 + Math.sqrt(d.symbol_count || 1) * 2)); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1790 | if (d.symbol_count != null) return Math.max(8, Math.min(30, 6 + Math.sqrt(d.symbol_count || 1) * 2)); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1796 | if (d.kind === "Community" && d.community_id != null) return communityColorScale(d.community_id); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1838 | if (d.kind === "CROSS_COMMUNITY" || d.kind === "DEPENDS_ON") return Math.max(100, 200 - (d.weight || 1) * 5); | CODE |
| HIGH⚡ | code_review_graph/visualization.py | 1843 | if (d.kind === "CROSS_COMMUNITY" || d.kind === "DEPENDS_ON") return 0.1 + Math.min(0.5, (d.weight || 1) * 0.02); | CODE |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/communities.py | 7 | CODE | |
| LOW | code_review_graph/exports.py | 3 | CODE | |
| LOW | code_review_graph/changes.py | 7 | CODE | |
| LOW | code_review_graph/spring_resolver.py | 18 | CODE | |
| LOW | code_review_graph/tsconfig_resolver.py | 8 | CODE | |
| LOW | code_review_graph/analysis.py | 4 | CODE | |
| LOW | code_review_graph/jedi_resolver.py | 12 | CODE | |
| LOW | code_review_graph/refactor.py | 9 | CODE | |
| LOW | code_review_graph/skills.py | 9 | CODE | |
| LOW | code_review_graph/memory.py | 3 | CODE | |
| LOW | code_review_graph/enrich.py | 8 | CODE | |
| LOW | code_review_graph/registry.py | 7 | CODE | |
| LOW | code_review_graph/context_savings.py | 7 | CODE | |
| LOW | code_review_graph/graph.py | 8 | CODE | |
| LOW | code_review_graph/graph_diff.py | 3 | CODE | |
| LOW | code_review_graph/constants.py | 3 | CODE | |
| LOW | code_review_graph/__init__.py | 3 | CODE | |
| LOW | code_review_graph/__init__.py | 3 | CODE | |
| LOW | code_review_graph/__init__.py | 3 | CODE | |
| LOW | code_review_graph/__init__.py | 3 | CODE | |
| LOW | code_review_graph/__init__.py | 3 | CODE | |
| LOW | code_review_graph/rescript_resolver.py | 23 | CODE | |
| LOW | code_review_graph/visualization.py | 14 | CODE | |
| LOW | code_review_graph/prompts.py | 13 | CODE | |
| LOW | code_review_graph/parser.py | 7 | CODE | |
| LOW | code_review_graph/embeddings.py | 11 | CODE | |
| LOW | code_review_graph/embeddings.py | 735 | CODE | |
| LOW | code_review_graph/cli.py | 27 | CODE | |
| LOW | code_review_graph/custom_languages.py | 24 | CODE | |
| LOW | code_review_graph/migrations.py | 7 | CODE | |
| LOW | code_review_graph/search.py | 8 | CODE | |
| LOW | code_review_graph/flows.py | 9 | CODE | |
| LOW | code_review_graph/postprocessing.py | 15 | CODE | |
| LOW | code_review_graph/hints.py | 9 | CODE | |
| LOW | code_review_graph/main.py | 9 | CODE | |
| LOW | code_review_graph/wiki.py | 7 | CODE | |
| LOW | code_review_graph/daemon_cli.py | 13 | CODE | |
| LOW | code_review_graph/daemon.py | 11 | CODE | |
| LOW | code_review_graph/token_benchmark.py | 3 | CODE | |
| LOW | code_review_graph/incremental.py | 7 | CODE | |
| LOW | code_review_graph/incremental.py | 1221 | CODE | |
| LOW | code_review_graph/temporal_resolver.py | 19 | CODE | |
| LOW | code_review_graph/tools/analysis_tools.py | 3 | CODE | |
| LOW | code_review_graph/tools/build.py | 3 | CODE | |
| LOW | code_review_graph/tools/query.py | 3 | CODE | |
| LOW | code_review_graph/tools/refactor_tools.py | 3 | CODE | |
| LOW | code_review_graph/tools/community_tools.py | 3 | CODE | |
| LOW | code_review_graph/tools/_common.py | 3 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 34 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 37 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 38 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 39 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 40 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 43 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 48 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 48 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 48 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 55 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 55 | CODE | |
| LOW | code_review_graph/tools/__init__.py | 55 | CODE | |
| 66 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/communities.py | 128 | CODE | |
| LOW | code_review_graph/exports.py | 140 | CODE | |
| LOW | code_review_graph/exports.py | 157 | CODE | |
| LOW | code_review_graph/changes.py | 174 | CODE | |
| LOW | code_review_graph/tsconfig_resolver.py | 65 | CODE | |
| LOW | code_review_graph/tsconfig_resolver.py | 146 | CODE | |
| LOW | code_review_graph/refactor.py | 240 | CODE | |
| LOW | code_review_graph/refactor.py | 587 | CODE | |
| LOW | code_review_graph/refactor.py | 677 | CODE | |
| LOW | code_review_graph/refactor.py | 306 | CODE | |
| LOW | code_review_graph/skills.py | 710 | CODE | |
| LOW | code_review_graph/skills.py | 761 | CODE | |
| LOW | code_review_graph/memory.py | 77 | CODE | |
| LOW | code_review_graph/enrich.py | 30 | CODE | |
| LOW | code_review_graph/registry.py | 57 | CODE | |
| LOW | code_review_graph/graph.py | 375 | CODE | |
| LOW | code_review_graph/graph.py | 752 | CODE | |
| LOW | code_review_graph/visualization.py | 28 | CODE | |
| LOW | code_review_graph/parser.py | 613 | CODE | |
| LOW | code_review_graph/parser.py | 698 | CODE | |
| LOW | code_review_graph/parser.py | 1047 | CODE | |
| LOW | code_review_graph/parser.py | 1158 | CODE | |
| LOW | code_review_graph/parser.py | 1288 | CODE | |
| LOW | code_review_graph/parser.py | 1372 | CODE | |
| LOW | code_review_graph/parser.py | 1503 | CODE | |
| LOW | code_review_graph/parser.py | 1607 | CODE | |
| LOW | code_review_graph/parser.py | 2099 | CODE | |
| LOW | code_review_graph/parser.py | 2205 | CODE | |
| LOW | code_review_graph/parser.py | 2446 | CODE | |
| LOW | code_review_graph/parser.py | 2475 | CODE | |
| LOW | code_review_graph/parser.py | 2661 | CODE | |
| LOW | code_review_graph/parser.py | 2711 | CODE | |
| LOW | code_review_graph/parser.py | 2789 | CODE | |
| LOW | code_review_graph/parser.py | 2929 | CODE | |
| LOW | code_review_graph/parser.py | 2965 | CODE | |
| LOW | code_review_graph/parser.py | 3088 | CODE | |
| LOW | code_review_graph/parser.py | 3108 | CODE | |
| LOW | code_review_graph/parser.py | 3131 | CODE | |
| LOW | code_review_graph/parser.py | 3488 | CODE | |
| LOW | code_review_graph/parser.py | 3675 | CODE | |
| LOW | code_review_graph/parser.py | 3711 | CODE | |
| LOW | code_review_graph/parser.py | 3863 | CODE | |
| LOW | code_review_graph/parser.py | 3877 | CODE | |
| LOW | code_review_graph/parser.py | 3916 | CODE | |
| LOW | code_review_graph/parser.py | 3988 | CODE | |
| LOW | code_review_graph/parser.py | 4026 | CODE | |
| LOW | code_review_graph/parser.py | 4084 | CODE | |
| LOW | code_review_graph/parser.py | 4114 | CODE | |
| LOW | code_review_graph/parser.py | 4196 | CODE | |
| LOW | code_review_graph/parser.py | 4243 | CODE | |
| LOW | code_review_graph/parser.py | 4352 | CODE | |
| LOW | code_review_graph/parser.py | 5063 | CODE | |
| LOW | code_review_graph/parser.py | 5231 | CODE | |
| LOW | code_review_graph/parser.py | 5304 | CODE | |
| LOW | code_review_graph/parser.py | 5319 | CODE | |
| LOW | code_review_graph/parser.py | 5359 | CODE | |
| LOW | code_review_graph/parser.py | 5403 | CODE | |
| LOW | code_review_graph/parser.py | 5603 | CODE | |
| LOW | code_review_graph/parser.py | 5714 | CODE | |
| LOW | code_review_graph/parser.py | 6001 | CODE | |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/communities.py | 568 | except Exception: | CODE |
| LOW | code_review_graph/jedi_resolver.py | 128 | except Exception as e: | CODE |
| LOW | code_review_graph/jedi_resolver.py | 147 | except Exception: # nosec B112 - Jedi may fail on malformed code | CODE |
| LOW | code_review_graph/graph.py | 591 | except Exception: # nosec B110 - FTS5 table may not exist on older schemas | CODE |
| LOW | code_review_graph/embeddings.py | 109 | except Exception as exc: # pragma: no cover — best-effort startup hook | CODE |
| LOW | code_review_graph/embeddings.py | 200 | except Exception as e: | CODE |
| LOW | code_review_graph/embeddings.py | 286 | except Exception as e: | CODE |
| LOW | code_review_graph/embeddings.py | 449 | except Exception: | CODE |
| LOW | code_review_graph/embeddings.py | 460 | except Exception: # nosec B110 | CODE |
| LOW | code_review_graph/embeddings.py | 524 | except Exception as e: | CODE |
| LOW | code_review_graph/embeddings.py | 597 | except Exception: | CODE |
| LOW⚡ | code_review_graph/cli.py | 313 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/cli.py | 320 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/cli.py | 328 | except Exception as exc: | CODE |
| LOW | code_review_graph/cli.py | 346 | except Exception as exc: | CODE |
| MEDIUM | code_review_graph/cli.py | 1115 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| LOW⚡ | code_review_graph/search.py | 245 | except Exception as e: | STRING |
| LOW | code_review_graph/search.py | 349 | except Exception as e: | STRING |
| MEDIUM⚡ | code_review_graph/daemon_cli.py | 36 | print("Error: Daemon is already running.") | CODE |
| MEDIUM | code_review_graph/daemon_cli.py | 59 | print("Error: Could not read daemon PID.") | CODE |
| MEDIUM | code_review_graph/daemon_cli.py | 70 | print(f"Error: Permission denied sending signal to PID {pid}.") | CODE |
| MEDIUM | code_review_graph/daemon_cli.py | 176 | print(f"Error reading log file: {exc}") | CODE |
| MEDIUM | code_review_graph/daemon_cli.py | 192 | print(f"Error: {exc}") | CODE |
| LOW⚡ | code_review_graph/daemon.py | 518 | except Exception: | CODE |
| LOW | code_review_graph/daemon.py | 739 | except Exception: | CODE |
| LOW | code_review_graph/daemon.py | 948 | except Exception: | CODE |
| LOW | code_review_graph/incremental.py | 68 | except Exception as exc: # noqa: BLE001 - best-effort post-pass | CODE |
| LOW | code_review_graph/incremental.py | 80 | except Exception as exc: # noqa: BLE001 - best-effort post-pass | CODE |
| LOW | code_review_graph/incremental.py | 92 | except Exception as exc: # noqa: BLE001 - best-effort post-pass | CODE |
| LOW | code_review_graph/incremental.py | 284 | except Exception as exc: | CODE |
| LOW | code_review_graph/incremental.py | 816 | except Exception as e: | CODE |
| LOW | code_review_graph/incremental.py | 867 | except Exception as e: | CODE |
| LOW | code_review_graph/incremental.py | 1004 | except Exception as e: | CODE |
| LOW | code_review_graph/incremental.py | 1137 | except Exception as e: | CODE |
| LOW | code_review_graph/incremental.py | 1164 | except Exception as e: | CODE |
| LOW | code_review_graph/incremental.py | 1190 | except Exception as e: | CODE |
| LOW⚡ | code_review_graph/tools/refactor_tools.py | 122 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/community_tools.py | 62 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/community_tools.py | 138 | except Exception as exc: | CODE |
| LOW | code_review_graph/tools/community_tools.py | 243 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/docs.py | 230 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/flows_tools.py | 79 | except Exception as exc: | CODE |
| LOW | code_review_graph/tools/flows_tools.py | 173 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/review.py | 345 | except Exception as exc: | CODE |
| LOW | code_review_graph/tools/review.py | 474 | except Exception as exc: | CODE |
| LOW⚡ | code_review_graph/tools/registry_tools.py | 40 | except Exception as exc: | CODE |
| LOW | code_review_graph/tools/registry_tools.py | 105 | except Exception as exc: | CODE |
| LOW | code_review_graph/tools/registry_tools.py | 124 | except Exception as exc: | CODE |
| LOW | code_review_graph/eval/runner.py | 205 | except Exception as e: | CODE |
| LOW | code_review_graph/eval/token_benchmark.py | 179 | except Exception as e: | CODE |
| LOW | code_review_graph/eval/benchmarks/build_performance.py | 23 | except Exception as exc: | CODE |
| LOW | code_review_graph/eval/benchmarks/build_performance.py | 34 | except Exception as exc: | CODE |
| LOW | code_review_graph/eval/benchmarks/agent_baseline.py | 151 | except Exception as exc: | CODE |
| LOW | …de_review_graph/eval/benchmarks/multi_hop_retrieval.py | 65 | except Exception as exc: # noqa: BLE001 — benchmark must not abort the runner | CODE |
| LOW | …de_review_graph/eval/benchmarks/multi_hop_retrieval.py | 101 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | code_review_graph/eval/benchmarks/impact_accuracy.py | 142 | except Exception as exc: | CODE |
| LOW | code_review_graph/eval/benchmarks/impact_accuracy.py | 172 | except Exception as exc: | CODE |
| LOW | code_review_graph/eval/benchmarks/token_efficiency.py | 108 | except Exception as exc: | CODE |
| LOW | tests/test_search.py | 167 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | code_review_graph/communities.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/exports.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/changes.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/spring_resolver.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/tsconfig_resolver.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/analysis.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/jedi_resolver.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/refactor.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/skills.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/memory.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/enrich.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/registry.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/graph.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/graph.py | 307 | def set_metadata(self, key: str, value: str) -> None: | CODE |
| LOW | code_review_graph/graph_diff.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/__init__.py | 13 | __all__ = [ | CODE |
| LOW | code_review_graph/rescript_resolver.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/visualization.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/parser.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/embeddings.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/cli.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/custom_languages.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/migrations.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/migrations.py | 34 | def _set_schema_version(conn: sqlite3.Connection, version: int) -> None: | CODE |
| LOW⚡ | code_review_graph/search.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/flows.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/postprocessing.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/main.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/wiki.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/daemon_cli.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/daemon.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/daemon.py | 866 | def _setup_signal_handlers(self) -> None: | CODE |
| LOW | code_review_graph/token_benchmark.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/incremental.py | 58 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/temporal_resolver.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/tools/build.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/tools/query.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/tools/__init__.py | 105 | __all__ = [ | CODE |
| LOW⚡ | code_review_graph/tools/docs.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/tools/review.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/tools/context.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | code_review_graph/tools/registry_tools.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/runner.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/__init__.py | 22 | __all__ = [ | CODE |
| LOW | code_review_graph/eval/token_benchmark.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/build_performance.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/agent_baseline.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | …de_review_graph/eval/benchmarks/multi_hop_retrieval.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/search_quality.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/flow_completeness.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/impact_accuracy.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | code_review_graph/eval/benchmarks/token_efficiency.py | 18 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_registry.py | 111 | # Create a new registry from the same file | COMMENT |
| MEDIUM | tests/test_flows.py | 265 | # Create a chain of 20 functions. | COMMENT |
| MEDIUM | tests/test_multilang.py | 219 | # Create a mini Java project with two packages | COMMENT |
| MEDIUM | tests/test_daemon.py | 653 | # Create a new repo directory for alpha with a different path (no graph.db) | COMMENT |
| MEDIUM | tests/test_incremental.py | 564 | # Create a simple Python file | COMMENT |
| MEDIUM⚡ | tests/test_integration_git.py | 164 | # Create the parent repo and add lib as a submodule | COMMENT |
| MEDIUM | tests/test_integration_git.py | 248 | # Create a legitimate page | COMMENT |
| MEDIUM | tests/test_tools.py | 1293 | # Create the two communities and stamp community_id on nodes. | COMMENT |
| MEDIUM | tests/test_tools.py | 1504 | # Create a small graph | COMMENT |
| MEDIUM | tests/test_graph.py | 210 | # Create a chain: file_a -> func_a -> (calls) -> func_b in file_b | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | code_review_graph/eval/token_benchmark.py | 28 | # Step 1: get_minimal_context | COMMENT |
| LOW⚡ | code_review_graph/eval/token_benchmark.py | 34 | # Step 2: detect_changes (minimal) | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 342 | # Step 1: Trigger | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 350 | # Step 2: Detect | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 524 | # Step 1: User asks | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 532 | # Step 2: Claude Code | COMMENT |
| LOW | diagrams/generate_diagrams.py | 363 | # Step 3: Cascade | COMMENT |
| LOW | diagrams/generate_diagrams.py | 376 | # Step 4: Re-parse | COMMENT |
| LOW | diagrams/generate_diagrams.py | 545 | # Step 3: MCP call | COMMENT |
| LOW | diagrams/generate_diagrams.py | 558 | # Step 4: Graph query | COMMENT |
| LOW | diagrams/generate_diagrams.py | 570 | # Step 5: Claude responds | COMMENT |
| LOW⚡ | tests/test_refactor.py | 638 | # Step 2: refactor_id should still be valid — dry_run doesn't consume it | COMMENT |
| LOW⚡ | tests/test_refactor.py | 642 | # Step 3: real apply — uses same refactor_id | COMMENT |
| LOW | tests/test_refactor.py | 623 | # Step 1: dry_run — no writes, returns diff | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | code_review_graph/eval/token_benchmark.py | 28 | # Step 1: get_minimal_context | COMMENT |
| LOW⚡ | code_review_graph/eval/token_benchmark.py | 34 | # Step 2: detect_changes (minimal) | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 342 | # Step 1: Trigger | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 350 | # Step 2: Detect | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 524 | # Step 1: User asks | COMMENT |
| LOW⚡ | diagrams/generate_diagrams.py | 532 | # Step 2: Claude Code | COMMENT |
| LOW | diagrams/generate_diagrams.py | 363 | # Step 3: Cascade | COMMENT |
| LOW | diagrams/generate_diagrams.py | 376 | # Step 4: Re-parse | COMMENT |
| LOW | diagrams/generate_diagrams.py | 545 | # Step 3: MCP call | COMMENT |
| LOW | diagrams/generate_diagrams.py | 558 | # Step 4: Graph query | COMMENT |
| LOW | diagrams/generate_diagrams.py | 570 | # Step 5: Claude responds | COMMENT |
| LOW⚡ | tests/test_refactor.py | 638 | # Step 2: refactor_id should still be valid — dry_run doesn't consume it | COMMENT |
| LOW⚡ | tests/test_refactor.py | 642 | # Step 3: real apply — uses same refactor_id | COMMENT |
| LOW | tests/test_refactor.py | 623 | # Step 1: dry_run — no writes, returns diff | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | code_review_graph/registry.py | 60 | Register a repository path. Validates that the path contains a ``.git`` or ``.code-review-graph`` direc | STRING |
| HIGH | code_review_graph/daemon.py | 85 | Load daemon configuration from a TOML file. Args: path: Explicit config path. Falls back to :data:`CONFIG_ | STRING |
| HIGH | code_review_graph/daemon.py | 212 | Add a repository to the daemon config and persist the change. Args: repo_path: Path to the repository (wi | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/parser.py | 261 | # as Function nodes (public ones auto-generate getters) and distinguished | COMMENT |
| LOW | code_review_graph/parser.py | 321 | # Dart: import_or_export wraps library_import > import_specification > configurable_uri | COMMENT |
| LOW | .serena/project.yml | 1 | # the name by which the project can be referenced within Serena | COMMENT |
| LOW | .serena/project.yml | 21 | # - For JavaScript, use typescript | COMMENT |
| LOW | .serena/project.yml | 41 | # The language backend to use for this project. | COMMENT |
| LOW | .serena/project.yml | 61 | COMMENT | |
| LOW | .serena/project.yml | 81 | # * `execute_shell_command`: Executes a shell command. | COMMENT |
| LOW | .serena/project.yml | 101 | # * `rename_symbol`: Renames a symbol throughout the codebase using language server refactoring capabilities. | COMMENT |
| LOW | .serena/project.yml | 121 | # If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply. | COMMENT |
| LOW | .serena/project.yml | 141 | # If null or missing, use the setting from the global configuration. | COMMENT |
| LOW | .beads/config.yaml | 1 | # Beads Configuration File | COMMENT |
| LOW | .beads/config.yaml | 21 | # title-length: 255 | COMMENT |
| LOW | .beads/config.yaml | 41 | # backup: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/communities.py | 659 | # Check if any communities are affected (batch to stay under SQLite limit) | COMMENT |
| LOW | code_review_graph/refactor.py | 533 | # Check if this is a method override where the base class method | COMMENT |
| LOW | code_review_graph/skills.py | 364 | # Check if already present | COMMENT |
| LOW | code_review_graph/parser.py | 1537 | # Check if all non-empty lines are MAGIC lines | COMMENT |
| LOW | code_review_graph/wiki.py | 105 | # Check if this flow passes through any community member | COMMENT |
| LOW | .serena/project.yml | 123 | # Set this to [] to disable base modes for this project. | COMMENT |
| LOW | .serena/project.yml | 124 | # Set this to a list of mode names to always include the respective modes for this project. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_integration_git.py | 158 | _git(lib_repo, "config", "user.email", "test@test.com") | CODE |
| LOW⚡ | tests/test_integration_git.py | 168 | _git(parent, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/test_integration_git.py | 53 | _git(repo, "config", "user.email", "test@test.com") | CODE |
| LOW | tests/test_eval.py | 261 | ["git", "config", "user.email", "test@test.com"], | CODE |
| LOW | tests/test_eval.py | 404 | ["git", "config", "user.email", "test@test.com"], | CODE |
| LOW | tests/test_eval.py | 478 | ["git", "config", "user.email", "test@test.com"], | CODE |
| LOW | tests/test_eval.py | 548 | _git(repo_path, "config", "user.email", "test@test.com") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | code_review_graph/flows.py | 85 | # FastAPI lifecycle / dependency injection | COMMENT |
| MEDIUM | docs/FAQ.md | 51 | ## Isn't this just RAG? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_parser.py | 1307 | # the highest-leverage language for the fix after Python. | COMMENT |
| MEDIUM | tests/test_embeddings.py | 486 | """Ensure localhost detection is robust against subdomain tricks.""" | STRING |
| MEDIUM | code-review-graph-vscode/package-lock.json | 3466 | "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .serena/project.yml | 58 | # Same syntax as gitignore, so you can use * and **. | COMMENT |
| LOW | .serena/project.yml | 71 | # To make sure you have the latest list of tools, and to view their descriptions, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_parser.py | 294 | "def helper():\n" | CODE |
| LOW | tests/test_parser.py | 1112 | b"def helper(): pass\n", | CODE |
| LOW⚡ | tests/test_integration_git.py | 160 | (lib_repo / "util.py").write_text("def helper():\n pass\n") | CODE |
| LOW⚡ | tests/test_tools.py | 808 | + "def handle_request():\n" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code_review_graph/tools/refactor_tools.py | 168 | CODE |