AI Slop Code RIsk Monitor

tirth8205/code-review-graph

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.

42.5 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for tirth8205/code-review-graph, a Python project with 32,028 GitHub stars. SynthScan examined 177,346 lines of code across 345 source files, recording 5509 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 42.5 (High pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

42.5
Adjusted Signal
42.5
Raw Pattern Score
100%
Time Factor
2026-10-06
Last Push
32.0K
Stars
Python
Language
177.3K
Lines of Code
345
Files
5.5K
Pattern Hits
2026-10-12
Scan Date
0.63
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 59.8/100 · HIGH

Can maintainers explain intent, assumptions, and trade-offs? 4006 finding(s).

Hallucinated Dependency & Supply Chain Risk 24.5/100 · LOW

Are imports declared and package/API names verified? 403 finding(s).

Agent Over-Engineering Ratio 82.6/100 · CRITICAL

Are wrappers, guards, and repeated structures necessary? 4726 finding(s).

PR Review Velocity Impact 90.8/100 · CRITICAL

Which changes need focused human review? 5509 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 218MEDIUM 925LOW 4366

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 5509 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Decorative Section Separators892 hits · 2915 pts
SeverityFileLineSnippetContext
MEDIUM⚡code_review_graph/communities.py30# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/communities.py32# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/communities.py42# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/communities.py44# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py68# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py70# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py183# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py185# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py257# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py259# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py469# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py471# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py560# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py562# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py792# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/communities.py794# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py29# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py31# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py64# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py66# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py186# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py188# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py262# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py264# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py443# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/exports.py445# -------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py55# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py303# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py305# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py531# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py533# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py576# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py578# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py650# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/changes.py652# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py50 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py53 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py74 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py81 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py100 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py103 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py114 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/spring_resolver.py116 # -----------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py40 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py42 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py70 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py72 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py235# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/tsconfig_resolver.py237# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/scoped_resolver.py272 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/scoped_resolver.py276 # ------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/scoped_resolver.py295 # ------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/scoped_resolver.py298 # ------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/scoped_resolver.py307 # ------------------------------------------------------------------COMMENT
MEDIUM⚡code_review_graph/scoped_resolver.py312 # ------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/refactor.py49# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/refactor.py51# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/refactor.py70# ---------------------------------------------------------------------------COMMENT
MEDIUMcode_review_graph/refactor.py72# ---------------------------------------------------------------------------COMMENT
832 more matches not shown…
Hyper-Verbose Identifiers3617 hits · 2883 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/communities.py848def incremental_detect_communities(CODE
LOWcode_review_graph/communities.py1019def get_architecture_overview(store: GraphStore) -> dict[str, Any]:CODE
LOWcode_review_graph/changes.py440def compute_file_churn_with_status(CODE
LOWcode_review_graph/scoped_resolver.py162def _is_unresolved_scoped_target(target: str) -> bool:CODE
LOWcode_review_graph/analysis.py213def find_surprising_connections(CODE
LOWcode_review_graph/analysis.py317def generate_suggested_questions(CODE
LOWcode_review_graph/jedi_resolver.py234def _find_untracked_method_calls(root, is_test_file: bool = False):CODE
LOWcode_review_graph/refactor.py224def _collect_type_referenced_names(store: GraphStore) -> set[str]:CODE
LOWcode_review_graph/skills.py467def _is_generated_server_entry(entry: Any) -> bool:CODE
LOWcode_review_graph/skills.py517def _warn_legacy_opencode_config(repo_root: Path) -> None:CODE
LOWcode_review_graph/skills.py1457def generate_codex_hooks_config(repo_root: Path) -> dict[str, Any]:CODE
LOWcode_review_graph/skills.py1835def _is_generated_hook_script(command: str) -> bool:CODE
LOWcode_review_graph/skills.py1873def _is_generated_hook_command(command: Any) -> bool:CODE
LOWcode_review_graph/skills.py1991def _merge_hooks_into_settings(CODE
LOWcode_review_graph/skills.py2537def inject_platform_instructions(repo_root: Path, target: str = "all") -> list[str]:CODE
LOWcode_review_graph/skills.py2591def generate_cursor_hooks_config() -> dict[str, Any]:CODE
LOWcode_review_graph/skills.py1575def _git_hook_markers_balanced(text: str) -> bool:STRING
LOWcode_review_graph/skills.py2230def _known_instruction_sections() -> tuple[str, ...]:STRING
LOWcode_review_graph/skills.py2347def _remove_legacy_instruction_file(path: Path) -> None:STRING
LOWcode_review_graph/skills.py2491def install_gemini_cli_skills(repo_root: Path) -> Path:STRING
LOWcode_review_graph/context_savings.py201def format_context_savings_panel(CODE
LOWcode_review_graph/graph.py70def _compatible_edge_languages(language: str) -> tuple[str, ...]:CODE
LOWcode_review_graph/graph.py374def _edge_extra_is_unresolved(extra: Optional[str]) -> bool:CODE
LOWcode_review_graph/graph.py1226 def search_edges_by_target_name(CODE
LOWcode_review_graph/graph.py1247 def iter_edges_by_target_name(CODE
LOWcode_review_graph/graph.py1672 def _python_module_file_index(conn: sqlite3.Connection) -> dict[str, str]:CODE
LOWcode_review_graph/graph.py1704 def _select_evidence_backed_candidate(CODE
LOWcode_review_graph/graph.py1718 def _receiver_backed_candidates(CODE
LOWcode_review_graph/graph.py1764 def _receiver_evidence_admits_candidate(CODE
LOWcode_review_graph/graph.py1804 def resolve_bare_call_targets(self) -> int:CODE
LOWcode_review_graph/graph.py1819 def refresh_target_resolution(self) -> int:CODE
LOWcode_review_graph/graph.py1843 def count_edges_by_resolution(self, kind: str = "CALLS") -> dict[str, int]:CODE
LOWcode_review_graph/graph.py1875 def resolve_cpp_scoped_call_targets(self) -> int:CODE
LOWcode_review_graph/graph.py2084 def resolve_bare_tested_by_sources(self) -> int:CODE
LOWcode_review_graph/graph.py2455 def search_nodes_by_qualified_tail(CODE
LOWcode_review_graph/graph.py2470 def count_nodes_by_qualified_tail(self, tail: str) -> int:CODE
LOWcode_review_graph/graph.py2681 def _import_scope_importer_index(self) -> dict[str, list[str]]:CODE
LOWcode_review_graph/graph.py2713 def count_unresolved_call_sites(self, names: set[str]) -> int:CODE
LOWcode_review_graph/graph.py3017 def _get_impact_radius_networkx(CODE
LOWcode_review_graph/graph.py3302 def get_flow_criticalities_for_node(self, node_id: int) -> list[float]:CODE
LOWcode_review_graph/graph.py3322 def get_community_ids_by_qualified_names(CODE
LOWcode_review_graph/graph.py3353 def get_nodes_without_signature(self) -> list[sqlite3.Row]:CODE
LOWcode_review_graph/graph.py3523 def get_nodes_by_community_id(CODE
LOWcode_review_graph/rescript_resolver.py36def resolve_rescript_cross_module(store: GraphStore) -> dict:CODE
LOWcode_review_graph/hcl_resolver.py15def resolve_hcl_module_references(store: GraphStore) -> dict[str, int]:CODE
LOW⚡code_review_graph/parser.py10093 def _extract_js_var_functions(CODE
LOW⚡code_review_graph/parser.py12667 def _resolve_php_scoped_calls(CODE
LOW⚡code_review_graph/parser.py18834 def _handle_r_binary_operator(CODE
LOWcode_review_graph/parser.py177def _python_type_checking_aliases(CODE
LOWcode_review_graph/parser.py364def _python_unreachable_call_positions(CODE
LOWcode_review_graph/parser.py412def _is_statically_false_condition(cond) -> bool:CODE
LOWcode_review_graph/parser.py503def _parser_load_timeout_seconds() -> float:CODE
LOWcode_review_graph/parser.py546def _install_hint_for_probe_failure(detail: str) -> str | None:CODE
LOWcode_review_graph/parser.py610def _parser_load_probe_succeeds(CODE
LOWcode_review_graph/parser.py662def _clear_parser_probe_cache() -> None:CODE
LOWcode_review_graph/parser.py799def _read_gemspec_require_paths(CODE
LOWcode_review_graph/parser.py1892def _vbnet_relationship_targets(value: str) -> list[str]:CODE
LOWcode_review_graph/parser.py2066def _rescript_brace_depth_array(cleaned: str) -> list[int]:CODE
LOWcode_review_graph/parser.py2448def _modifier_annotation_names(node) -> list[str]:CODE
LOWcode_review_graph/parser.py2760def _hcl_dynamic_iterator_name(block_node) -> Optional[str]:CODE
3557 more matches not shown…
Cross-Language Confusion172 hits · 798 pts
SeverityFileLineSnippetContext
HIGH⚡code_review_graph/skills.py1422 "cat >/dev/null || true; "CODE
HIGH⚡code_review_graph/skills.py1423 "command -v code-review-graph >/dev/null 2>&1 || exit 0; "CODE
HIGH⚡code_review_graph/skills.py1426 " --repo \"$(git rev-parse --show-toplevel 2>/dev/null)\""CODE
HIGH⚡code_review_graph/skills.py1441 "cat >/dev/null || true; "CODE
HIGH⚡code_review_graph/skills.py1442 "command -v code-review-graph >/dev/null 2>&1 || exit 0; "CODE
HIGH⚡code_review_graph/skills.py1445 " --repo \"$(git rev-parse --show-toplevel 2>/dev/null)\""CODE
HIGH⚡code_review_graph/skills.py2405cat > /dev/null || trueCODE
HIGH⚡code_review_graph/skills.py2407msg="$(code-review-graph status --repo "__CRG_REPO__" 2>&1 | head -n 1 || true)"CODE
HIGH⚡code_review_graph/skills.py2413' 2>/dev/null || echo '{"suppressOutput": true}'CODE
HIGHcode_review_graph/skills.py1468 "cat >/dev/null || true; "CODE
HIGHcode_review_graph/skills.py1486 "cat >/dev/null || true; "CODE
HIGHcode_review_graph/skills.py1524 crg_hook_git_dir=$(git rev-parse --absolute-git-dir 2>/dev/null) || crg_hook_git_dir=""CODE
HIGHcode_review_graph/skills.py1525 crg_hook_root=$(git rev-parse --show-toplevel 2>/dev/null) || crg_hook_root=""CODE
HIGHcode_review_graph/skills.py2424cat > /dev/null || trueCODE
HIGHcode_review_graph/skills.py2426code-review-graph update --skip-flows --repo "__CRG_REPO__" >/dev/null 2>&1 || trueCODE
HIGHcode_review_graph/skills.py2658" 2>/dev/null || echo '{"passed":true}'CODE
HIGHcode_review_graph/skills.py2680" <<< "$output" 2>/dev/null || echo '{"passed":true}'CODE
HIGHcode_review_graph/skills.py2702" <<< "$output" 2>/dev/null || echo '{"passed":true}'CODE
HIGH⚡code_review_graph/skills.py1552 " code-review-graph detect-changes --brief || true\n"STRING
HIGH⚡code_review_graph/skills.py1558 " code-review-graph update || true\n"STRING
HIGH⚡code_review_graph/skills.py1559 " code-review-graph detect-changes --brief || true\n"STRING
HIGH⚡code_review_graph/visualization.py1095var neighbourhood = graphData.neighbourhood || null;CODE
HIGH⚡code_review_graph/visualization.py1095var neighbourhood = graphData.neighbourhood || null;CODE
HIGH⚡code_review_graph/visualization.py1104var nbPathList = (neighbourhood && neighbourhood.path) || [];CODE
HIGH⚡code_review_graph/visualization.py1114 if (h == null) return true;CODE
HIGH⚡code_review_graph/visualization.py1115 return h <= nbVisibleDepth || nbExpanded.has(qn);CODE
HIGH⚡code_review_graph/visualization.py1187 var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || CODE
HIGH⚡code_review_graph/visualization.py1192 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.py1192 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.py1195 if (d.community_id != null) {CODE
HIGH⚡code_review_graph/visualization.py1248 CONTAINS: { dash:null, width:1, opacity:0.14, marker:"" },CODE
HIGH⚡code_review_graph/visualization.py1249 CALLS: { dash:null, width:2, opacity:0.7, marker:"url(#arrow-calls)" },CODE
HIGH⚡code_review_graph/visualization.py1256function eStyle(d) { return EDGE_CFG[d.kind] || {dash:null,width:1,opacity:0.3,marker:""}; }CODE
HIGH⚡code_review_graph/visualization.py1259 if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id);CODE
HIGH⚡code_review_graph/visualization.py1259 if (communityColoringOn && d.community_id != null) return communityColorScale(d.community_id);CODE
HIGH⚡code_review_graph/visualization.py1346 var best = null, bestDist = Infinity;CODE
HIGH⚡code_review_graph/visualization.py1352 if (ev.key === "ArrowRight" && dx > 0 && Math.abs(dy) < Math.abs(dx)) ok = true;CODE
HIGH⚡code_review_graph/visualization.py1353 if (ev.key === "ArrowLeft" && dx < 0 && Math.abs(dy) < Math.abs(dx)) ok = true;CODE
HIGH⚡code_review_graph/visualization.py1354 if (ev.key === "ArrowDown" && dy > 0 && Math.abs(dx) < Math.abs(dy)) ok = true;CODE
HIGH⚡code_review_graph/visualization.py1355 if (ev.key === "ArrowUp" && dy < 0 && Math.abs(dx) < Math.abs(dy)) ok = true;CODE
HIGH⚡code_review_graph/visualization.py1356 if (ok && dist < bestDist) { best = n; bestDist = dist; }CODE
HIGH⚡code_review_graph/visualization.py1674 return d._hidden ? "none" : null;CODE
HIGH⚡code_review_graph/visualization.py1683 if (cid == null) {CODE
HIGH⚡code_review_graph/visualization.py1686 if (cid != null && hiddenCommunities.has(cid)) {CODE
HIGH⚡code_review_graph/visualization.py1689 return null;CODE
HIGH⚡code_review_graph/visualization.py1694 if (cid == null) {CODE
HIGH⚡code_review_graph/visualization.py1697 if (cid != null && hiddenCommunities.has(cid)) {CODE
HIGH⚡code_review_graph/visualization.py1700 return null;CODE
HIGH⚡code_review_graph/visualization.py1704var activeFlowQns = null;CODE
HIGH⚡code_review_graph/visualization.py1707 if (idx === "") { activeFlowQns = null; clearFlowHighlight(); return; }CODE
HIGH⚡code_review_graph/visualization.py1716 if (!activeFlowQns || activeFlowQns.size === 0) { clearFlowHighlight(); return; }CODE
HIGH⚡code_review_graph/visualization.py1753 if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); }CODE
HIGH⚡code_review_graph/visualization.py1753 if (t === d.qualified_name && e.kind === "CALLS") { var sN = nodeById.get(s); if (sN) callers.push(sN); }CODE
HIGH⚡code_review_graph/visualization.py1754 if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); }CODE
HIGH⚡code_review_graph/visualization.py1754 if (s === d.qualified_name && e.kind === "CALLS") { var tN = nodeById.get(t); if (tN) callees.push(tN); }CODE
HIGH⚡code_review_graph/visualization.py1757 var bg = communityColoringOn && d.community_id != null ? communityColorScale(d.community_id) : (KIND_COLOR[d.kind] || CODE
HIGH⚡code_review_graph/visualization.py1763 if (d.community_id != null) {CODE
HIGH⚡code_review_graph/visualization.py2136 CROSS_COMMUNITY: { dash: null, width: 2, opacity: 0.6, marker: "" },CODE
HIGH⚡code_review_graph/visualization.py2138 CONTAINS: { dash: null, width: 1, opacity: 0.08, marker: "" },CODE
HIGH⚡code_review_graph/visualization.py2139 CALLS: { dash: null, width: 1.5, opacity: 0.7, marker: "url(#arrow-calls)" },CODE
112 more matches not shown…
Empty Error Handlers40 hits · 200 pts
SeverityFileLineSnippetContext
HIGHcode_review_graph/enrich.py232except (OSError, ValueError):CODE
HIGHcode_review_graph/graph.py2505except Exception: # nosec B110 - FTS5 table may not exist on older schemasCODE
HIGHcode_review_graph/graph.py2545except Exception: # nosec B110 - FTS5 may not exist on older schemasCODE
HIGHcode_review_graph/parser.py15572except (OSError, ValueError):CODE
HIGHcode_review_graph/parser.py15584except (OSError, ValueError):CODE
HIGHcode_review_graph/parser.py16177except OSError:CODE
HIGHcode_review_graph/parser.py15598except (OSError, ValueError):CODE
HIGHcode_review_graph/embeddings.py503except Exception: # nosec B110CODE
HIGHcode_review_graph/embeddings.py731except Exception: # nosec B110CODE
HIGHcode_review_graph/cli.py92except ImportError:CODE
HIGHcode_review_graph/cli.py117except (OSError, ValueError):CODE
HIGHcode_review_graph/daemon_cli.py333except KeyboardInterrupt:CODE
HIGHcode_review_graph/daemon.py601except OSError:CODE
HIGHcode_review_graph/daemon.py746except OSError: # pragma: no cover - best-effort cleanupCODE
HIGHcode_review_graph/daemon.py907except OSError: # pragma: no cover - best-effort cleanupCODE
HIGHcode_review_graph/daemon.py490except OSError: # pragma: no cover - best-effort cleanupCODE
HIGHcode_review_graph/daemon.py1519except OSError:CODE
HIGHcode_review_graph/daemon.py1032except OSError:CODE
HIGHcode_review_graph/incremental.py773except (subprocess.TimeoutExpired, FileNotFoundError, UnicodeDecodeError):CODE
HIGHcode_review_graph/incremental.py786except (subprocess.TimeoutExpired, FileNotFoundError, UnicodeDecodeError):CODE
HIGHcode_review_graph/incremental.py816except (subprocess.TimeoutExpired, FileNotFoundError):CODE
HIGHcode_review_graph/incremental.py1431except (FileNotFoundError, subprocess.TimeoutExpired):CODE
HIGHcode_review_graph/incremental.py413except OSError:CODE
HIGHcode_review_graph/incremental.py2033except (OSError, PermissionError):CODE
HIGHcode_review_graph/incremental.py2885except OSError: # pragma: no cover - best-effort cleanupCODE
HIGHcode_review_graph/incremental.py3176except (ValueError, OSError): # pragma: no cover - shutdown raceCODE
HIGHcode_review_graph/tools/_common.py103except (OverflowError, TypeError, ValueError):CODE
HIGHcode_review_graph/tools/_common.py256except ValueError:CODE
HIGHcode_review_graph/tools/docs.py153except ValueError:CODE
HIGHcode_review_graph/eval/reporter.py230except (ValueError, TypeError):CODE
HIGHcode_review_graph/eval/reporter.py239except (ValueError, TypeError):CODE
HIGH…e_review_graph/eval/benchmarks/incremental_fidelity.py408except sqlite3.OperationalError:CODE
HIGHcode_review_graph/eval/benchmarks/token_efficiency.py53except OSError:CODE
HIGHtests/test_search.py168except Exception:CODE
HIGHtests/test_embeddings.py842except RuntimeError:CODE
HIGHtests/test_tools.py1974except Exception:CODE
HIGHtests/test_parser_load_probe.py180except ImportError:CODE
HIGHtests/test_parser_load_probe.py232except ImportError:CODE
HIGHtests/test_concurrency_and_daemon.py363except (ProcessLookupError, PermissionError, ValueError, TypeError):CODE
HIGHtests/test_concurrency_and_daemon.py1321except ValueError: # pragma: no coverCODE
Unused Imports216 hits · 186 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/communities.py7CODE
LOWcode_review_graph/exports.py3CODE
LOWcode_review_graph/forget.py20CODE
LOWcode_review_graph/changes.py7CODE
LOWcode_review_graph/spring_resolver.py18CODE
LOWcode_review_graph/tsconfig_resolver.py10CODE
LOWcode_review_graph/scoped_resolver.py60CODE
LOWcode_review_graph/analysis.py4CODE
LOWcode_review_graph/jedi_resolver.py12CODE
LOWcode_review_graph/refactor.py9CODE
LOWcode_review_graph/skills.py9CODE
LOWcode_review_graph/memory.py3CODE
LOWcode_review_graph/enrich.py8CODE
LOWcode_review_graph/http_origin_guard.py29CODE
LOWcode_review_graph/neighbourhood.py31CODE
LOWcode_review_graph/registry.py7CODE
LOWcode_review_graph/python_resolver.py3CODE
LOWcode_review_graph/context_savings.py7CODE
LOWcode_review_graph/graph.py8CODE
LOWcode_review_graph/graph_diff.py3CODE
LOWcode_review_graph/constants.py3CODE
LOWcode_review_graph/__init__.py3CODE
LOWcode_review_graph/__init__.py3CODE
LOWcode_review_graph/__init__.py3CODE
LOWcode_review_graph/__init__.py3CODE
LOWcode_review_graph/__init__.py3CODE
LOWcode_review_graph/rescript_resolver.py23CODE
LOWcode_review_graph/visualization.py16CODE
LOWcode_review_graph/hcl_resolver.py3CODE
LOWcode_review_graph/prompts.py13CODE
LOWcode_review_graph/uncertainty.py23CODE
LOWcode_review_graph/embeddings.py12CODE
LOWcode_review_graph/embeddings.py1029CODE
LOWcode_review_graph/cli.py29CODE
LOWcode_review_graph/custom_languages.py24CODE
LOWcode_review_graph/uninstall.py9CODE
LOWcode_review_graph/_legacy_instructions.py16CODE
LOWcode_review_graph/migrations.py20CODE
LOWcode_review_graph/search.py8CODE
LOWcode_review_graph/flows.py9CODE
LOWcode_review_graph/postprocessing.py20CODE
LOWcode_review_graph/errors.py12CODE
LOWcode_review_graph/build_state.py36CODE
LOWcode_review_graph/hints.py9CODE
LOWcode_review_graph/main.py11CODE
LOWcode_review_graph/wiki.py7CODE
LOWcode_review_graph/daemon_cli.py13CODE
LOWcode_review_graph/daemon.py11CODE
LOWcode_review_graph/config_keys.py3CODE
LOWcode_review_graph/event_resolver.py3CODE
LOWcode_review_graph/jsonc.py15CODE
LOWcode_review_graph/token_benchmark.py3CODE
LOWcode_review_graph/incremental.py7CODE
LOWcode_review_graph/incremental.py3335CODE
LOWcode_review_graph/temporal_resolver.py19CODE
LOWcode_review_graph/tools/analysis_tools.py3CODE
LOWcode_review_graph/tools/build.py3CODE
LOWcode_review_graph/tools/query.py3CODE
LOWcode_review_graph/tools/refactor_tools.py3CODE
LOWcode_review_graph/tools/community_tools.py3CODE
156 more matches not shown…
Deep Nesting239 hits · 154 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/communities.py146CODE
LOWcode_review_graph/communities.py565CODE
LOWcode_review_graph/communities.py731CODE
LOWcode_review_graph/exports.py244CODE
LOWcode_review_graph/exports.py266CODE
LOWcode_review_graph/changes.py536CODE
LOWcode_review_graph/tsconfig_resolver.py74CODE
LOWcode_review_graph/tsconfig_resolver.py155CODE
LOWcode_review_graph/scoped_resolver.py249CODE
LOWcode_review_graph/refactor.py235CODE
LOWcode_review_graph/refactor.py641CODE
LOWcode_review_graph/refactor.py734CODE
LOWcode_review_graph/refactor.py330CODE
LOWcode_review_graph/skills.py47CODE
LOWcode_review_graph/skills.py600CODE
LOWcode_review_graph/skills.py891CODE
LOWcode_review_graph/skills.py1009CODE
LOWcode_review_graph/skills.py1917CODE
LOWcode_review_graph/memory.py77CODE
LOWcode_review_graph/enrich.py30CODE
LOWcode_review_graph/http_origin_guard.py68CODE
LOWcode_review_graph/registry.py64CODE
LOWcode_review_graph/graph.py102CODE
LOWcode_review_graph/graph.py1269CODE
LOWcode_review_graph/graph.py1487CODE
LOWcode_review_graph/graph.py1875CODE
LOWcode_review_graph/graph.py2117CODE
LOWcode_review_graph/graph.py2582CODE
LOWcode_review_graph/graph.py3017CODE
LOWcode_review_graph/visualization.py106CODE
LOWcode_review_graph/parser.py177CODE
LOWcode_review_graph/parser.py433CODE
LOWcode_review_graph/parser.py610CODE
LOWcode_review_graph/parser.py836CODE
LOWcode_review_graph/parser.py1759CODE
LOWcode_review_graph/parser.py1819CODE
LOWcode_review_graph/parser.py1834CODE
LOWcode_review_graph/parser.py1999CODE
LOWcode_review_graph/parser.py2084CODE
LOWcode_review_graph/parser.py2448CODE
LOWcode_review_graph/parser.py2480CODE
LOWcode_review_graph/parser.py2505CODE
LOWcode_review_graph/parser.py2556CODE
LOWcode_review_graph/parser.py2613CODE
LOWcode_review_graph/parser.py3416CODE
LOWcode_review_graph/parser.py3561CODE
LOWcode_review_graph/parser.py3673CODE
LOWcode_review_graph/parser.py3804CODE
LOWcode_review_graph/parser.py3888CODE
LOWcode_review_graph/parser.py4023CODE
LOWcode_review_graph/parser.py4125CODE
LOWcode_review_graph/parser.py4548CODE
LOWcode_review_graph/parser.py5179CODE
LOWcode_review_graph/parser.py5243CODE
LOWcode_review_graph/parser.py5657CODE
LOWcode_review_graph/parser.py5872CODE
LOWcode_review_graph/parser.py6112CODE
LOWcode_review_graph/parser.py6181CODE
LOWcode_review_graph/parser.py6758CODE
LOWcode_review_graph/parser.py6864CODE
179 more matches not shown…
Excessive Try-Catch Wrapping97 hits · 109 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/communities.py719 except Exception:CODE
LOWcode_review_graph/forget.py149 except Exception as exc: # noqa: BLE001 - a parser failure is non-fatalCODE
LOWcode_review_graph/forget.py158 except Exception as exc: # noqa: BLE001 - resolver failure is non-fatalCODE
LOWcode_review_graph/jedi_resolver.py128 except Exception as e:CODE
LOWcode_review_graph/jedi_resolver.py147 except Exception: # nosec B112 - Jedi may fail on malformed codeCODE
LOWcode_review_graph/graph.py2505 except Exception: # nosec B110 - FTS5 table may not exist on older schemasCODE
LOWcode_review_graph/graph.py2545 except Exception: # nosec B110 - FTS5 may not exist on older schemasCODE
LOWcode_review_graph/uncertainty.py378 except Exception:CODE
LOWcode_review_graph/uncertainty.py415 except Exception:CODE
LOWcode_review_graph/uncertainty.py442 except Exception:CODE
LOWcode_review_graph/parser.py2841 except Exception:CODE
LOWcode_review_graph/parser.py14747 except Exception as exc:CODE
LOWcode_review_graph/parser.py14895 except Exception: # pragma: no cover - defensiveCODE
LOWcode_review_graph/embeddings.py109 except Exception as exc: # pragma: no cover — best-effort startup hookCODE
LOWcode_review_graph/embeddings.py219 except Exception as e:CODE
LOWcode_review_graph/embeddings.py324 except Exception as e:CODE
LOWcode_review_graph/embeddings.py492 except Exception:CODE
LOWcode_review_graph/embeddings.py503 except Exception: # nosec B110CODE
LOWcode_review_graph/embeddings.py567 except Exception as e:CODE
LOWcode_review_graph/embeddings.py720 except Exception:CODE
LOWcode_review_graph/embeddings.py731 except Exception: # nosec B110CODE
LOWcode_review_graph/embeddings.py777 except Exception as e:CODE
LOWcode_review_graph/embeddings.py837 except Exception:CODE
MEDIUMcode_review_graph/cli.py769 print(f"Error: {exc}", file=sys.stderr)CODE
MEDIUMcode_review_graph/cli.py2143 print(f"Error: {exc}", file=sys.stderr)CODE
MEDIUMcode_review_graph/cli.py2148 print(f"Error: {result.get('summary', 'update failed')}", file=sys.stderr)CODE
MEDIUMcode_review_graph/cli.py2352 print(f"Error: {exc}", file=sys.stderr)CODE
MEDIUMcode_review_graph/cli.py2400 print(f"Error: {exc}", file=sys.stderr)CODE
LOW⚡code_review_graph/cli.py439 except Exception as exc:CODE
LOW⚡code_review_graph/cli.py446 except Exception as exc:CODE
LOW⚡code_review_graph/cli.py454 except Exception as exc:CODE
LOWcode_review_graph/cli.py417 except Exception as exc:CODE
LOWcode_review_graph/cli.py472 except Exception as exc:CODE
LOW⚡code_review_graph/search.py805 except Exception as e:CODE
LOWcode_review_graph/search.py917 except Exception as e:CODE
LOWcode_review_graph/postprocessing.py219 except Exception as exc:CODE
MEDIUMcode_review_graph/daemon_cli.py44 print("Error: Daemon is already running.")CODE
MEDIUMcode_review_graph/daemon_cli.py56 print(f"Error: Daemon is already running: {exc}.")CODE
MEDIUMcode_review_graph/daemon_cli.py117 print("Error: Could not read daemon PID.")CODE
MEDIUMcode_review_graph/daemon_cli.py129 print(f"Error: Permission denied sending signal to PID {pid}.")CODE
MEDIUMcode_review_graph/daemon_cli.py158 print(f"Error: Daemon PID {pid} is still running; refusing to clear its PID file.")CODE
MEDIUMcode_review_graph/daemon_cli.py342 print(f"Error reading log file: {exc}")CODE
MEDIUMcode_review_graph/daemon_cli.py358 print(f"Error: {exc}")CODE
LOW⚡code_review_graph/daemon.py1047 except Exception:CODE
LOWcode_review_graph/daemon.py1279 except Exception:CODE
LOWcode_review_graph/daemon.py1580 except Exception:CODE
MEDIUMcode_review_graph/incremental.py2340def _call() -> None:CODE
LOW⚡code_review_graph/incremental.py151 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOW⚡code_review_graph/incremental.py161 except Exception as exc: # noqa: BLE001CODE
LOW⚡code_review_graph/incremental.py173 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOW⚡code_review_graph/incremental.py183 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOW⚡code_review_graph/incremental.py193 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOW⚡code_review_graph/incremental.py208 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOWcode_review_graph/incremental.py127 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOWcode_review_graph/incremental.py139 except Exception as exc: # noqa: BLE001 - best-effort post-passCODE
LOWcode_review_graph/incremental.py469 except Exception as exc:CODE
LOWcode_review_graph/incremental.py1730 except Exception as e:CODE
LOWcode_review_graph/incremental.py1784 except Exception as e:CODE
LOWcode_review_graph/incremental.py2052 except Exception as e:CODE
LOWcode_review_graph/incremental.py2343 except Exception as exc: # noqa: BLE001 - teardown must not mask the real errorCODE
37 more matches not shown…
Modern Structural Boilerplate68 hits · 66 pts
SeverityFileLineSnippetContext
LOW⚡code_review_graph/communities.py24logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/exports.py16logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/forget.py29logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/changes.py25logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/spring_resolver.py27logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tsconfig_resolver.py18logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/scoped_resolver.py69logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/analysis.py11logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/jedi_resolver.py22logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/refactor.py25logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/skills.py34logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/memory.py11logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/enrich.py18logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/neighbourhood.py51__all__ = [CODE
LOWcode_review_graph/registry.py18logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/python_resolver.py12logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/graph.py55logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/graph.py1102 def set_metadata(self, key: str, value: str) -> None:CODE
LOWcode_review_graph/graph.py3369 def update_node_signatures(self, signature_rows: list[tuple[str, int]]) -> None:CODE
LOWcode_review_graph/graph_diff.py12logger = logging.getLogger(__name__)CODE
LOW⚡code_review_graph/constants.py10logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/__init__.py13__all__ = [CODE
LOWcode_review_graph/rescript_resolver.py33logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/visualization.py34logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/hcl_resolver.py12logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/uncertainty.py38logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/parser.py494logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/embeddings.py31logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/cli.py57logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/custom_languages.py45logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/migrations.py28logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/migrations.py92def _set_schema_version(conn: sqlite3.Connection, version: int) -> None:CODE
LOWcode_review_graph/search.py27logger = logging.getLogger(__name__)CODE
LOW⚡code_review_graph/flows.py22logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/postprocessing.py29logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/errors.py74__all__ = [CODE
LOWcode_review_graph/main.py70logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/wiki.py21logger = logging.getLogger(__name__)CODE
LOW⚡code_review_graph/daemon_cli.py23logger = logging.getLogger(__name__)CODE
LOW⚡code_review_graph/daemon.py38logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/daemon.py1467 def _setup_signal_handlers(self) -> None:CODE
LOWcode_review_graph/event_resolver.py14logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/jsonc.py21__all__ = [CODE
LOWcode_review_graph/token_benchmark.py13logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/incremental.py80logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/temporal_resolver.py28logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/build.py28logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/query.py50logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/_common.py19logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/__init__.py108__all__ = [CODE
LOW⚡code_review_graph/tools/docs.py18logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/review.py35logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/context.py15logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/tools/registry_tools.py14logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/eval/runner.py28logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/eval/__init__.py22__all__ = [CODE
LOWcode_review_graph/eval/token_benchmark.py9logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/eval/benchmarks/build_performance.py9logger = logging.getLogger(__name__)CODE
LOW…e_review_graph/eval/benchmarks/incremental_fidelity.py51logger = logging.getLogger(__name__)CODE
LOWcode_review_graph/eval/benchmarks/agent_baseline.py36logger = logging.getLogger(__name__)CODE
8 more matches not shown…
Over-Commented Block61 hits · 46 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/exports.py61 return output_pathCOMMENT
LOWcode_review_graph/changes.py41# symbols the walk reaches are never executed by this repository's own suite.COMMENT
LOWcode_review_graph/changes.py301COMMENT
LOWcode_review_graph/changes.py321COMMENT
LOWcode_review_graph/changes.py701 # Windows, where the LIKE-suffix fallback cannot bridgeCOMMENT
LOWcode_review_graph/changes.py781 # (issue #1023). ``repo_root`` is the caller's; the graph's own recordedCOMMENT
LOWcode_review_graph/changes.py821 node_risks.append({COMMENT
LOWcode_review_graph/skills.py421_GENERATED_ENTRY_TYPES = frozenset({"stdio", "local"})COMMENT
LOWcode_review_graph/skills.py1501# --- Git pre-commit hook ---------------------------------------------------COMMENT
LOWcode_review_graph/skills.py1721COMMENT
LOWcode_review_graph/graph.py601)COMMENT
LOWcode_review_graph/graph.py721 # A corrupt file, a foreign SQLite file, or a data directory thisCOMMENT
LOWcode_review_graph/graph.py741 # from the contention report in ``cli.main``, and would sendCOMMENT
LOWcode_review_graph/constants.py101 "credential", "permission", "sql", "query", "execute", "connect",COMMENT
LOWcode_review_graph/constants.py201MAX_IMPACT_DEPTH = env_int("CRG_MAX_IMPACT_DEPTH", 2)COMMENT
LOWcode_review_graph/constants.py301COMMENT
LOWcode_review_graph/parser.py381# ---------------------------------------------------------------------------COMMENT
LOWcode_review_graph/parser.py1281 "event_definition", "fallback_receive_definition",COMMENT
LOWcode_review_graph/parser.py1361 # Nix: `import ./x.nix`, `callPackage ./y.nix {}`, and flakeCOMMENT
LOWcode_review_graph/parser.py1481# stem patterns anchor on it so "src/latest/" is not read as a "test/"COMMENT
LOWcode_review_graph/parser.py1501 re.compile(_SEP + r"e2e[_-]?tests?[\\/]"),COMMENT
LOWcode_review_graph/parser.py1521]COMMENT
LOWcode_review_graph/parser.py2961 self._parsers: dict[str, object] = {}COMMENT
LOWcode_review_graph/parser.py2981 # Absolute file paths to treat as absent during import resolution.COMMENT
LOWcode_review_graph/parser.py6161 #COMMENT
LOWcode_review_graph/parser.py15601COMMENT
LOWcode_review_graph/parser.py17061 for qsub in reversed(sub.children):COMMENT
LOWcode_review_graph/parser.py18141 source: bytes,COMMENT
LOWcode_review_graph/embeddings.py521 # OpenAI spec: data[i].index maps to input[i], but someCOMMENT
LOWcode_review_graph/search.py41_FTS_DEFAULT_WEIGHT = 1.0COMMENT
LOWcode_review_graph/search.py61COMMENT
LOWcode_review_graph/search.py521#COMMENT
LOWcode_review_graph/daemon.py61 return crg_home() / "logs"COMMENT
LOWcode_review_graph/daemon.py381COMMENT
LOWcode_review_graph/incremental.py2201# A single recursive watch on the repository root makes the OS register oneCOMMENT
LOWcode_review_graph/tools/build.py921 #COMMENT
LOWcode_review_graph/tools/_common.py281#COMMENT
LOWcode_review_graph/tools/review.py41# node dict ~60 tok, node+risk_score ~118 tok, test gap ~85 tok,COMMENT
LOWcode_review_graph/tools/review.py61# 82-hunk diff that spent all 800 lines to show 3 hunks in full. A flatCOMMENT
LOWcode_review_graph/tools/review.py81_REGION_CONTEXT = 4COMMENT
LOWcode_review_graph/tools/review.py101_RISK_SCORED_KINDS = ("Function", "Test", "Class")COMMENT
LOW…e_review_graph/eval/benchmarks/incremental_fidelity.py61 "move_function",COMMENT
LOW…e_review_graph/eval/benchmarks/incremental_fidelity.py81#: * ``nodes.community_id`` is not repopulated for a re-parsed file, andCOMMENT
LOWtests/test_parser.py1401 # dead_in_if0: NOT emitted (#if 0 consequence)COMMENT
LOWtests/test_neighbourhood.py21from code_review_graph.graph import GraphStoreCOMMENT
LOWtests/conftest.py41 # the variable to a temp directory instead of merely clearing it:COMMENT
LOWtests/test_action_e2e.py1881 assert "user.login" in script, (COMMENT
LOWtests/determinism_dump.py441 sections["fts_index_bytes"] = [f"rows={fts_count} sha256={digest.hexdigest()}"]COMMENT
LOWtests/test_failure_reporting.py521# ---------------------------------------------------------------------------COMMENT
LOWtests/test_python_relative_imports.py21from code_review_graph.parser import CodeParserCOMMENT
LOWtests/test_mcp_surface.py1301# (including NUL and ESC) plus enough padding to test the 256-character capCOMMENT
LOWtests/test_auto_promote.py861 # Opening the promotion pull request re-queues every required context onCOMMENT
LOWtests/test_token_budget.py181COMMENT
LOWtests/test_export_formats.py121 # Breaks a single-quoted Cypher literal, plus a backslash and a newline.COMMENT
LOW.beads/config.yaml1# Beads Configuration FileCOMMENT
LOW.beads/config.yaml21# title-length: 255COMMENT
LOW.beads/config.yaml41# backup:COMMENT
LOWscripts/audit_python_imports.py201# ``audit_dangling`` only sees a target that matches NO node. It cannot see aCOMMENT
LOW.github/workflows/promotion-gate.yml1# The release gate. Runs when code lands on `testing`, which is the branch aCOMMENT
LOW.github/workflows/auto-promote.yml1# The one promotion that happens without a person: `staging` to `testing`,COMMENT
1 more matches not shown…
Structural Annotation Overuse23 hits · 30 pts
SeverityFileLineSnippetContext
LOW⚡code_review_graph/eval/token_benchmark.py28 # Step 1: get_minimal_contextCOMMENT
LOW⚡code_review_graph/eval/token_benchmark.py34 # Step 2: detect_changes (minimal)COMMENT
LOW⚡diagrams/generate_diagrams.py342 # Step 1: TriggerCOMMENT
LOW⚡diagrams/generate_diagrams.py350 # Step 2: DetectCOMMENT
LOW⚡diagrams/generate_diagrams.py524 # Step 1: User asksCOMMENT
LOW⚡diagrams/generate_diagrams.py532 # Step 2: Claude CodeCOMMENT
LOWdiagrams/generate_diagrams.py363 # Step 3: CascadeCOMMENT
LOWdiagrams/generate_diagrams.py376 # Step 4: Re-parseCOMMENT
LOWdiagrams/generate_diagrams.py545 # Step 3: MCP callCOMMENT
LOWdiagrams/generate_diagrams.py558 # Step 4: Graph queryCOMMENT
LOWdiagrams/generate_diagrams.py570 # Step 5: Claude respondsCOMMENT
LOW⚡tests/test_refactor.py761 # Step 2: refactor_id should still be valid — dry_run doesn't consume itCOMMENT
LOW⚡tests/test_refactor.py765 # Step 3: real apply — uses same refactor_idCOMMENT
LOWtests/test_refactor.py746 # Step 1: dry_run — no writes, returns diffCOMMENT
LOW⚡tests/test_platform_lifecycle.py608# Step 1: first install writes the exact config the platform reads.COMMENT
LOW⚡tests/test_platform_lifecycle.py679# Step 2: a second install changes nothing.COMMENT
LOW⚡tests/test_platform_lifecycle.py733# Step 3: installing over a user's own config keeps their settings.COMMENT
LOW⚡tests/test_platform_lifecycle.py773# Step 4: uninstall removes every trace and leaves the rest alone.COMMENT
LOW⚡tests/test_platform_lifecycle.py978# Step 5: reinstalling over an older release's entry replaces it.COMMENT
LOWdocs/REPRODUCING.md73## Step 1: install with the eval and embeddings extrasCOMMENT
LOWdocs/REPRODUCING.md84## Step 2: run the evalCOMMENT
LOWdocs/REPRODUCING.md108## Step 3: embeddings for the standalone benchmarkCOMMENT
LOWdocs/REPRODUCING.md122## Step 4: run the standalone token benchmarkCOMMENT
Self-Referential Comments9 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_registry.py113 # Create a new registry from the same fileCOMMENT
MEDIUMtests/test_flows.py289 # Create a chain of 20 functions.COMMENT
MEDIUMtests/test_multilang.py450 # Create a mini Java project with two packagesCOMMENT
MEDIUMtests/test_daemon.py751 # Create a new repo directory for alpha with a different path (no graph.db)COMMENT
MEDIUMtests/test_incremental.py737 # Create a simple Python fileCOMMENT
MEDIUM⚡tests/test_integration_git.py439 # Create the parent repo and add lib as a submoduleCOMMENT
MEDIUM⚡tests/test_integration_git.py523 # Create a legitimate pageCOMMENT
MEDIUMtests/test_tools.py2195 # Create the two communities and stamp community_id on nodes.COMMENT
MEDIUMtests/test_tools.py2406 # Create a small graphCOMMENT
Verbosity Indicators19 hits · 24 pts
SeverityFileLineSnippetContext
LOW⚡code_review_graph/eval/token_benchmark.py28 # Step 1: get_minimal_contextCOMMENT
LOW⚡code_review_graph/eval/token_benchmark.py34 # Step 2: detect_changes (minimal)COMMENT
LOW⚡diagrams/generate_diagrams.py342 # Step 1: TriggerCOMMENT
LOW⚡diagrams/generate_diagrams.py350 # Step 2: DetectCOMMENT
LOW⚡diagrams/generate_diagrams.py524 # Step 1: User asksCOMMENT
LOW⚡diagrams/generate_diagrams.py532 # Step 2: Claude CodeCOMMENT
LOWdiagrams/generate_diagrams.py363 # Step 3: CascadeCOMMENT
LOWdiagrams/generate_diagrams.py376 # Step 4: Re-parseCOMMENT
LOWdiagrams/generate_diagrams.py545 # Step 3: MCP callCOMMENT
LOWdiagrams/generate_diagrams.py558 # Step 4: Graph queryCOMMENT
LOWdiagrams/generate_diagrams.py570 # Step 5: Claude respondsCOMMENT
LOW⚡tests/test_refactor.py761 # Step 2: refactor_id should still be valid — dry_run doesn't consume itCOMMENT
LOW⚡tests/test_refactor.py765 # Step 3: real apply — uses same refactor_idCOMMENT
LOWtests/test_refactor.py746 # Step 1: dry_run — no writes, returns diffCOMMENT
LOW⚡tests/test_platform_lifecycle.py608# Step 1: first install writes the exact config the platform reads.COMMENT
LOW⚡tests/test_platform_lifecycle.py679# Step 2: a second install changes nothing.COMMENT
LOW⚡tests/test_platform_lifecycle.py733# Step 3: installing over a user's own config keeps their settings.COMMENT
LOW⚡tests/test_platform_lifecycle.py773# Step 4: uninstall removes every trace and leaves the rest alone.COMMENT
LOW⚡tests/test_platform_lifecycle.py978# Step 5: reinstalling over an older release's entry replaces it.COMMENT
Docstring Block Structure3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHcode_review_graph/registry.py67Register a repository path. Validates that the path contains a ``.git`` or ``.code-review-graph`` direcSTRING
HIGHcode_review_graph/daemon.py149Load daemon configuration from a TOML file. Args: path: Explicit config path. Falls back to :func:`defaultSTRING
HIGHcode_review_graph/daemon.py310Add a repository to the daemon config and persist the change. Args: repo_path: Path to the repository (wiSTRING
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHcode_review_graph/tools/analysis_tools.py0keep only *fields* on each row, dropping keys the row does not have.STRING
HIGHcode_review_graph/tools/refactor_tools.py0keep only *fields* on each row, dropping keys the row does not have.STRING
HIGHcode_review_graph/tools/review.py0keep only *fields* on each row, dropping keys the row does not have.STRING
Fake / Example Data15 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_embeddings.py373 "CRG_OPENAI_API_KEY": "fake-key",CODE
LOW⚡tests/test_embeddings.py382 api_key="fake-key",CODE
LOW⚡tests/test_embeddings.py398 "CRG_OPENAI_API_KEY": "fake-key",CODE
LOW⚡tests/test_integration_git.py113 assert _git(repo, "config", "user.email", "test@test.com").returncode == 0CODE
LOW⚡tests/test_integration_git.py433 _git(lib_repo, "config", "user.email", "test@test.com")CODE
LOW⚡tests/test_integration_git.py443 _git(parent, "config", "user.email", "test@test.com")CODE
LOW⚡tests/test_integration_git.py540 assert _git(repo, "config", "user.email", "test@test.com").returncode == 0CODE
LOWtests/test_integration_git.py76 _git(repo, "config", "user.email", "test@test.com")CODE
LOWtests/test_integration_git.py592 _git_ok(repo, "config", "user.email", "test@test.com")CODE
LOWtests/test_integration_git.py954 _git_ok(repo, "config", "user.email", "test@test.com")CODE
LOWtests/test_integration_git.py1077 _git_ok(repo, "config", "user.email", "test@test.com")CODE
LOWtests/test_eval.py298 ["git", "config", "user.email", "test@test.com"],CODE
LOWtests/test_eval.py441 ["git", "config", "user.email", "test@test.com"],CODE
LOWtests/test_eval.py515 ["git", "config", "user.email", "test@test.com"],CODE
LOWtests/test_eval.py585 _git(repo_path, "config", "user.email", "test@test.com")CODE
AI Slop Vocabulary5 hits · 13 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_parser.py2013 # the highest-leverage language for the fix after Python.COMMENT
MEDIUM⚡tests/test_cli_surface.py422# Canaries: prove the harness really ran and really compared somethingCOMMENT
MEDIUMtests/test_embeddings.py905 """Ensure localhost detection is robust against subdomain tricks."""STRING
MEDIUMtests/determinism_build_runner.py107 # The harness reads this off stdout to assert the build did real workCOMMENT
MEDIUMcode-review-graph-vscode/package-lock.json3466 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",CODE
Modern AI Meta-Vocabulary3 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMcode_review_graph/flows.py90 # FastAPI lifecycle / dependency injectionCOMMENT
MEDIUM⚡code_review_graph/tools/_common.py282# Every MCP tool response has to survive a client-side context window. #849COMMENT
MEDIUMdocs/FAQ.md45## Isn't this just RAG?COMMENT
Overly Generic Function Names14 hits · 10 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_parser.py1366 b"def helper(): pass\n",CODE
LOW⚡tests/test_parser.py1379 b"def helper(): pass\n",CODE
LOWtests/test_parser.py403 "def helper():\n"CODE
LOWtests/test_action_e2e.py486def handle_request(path, body):STRING
LOWtests/test_forget_parity.py26 "util.py": "def helper():\n return 41\n",CODE
LOWtests/test_forget_parity.py45 "pkg/util.py": "def helper():\n return 41\n",CODE
LOWtests/test_forget_parity.py62 "src_one/pkg/util.py": "def helper():\n return 1\n",CODE
LOWtests/test_forget_parity.py63 "src_two/pkg/util.py": "def helper():\n return 2\n",CODE
LOWtests/test_cli_surface.py300 "def helper(value):\n"CODE
LOWtests/test_test_file_detection.py265 def helper(self):CODE
LOWtests/test_python_relative_imports.py54 "def helper():\n return 1\n", encoding="utf-8",CODE
LOW⚡tests/test_integration_git.py435 (lib_repo / "util.py").write_text("def helper():\n pass\n")CODE
LOWtests/test_call_site_provenance.py476 "def helper(value):\n return value + 1\n", encoding="utf-8",CODE
LOW⚡tests/test_tools.py1481 + "def handle_request():\n"CODE
AI Structural Patterns9 hits · 7 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/neighbourhood.py146CODE
LOWcode_review_graph/visualization.py180CODE
LOWcode_review_graph/visualization.py548CODE
LOWcode_review_graph/main.py454CODE
LOWcode_review_graph/main.py888CODE
LOWcode_review_graph/main.py938CODE
LOWcode_review_graph/tools/refactor_tools.py42CODE
LOWcode_review_graph/tools/review.py426CODE
LOWcode_review_graph/tools/review.py932CODE
Redundant / Tautological Comments4 hits · 5 pts
SeverityFileLineSnippetContext
LOWcode_review_graph/communities.py872 # Check if any communities are affected (batch to stay under SQLite limit)COMMENT
LOWcode_review_graph/refactor.py587 # Check if this is a method override where the base class methodCOMMENT
LOWcode_review_graph/parser.py4057 # Check if all non-empty lines are MAGIC linesCOMMENT
LOWcode_review_graph/wiki.py138 # Check if this flow passes through any community memberCOMMENT