Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
This report summarizes scanner evidence for Graphify-Labs/graphify, a Python project with 125,373 GitHub stars. SynthScan examined 293,107 lines of code across 867 source files, recording 8922 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 37.4 (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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 6998 finding(s).
Are imports declared and package/API names verified? 876 finding(s).
Are wrappers, guards, and repeated structures necessary? 6937 finding(s).
Which changes need focused human review? 8922 finding(s).
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.
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.
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.
The scanner identified 8922 distinct pattern matches across 18 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/skillgen/gen.py | 893 | def _is_frontmatter_description_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 947 | def _is_content_scope_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 962 | def _is_cache_unlink_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 976 | def _is_zero_node_guard_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1002 | def _is_manifest_root_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1017 | def _is_manifest_stamp_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1045 | def _is_sensitive_reporting_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1066 | def _is_shebang_allowlist_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1079 | def _is_obsidian_usage_comment_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1090 | def _is_uv_from_interpreter_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1104 | def _is_semantic_cache_scope_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1120 | def _is_community_label_export_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1165 | def _is_watch_injection_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1183 | def _is_graph_diff_direction_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1200 | def _is_persisted_scan_options_fix_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1212 | def _is_worktree_visibility_note_line(line: str) -> bool: | CODE |
| LOW | tools/skillgen/gen.py | 1252 | def _is_sanctioned_monolith_diff(line: str) -> bool: | CODE |
| LOW | worked/mixed-corpus/raw/analyze.py | 239 | def _cross_community_surprises( | CODE |
| LOW | worked/httpx/raw/utils.py | 55 | def obfuscate_sensitive_headers(headers: dict) -> dict: | CODE |
| LOW | tests/test_forwarding_review_findings.py | 11 | def test_star_cycle_with_real_definition_does_not_mask_unique_origin(tmp_path): | CODE |
| LOW | tests/test_forwarding_review_findings.py | 29 | def test_sourceless_owned_node_is_not_an_export_definition(tmp_path): | CODE |
| LOW | tests/test_forwarding_review_findings.py | 58 | def test_legacy_aggregate_pattern_facts_and_nodes_are_preserved(tmp_path): | CODE |
| LOW | tests/test_forwarding_review_findings.py | 84 | def test_identifier_alias_fact_and_binding_are_preserved(tmp_path): | CODE |
| LOW | tests/test_forwarding_review_findings.py | 110 | def test_longer_export_cycle_with_definition_remains_resolvable(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 51 | def test_member_chain_on_parameter_field_resolves(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 61 | def test_member_chain_on_field_receiver_resolves(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 70 | def test_member_chain_with_unknown_field_gives_no_edge(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 79 | def test_member_chain_with_untyped_root_gives_no_edge(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 96 | def test_element_access_on_array_field_resolves_to_element_type(tmp_path): | CODE |
| LOW⚡ | tests/test_csharp_member_chain_calls.py | 113 | def test_element_access_on_list_local_resolves(tmp_path): | CODE |
| LOW | tests/test_csharp_member_chain_calls.py | 129 | def test_element_access_without_element_type_gives_no_edge(tmp_path): | CODE |
| LOW | tests/test_csharp_member_chain_calls.py | 147 | def test_constructor_calls_are_attributed_to_the_type(tmp_path): | CODE |
| LOW | tests/test_csharp_member_chain_calls.py | 165 | def test_constructor_typed_parameter_and_this_calls_resolve(tmp_path): | CODE |
| LOW | tests/test_csharp_member_chain_calls.py | 213 | def test_element_of_type_parameter_list_stays_unresolved(tmp_path): | CODE |
| LOW | tests/test_csharp_member_chain_calls.py | 229 | def test_element_of_nested_list_stays_unresolved(tmp_path): | CODE |
| LOW⚡ | tests/test_no_cluster_run_only_keys.py | 39 | def test_run_only_keys_are_the_ones_extract_returns(tmp_path: Path): | CODE |
| LOW⚡ | tests/test_no_cluster_run_only_keys.py | 47 | def test_update_no_cluster_first_build_matches_a_rebuild(tmp_path: Path): | CODE |
| LOW⚡ | tests/test_no_cluster_run_only_keys.py | 55 | def test_extract_no_cluster_omits_run_only_keys(tmp_path: Path): | CODE |
| LOW | tests/test_extract_cli.py | 22 | def test_extract_exits_nonzero_when_ast_extraction_raises( | CODE |
| LOW | tests/test_extract_cli.py | 59 | def test_extract_allow_partial_continues_past_ast_failure( | CODE |
| LOW | tests/test_extract_cli.py | 112 | def test_extract_exits_nonzero_when_all_semantic_chunks_fail( | CODE |
| LOW | tests/test_extract_cli.py | 173 | def test_extract_succeeds_when_at_least_one_chunk_completes( | CODE |
| LOW | tests/test_extract_cli.py | 230 | def test_incremental_partial_run_preserves_untouched_semantic_hash( | CODE |
| LOW | tests/test_extract_cli.py | 305 | def test_truncated_doc_semantic_hash_is_cleared_for_requeue(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 356 | def test_manifest_stamps_freshly_extracted_semantic_docs(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 416 | def test_stamped_manifest_files_normalizes_both_sides(tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 450 | def test_stamped_manifest_files_counts_hyperedge_only_docs(tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 478 | def test_manifest_stamps_hyperedge_only_docs(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 546 | def test_extract_mode_deep_dispatches_over_warm_cache(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 593 | def test_extract_force_flag_redispatches_and_stamps_manifest(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 633 | def test_extract_graphify_force_env_redispatches(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 656 | def test_cache_check_mode_deep_reads_deep_namespace(monkeypatch, tmp_path, capsys): | CODE |
| LOW | tests/test_extract_cli.py | 700 | def test_extract_codeonly_succeeds_without_api_key(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 727 | def test_missing_manifest_code_only_preserves_semantic_layer(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 794 | def test_extract_out_keeps_project_root_clean(monkeypatch, tmp_path): | CODE |
| LOW | tests/test_extract_cli.py | 831 | def test_extract_without_key_still_errors_when_docs_present( | CODE |
| LOW | tests/test_extract_cli.py | 859 | def test_extract_timing_flag_emits_stage_timings(monkeypatch, tmp_path, capsys): | CODE |
| LOW | tests/test_extract_cli.py | 894 | def test_pathless_postgres_extract_initializes_empty_detection( | CODE |
| LOW | tests/test_extract_cli.py | 1034 | def test_incremental_extract_prunes_newly_excluded_file_not_in_manifest( | CODE |
| LOW | tests/test_extract_cli.py | 1083 | def test_incremental_extract_prunes_excluded_file_listed_in_manifest( | CODE |
| 5823 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_extract_cli.py | 999 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_extract_cli.py | 1004 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_extract_cli.py | 1166 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_extract_cli.py | 1172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_extract_cli.py | 1555 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_extract_cli.py | 1562 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_pdf_slicing.py | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_pdf_slicing.py | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_csharp_partial_classes.py | 261 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_csharp_partial_classes.py | 268 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_csharp_enum_members.py | 166 | # ── #4245: a call must never bind to a same-named enum member ────────────── | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 9 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 11 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 81 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_semantic_similarity.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tree_html.py | 51 | # ── build_tree unit tests ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_tree_html.py | 83 | # ── CLI integration ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 69 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 233 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 235 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 273 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codebuddy.py | 275 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codebuddy.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codebuddy.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_pascal.py | 225 | # ── Lazarus Form (.lfm) ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_pascal.py | 279 | # ── Lazarus Package (.lpk) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_pascal.py | 325 | # ── Delphi Form (.dfm) ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 130 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_inherited_field_receivers.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_build_merge_hyperedges_and_prune.py | 36 | # ── #1574: hyperedge preservation ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_build_merge_hyperedges_and_prune.py | 143 | # ── #1571: root-less prune (absolute deleted paths vs relative node keys) ────── | COMMENT |
| MEDIUM⚡ | tests/test_dedup.py | 14 | # ── entropy gate ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_dedup.py | 26 | # ── shingles ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_dedup.py | 39 | # ── full pipeline ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_dedup.py | 172 | # ── build integration ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_dedup.py | 1089 | # ── #2576: same-file labels differing by a content-word swap ────────────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 346 | # ── #1284: numbered siblings + cross-file file-anchored boilerplate ────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 414 | # ── #1243: JaroWinkler prefix-bonus over-merge (cross-file) ────────────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 442 | # ── #1504: cross-chunk node ID collision warning ────────────────────────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 482 | # ── #1857: dedup summary log breakdown ──────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 518 | # ── ID collisions: definition vs cross-reference ────────────────────────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 570 | # ── #3352: non-Latin source paths must still define their own id ───────────── | COMMENT |
| MEDIUM | tests/test_dedup.py | 736 | # ── #2532: lifecycle-aware, environment-stable collision ranking ────────────── | COMMENT |
| 543 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | worked/httpx/raw/auth.py | 112 | except Exception: | CODE |
| HIGH | worked/httpx/raw/client.py | 88 | except StopIteration: | CODE |
| HIGH | tests/test_charmap_encoding.py | 279 | except UnicodeEncodeError: | CODE |
| HIGH | tests/test_skill_auto_refresh.py | 525 | except (_Stop, SystemExit): | CODE |
| HIGH | tests/test_falkordb_integration.py | 58 | except Exception: | CODE |
| HIGH | tests/test_falkordb_integration.py | 63 | except Exception: | CODE |
| HIGH | tests/test_llm_backends.py | 341 | except ImportError: | CODE |
| HIGH | tests/test_llm_backends.py | 347 | except ImportError: | CODE |
| HIGH | tests/test_llm_backends.py | 354 | except ImportError: | CODE |
| HIGH | tests/test_llm_backends.py | 898 | except Exception: | CODE |
| HIGH | tests/test_opencode_plugin_refresh.py | 408 | except (_Stop, SystemExit): | CODE |
| HIGH | graphify/build.py | 628 | except OSError: | CODE |
| HIGH | graphify/build.py | 638 | except Exception: | CODE |
| HIGH | graphify/build.py | 504 | except (ValueError, OSError): | CODE |
| HIGH | graphify/hooks.py | 733 | except (OSError, FileNotFoundError): | CODE |
| HIGH | graphify/hooks.py | 921 | except OSError: | CODE |
| HIGH | graphify/paths.py | 185 | except (OSError, UnicodeDecodeError): | CODE |
| HIGH | graphify/paths.py | 138 | except OSError: | CODE |
| HIGH | graphify/paths.py | 92 | except OSError: | CODE |
| HIGH | graphify/paths.py | 97 | except OSError: | CODE |
| HIGH | graphify/paths.py | 86 | except OSError: | CODE |
| HIGH | graphify/paths.py | 158 | except OSError: | CODE |
| HIGH | graphify/querylog.py | 79 | except Exception: | CODE |
| HIGH | graphify/cache.py | 495 | except OSError: | CODE |
| HIGH | graphify/cache.py | 589 | except OSError: | CODE |
| HIGH | graphify/cache.py | 640 | except OSError: | CODE |
| HIGH | graphify/cache.py | 109 | except OSError: | CODE |
| HIGH | graphify/cache.py | 191 | except OSError: | CODE |
| HIGH | graphify/cache.py | 1259 | except OSError: | CODE |
| HIGH | graphify/cache.py | 1263 | except OSError: | CODE |
| HIGH | graphify/cache.py | 1353 | except OSError: | CODE |
| HIGH | graphify/cache.py | 489 | except OSError: | CODE |
| HIGH | graphify/cache.py | 493 | except OSError: | CODE |
| HIGH | graphify/cache.py | 1495 | except ValueError: | CODE |
| HIGH | graphify/serve.py | 70 | except Exception: | CODE |
| HIGH | graphify/serve.py | 1931 | except Exception: | CODE |
| HIGH | graphify/serve.py | 2458 | except Exception: | CODE |
| HIGH | graphify/llm.py | 97 | except (ValueError, TypeError): | CODE |
| HIGH | graphify/llm.py | 1165 | except json.JSONDecodeError: | CODE |
| HIGH | graphify/llm.py | 2242 | except ImportError: | CODE |
| HIGH | graphify/llm.py | 2247 | except ImportError: | CODE |
| HIGH | graphify/llm.py | 2252 | except ImportError: | CODE |
| HIGH | graphify/llm.py | 320 | except ValueError: | CODE |
| HIGH | graphify/llm.py | 419 | except ValueError: | CODE |
| HIGH | graphify/llm.py | 438 | except ValueError: | CODE |
| HIGH | graphify/llm.py | 462 | except ValueError: | CODE |
| HIGH | graphify/llm.py | 1855 | except ValueError: | CODE |
| HIGH | graphify/llm.py | 304 | except Exception: | CODE |
| HIGH | graphify/export.py | 1073 | except OSError: | CODE |
| HIGH | graphify/export.py | 67 | except Exception: | CODE |
| HIGH | graphify/export.py | 1060 | except OSError: | CODE |
| HIGH | graphify/export.py | 1340 | except OSError: | CODE |
| HIGH | graphify/export.py | 96 | except Exception: | CODE |
| HIGH | graphify/cli.py | 137 | except Exception: | CODE |
| HIGH | graphify/cli.py | 337 | except (OSError, RuntimeError): | CODE |
| HIGH | graphify/cli.py | 502 | except (OSError, RuntimeError): | CODE |
| HIGH | graphify/cli.py | 579 | except (OSError, RuntimeError): | CODE |
| HIGH | graphify/cli.py | 752 | except Exception: | CODE |
| HIGH | graphify/cli.py | 1049 | except Exception: | CODE |
| HIGH | graphify/cli.py | 344 | except ValueError: | CODE |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_csharp_member_chain_calls.py | 104 | " if (_configs[i] != null) _configs[i].WriteIds(); }\n" | CODE |
| HIGH⚡ | tests/test_inherited_field_receivers.py | 123 | " Object fetch() { return null; }\n}\n"), | CODE |
| HIGH⚡ | tests/test_ts_parse_warning.py | 50 | "declare const Comp: (props: { to: string }) => null;\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_function_expression_shadow.py | 139 | "function wrap(a, b){ return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_for_of_binding_shadow.py | 58 | " if (lookup(entry.name)) resolved.push({ entry });\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_for_of_binding_shadow.py | 76 | " out.push({ entry });\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_for_of_binding_shadow.py | 92 | " for (const entry of rows) { out.push({ entry }); }\n" | CODE |
| HIGH | tests/test_ts_receiver_member_calls.py | 174 | " private maybe?: Svc | undefined;\n" | CODE |
| HIGH | tests/test_js_exported_scalar_bindings.py | 73 | export const A_MAX = Number(process.env.A_MAX || 10); | STRING |
| HIGH⚡ | tests/test_indirect_call_catch_binding_shadow.py | 70 | " try { boom(); } catch ({ cause }) { sink.push(cause); }\n" | CODE |
| HIGH | tests/test_java_type_resolution.py | 91 | " public boolean validateCurrency(String c) { return c.length() == 3; }\n" | CODE |
| HIGH | tests/test_java_type_resolution.py | 217 | " public Map<String, Object> lookup(Long id) { return null; }\n" | CODE |
| HIGH | tests/test_java_type_resolution.py | 218 | " public java.util.Optional<Boolean> flag() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_java_type_resolution.py | 246 | " public OrderDto first() { return null; }\n" | CODE |
| HIGH | tests/test_languages.py | 540 | " return null;\n" | STRING |
| HIGH | tests/test_dart.py | 483 | context.router.push(ProfileRoute()); | CODE |
| HIGH | tests/test_hook_guard_token_match.py | 36 | "make build && grep -q ok build.log", | CODE |
| HIGH⚡ | tests/test_hook_guard.py | 83 | "cd findings && ls", # 'find' without a trailing space is not a match | CODE |
| HIGH | tests/test_indirect_call_external_import_shadow.py | 58 | "Palette.tsx": "export function Palette() { return null; }\n", | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 72 | "Chart.tsx": "export function Chart() { return null; }\n", | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 87 | "export function run(sink) { sink.push(Utils); }\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 102 | "export function app(sink) { sink.push(Find); }\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 120 | "Palette.tsx": "export function Palette() { return null; }\n", | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 135 | "widgets.ts": "export function Widget() { return null; }\n", | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 138 | "export function host(sink) { sink.push(Widget); }\n" | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 163 | "table.ts": "export function Filter() { return null; }\n", # unrelated corpus callable | CODE |
| HIGH⚡ | tests/test_indirect_call_external_import_shadow.py | 168 | " sink.push(Filter);\n" # external -> must NOT bind to table.ts Filter | CODE |
| HIGH | tests/test_skillgen_input_path_injection.py | 139 | ("and_chain", lambda s: f"nonexistent && touch {s}"), | CODE |
| HIGH | tests/test_build.py | 1309 | the source_location shape (AST emits 'L<line>', semantic emits null).""" | STRING |
| HIGH⚡ | tests/test_injection_sentinel_coverage.py | 41 | "a | b and x || y", | CODE |
| HIGH⚡ | tests/test_hooks.py | 1042 | assert 'cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd' in script | CODE |
| HIGH⚡ | tests/test_hooks.py | 1042 | assert 'cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd' in script | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 106 | "function wrapper(a: unknown, b: unknown) { return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 122 | "function wrapper(a: unknown, b: unknown) { return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 138 | "function wrapper(a: unknown, b: unknown) { return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 141 | " (alpha) => { q.push(alpha); },\n" | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 156 | "function wrapper(a: unknown, b: unknown) { return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_js_callback_calls.py | 172 | "function wrapper(a: unknown, b: unknown) { return a || b; }\n" | CODE |
| HIGH⚡ | tests/test_java_member_calls.py | 146 | " { AuditLog service = null; service.charge(); }\n" | CODE |
| HIGH⚡ | tests/test_java_member_calls.py | 149 | " new Object() { void nested() { AuditLog service = null; } };\n" | CODE |
| HIGH⚡ | tests/test_java_member_calls.py | 213 | " void run(int value) { PaymentGateway service = null; service.charge(); }\n" | CODE |
| HIGH⚡ | tests/test_java_member_calls.py | 214 | " void run(String value) { AuditLog service = null; service.charge(); }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 83 | "function div() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 95 | "function div() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 106 | "function _Row() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 119 | "function Provider() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 130 | "icons.tsx": "export function X() { return null; }\n", | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 133 | "function Close() { return null; }\n" | CODE |
| HIGH⚡ | tests/test_jsx_component_usage_calls.py | 134 | "function Comp() { return null; }\n" | CODE |
| HIGH | tests/test_incremental.py | 116 | "export function ScanScreen() {\n return null;\n}\n", encoding="utf-8" | CODE |
| HIGH⚡ | tests/test_js_import_resolution.py | 1976 | "export function BottomNav() { return null }\n", | CODE |
| HIGH⚡ | tests/test_js_import_resolution.py | 1980 | "export function BottomNav() { return null }\n", | CODE |
| HIGH | tests/test_js_import_resolution.py | 289 | " return rules.map((rule) => rule.evaluate(ctx)).filter((f) => f !== null)\n" | CODE |
| HIGH | tests/test_js_import_resolution.py | 1914 | "export function Icon() { return null }\n", | CODE |
| HIGH | tests/test_js_import_resolution.py | 1918 | "export function Icon() { return null }\n", | CODE |
| HIGH | tests/test_js_import_resolution.py | 1946 | "export function Icon() { return null }\n", | CODE |
| HIGH | tests/test_js_import_resolution.py | 1950 | "export function Icon() { return null }\n", | CODE |
| HIGH | tests/test_cross_language_call_resolution.py | 48 | " return null;\n" | CODE |
| HIGH⚡ | tests/test_out_dir_evidence.py | 62 | "export default function Home() { return null; }\n", encoding="utf-8") | CODE |
| HIGH⚡ | tests/test_extract.py | 1197 | " render() { return null; }\n" | CODE |
| 67 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tools/skillgen/gen.py | 241 | "### Step 4 - Build the graph and generate outputs", | CODE |
| LOW⚡ | tools/skillgen/gen.py | 242 | "### Step 5 - Save manifest, clean up, and report", | CODE |
| LOW⚡ | tools/skillgen/gen.py | 252 | "### Step 4 - Build graph and cluster", | CODE |
| LOW⚡ | tools/skillgen/gen.py | 253 | "### Step 5 - Generate report and visualization", | CODE |
| LOW | tools/skillgen/fragments/core/devin.md | 70 | ### Step 1 - Ensure graphify is installed | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 120 | ### Step 2 - Detect files | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 197 | ### Step 3 - Extract entities and relationships | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 463 | ### Step 4 - Build graph, cluster, analyze, generate outputs | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 523 | ### Step 5 - Label communities | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 570 | ### Step 6 - Generate Obsidian vault (opt-in) + HTML | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 684 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 784 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | tools/skillgen/fragments/core/devin.md | 804 | ### Step 9 - Save manifest, update cost tracker, clean up, and report | COMMENT |
| LOW⚡ | tools/skillgen/fragments/core/core.md | 58 | ### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths) | COMMENT |
| LOW⚡ | tools/skillgen/fragments/core/core.md | 62 | ### Step 1 - Ensure graphify is installed | COMMENT |
| LOW⚡ | tools/skillgen/fragments/core/core.md | 66 | ### Step 2 - Detect files | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 112 | ### Step 3 - Extract entities and relationships | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 334 | ### Step 4 - Build graph, cluster, analyze, generate outputs | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 423 | ### Step 5 - Label communities | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 472 | ### Step 6 - Generate Obsidian vault (opt-in) + HTML | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 498 | ### Step 9 - Save manifest, update cost tracker, clean up, and report | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 59 | ### Step 1 - Ensure graphify is installed | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 107 | ### Step 2 - Detect files | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 184 | ### Step 3 - Extract entities and relationships | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 398 | ### Step 4 - Build graph, cluster, analyze, generate outputs | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 458 | ### Step 5 - Label communities | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 505 | ### Step 6 - Generate Obsidian vault (opt-in) + HTML | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 565 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 666 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | tools/skillgen/fragments/core/aider.md | 686 | ### Step 9 - Save manifest, update cost tracker, clean up, and report | COMMENT |
| LOW | …illgen/fragments/references/shared/github-and-merge.md | 5 | ### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given) | COMMENT |
| LOW | tools/skillgen/fragments/references/shared/exports.md | 15 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | tools/skillgen/fragments/references/shared/exports.md | 79 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | …pected/graphify__skills__codex__references__exports.md | 15 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | …pected/graphify__skills__codex__references__exports.md | 79 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | …raphify__skills__kilo__references__github-and-merge.md | 5 | ### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given) | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 61 | ### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths) | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 65 | ### Step 1 - Ensure graphify is installed | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 113 | ### Step 2 - Detect files | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 159 | ### Step 3 - Extract entities and relationships | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 403 | ### Step 4 - Build graph, cluster, analyze, generate outputs | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 492 | ### Step 5 - Label communities | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 541 | ### Step 6 - Generate Obsidian vault (opt-in) + HTML | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 567 | ### Step 9 - Save manifest, update cost tracker, clean up, and report | COMMENT |
| LOW | …ify__skills__opencode__references__github-and-merge.md | 5 | ### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given) | COMMENT |
| LOW | …hify__skills__windows__references__github-and-merge.md | 5 | ### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given) | COMMENT |
| LOW | …cted/graphify__skills__windows__references__exports.md | 15 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | …cted/graphify__skills__windows__references__exports.md | 79 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | …cted/graphify__skills__copilot__references__exports.md | 15 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| LOW | …cted/graphify__skills__copilot__references__exports.md | 79 | ### Step 8 - Token reduction benchmark (only if total_words > 5000) | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 61 | ### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths) | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 65 | ### Step 1 - Ensure graphify is installed | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 141 | ### Step 2 - Detect files | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 187 | ### Step 3 - Extract entities and relationships | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 433 | ### Step 4 - Build graph, cluster, analyze, generate outputs | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 522 | ### Step 5 - Label communities | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 571 | ### Step 6 - Generate Obsidian vault (opt-in) + HTML | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 597 | ### Step 9 - Save manifest, update cost tracker, clean up, and report | COMMENT |
| LOW | …hify__skills__copilot__references__github-and-merge.md | 5 | ### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given) | COMMENT |
| LOW | …ted/graphify__skills__opencode__references__exports.md | 15 | ### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag) | COMMENT |
| 351 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/skillgen/gen.py | 24 | CODE | |
| LOW | tools/skillgen/gen.py | 35 | CODE | |
| LOW | tools/skillgen/__main__.py | 2 | CODE | |
| LOW | worked/mixed-corpus/raw/build.py | 2 | CODE | |
| LOW | worked/mixed-corpus/raw/cluster.py | 2 | CODE | |
| LOW | worked/mixed-corpus/raw/analyze.py | 2 | CODE | |
| LOW | worked/example/raw/api.py | 5 | CODE | |
| LOW | worked/example/raw/api.py | 7 | CODE | |
| LOW | worked/httpx/raw/client.py | 7 | CODE | |
| LOW | worked/httpx/raw/client.py | 7 | CODE | |
| LOW | worked/httpx/raw/client.py | 9 | CODE | |
| LOW | worked/httpx/raw/client.py | 9 | CODE | |
| LOW | worked/httpx/raw/client.py | 10 | CODE | |
| LOW | worked/httpx/raw/utils.py | 5 | CODE | |
| LOW | tests/test_forwarding_review_findings.py | 1 | CODE | |
| LOW | tests/test_csharp_member_chain_calls.py | 8 | CODE | |
| LOW | tests/test_no_cluster_run_only_keys.py | 10 | CODE | |
| LOW | tests/test_extract_cli.py | 2 | CODE | |
| LOW | tests/test_extract_cli.py | 1388 | CODE | |
| LOW | tests/test_suggest_questions_ambiguous.py | 5 | CODE | |
| LOW | tests/test_csharp_partial_classes.py | 13 | CODE | |
| LOW | tests/test_solidity_extractor.py | 4 | CODE | |
| LOW | tests/test_csharp_enum_members.py | 10 | CODE | |
| LOW | tests/test_semantic_similarity.py | 5 | CODE | |
| LOW | tests/test_word_count_cache.py | 5 | CODE | |
| LOW | tests/test_rust_builtin_type_hubs.py | 15 | CODE | |
| LOW | tests/test_multigraph_diagnostics.py | 1 | CODE | |
| LOW | tests/test_tree_html.py | 9 | CODE | |
| LOW | tests/test_hook_strict.py | 15 | CODE | |
| LOW | tests/test_elixir_unqualified_call_scope.py | 9 | CODE | |
| LOW | tests/test_community_labels_skill.py | 15 | CODE | |
| LOW | tests/test_codebuddy.py | 7 | CODE | |
| LOW | tests/test_pascal.py | 2 | CODE | |
| LOW | tests/test_inherited_field_receivers.py | 12 | CODE | |
| LOW | tests/test_inherited_field_receivers.py | 148 | CODE | |
| LOW | tests/test_graph_invariance.py | 17 | CODE | |
| LOW | tests/test_build_merge_hyperedges_and_prune.py | 13 | CODE | |
| LOW | tests/test_unmapped_at_alias_resolution.py | 7 | CODE | |
| LOW | tests/test_unmapped_at_alias_resolution.py | 13 | CODE | |
| LOW | tests/test_unmapped_at_alias_resolution.py | 13 | CODE | |
| LOW | tests/test_dedup.py | 2 | CODE | |
| LOW | tests/test_dedup.py | 259 | CODE | |
| LOW | tests/test_symbol_resolution.py | 3 | CODE | |
| LOW | tests/test_csharp_call_site_generic_args.py | 16 | CODE | |
| LOW | tests/test_swift_import_resolution.py | 1 | CODE | |
| LOW | tests/test_js_dynamic_import_affected.py | 17 | CODE | |
| LOW | tests/bench_query_scoring.py | 29 | CODE | |
| LOW | tests/test_security.py | 2 | CODE | |
| LOW | tests/test_security.py | 4 | CODE | |
| LOW | tests/test_security.py | 12 | CODE | |
| LOW | tests/test_security.py | 12 | CODE | |
| LOW | tests/test_vue_extraction.py | 7 | CODE | |
| LOW | tests/conftest.py | 1 | CODE | |
| LOW | tests/test_scala_self_type.py | 13 | CODE | |
| LOW | tests/test_cluster_exclude_hubs.py | 7 | CODE | |
| LOW | tests/test_query_cli.py | 2 | CODE | |
| LOW | tests/test_python_reexport_type_binding.py | 11 | CODE | |
| LOW | tests/test_semantic_id_remap_root.py | 10 | CODE | |
| LOW | tests/test_path_cli.py | 3 | CODE | |
| LOW | tests/test_path_cli.py | 8 | CODE | |
| 655 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/skillgen/gen.py | 431 | CODE | |
| LOW | tools/skillgen/gen.py | 469 | CODE | |
| LOW | tools/skillgen/gen.py | 711 | CODE | |
| LOW | worked/example/raw/parser.py | 29 | CODE | |
| LOW | tests/test_inferred_confidence_rubric.py | 80 | CODE | |
| LOW | tests/test_inferred_confidence_rubric.py | 99 | CODE | |
| LOW | tests/test_pg_introspect.py | 16 | CODE | |
| LOW | tests/test_pg_introspect.py | 40 | CODE | |
| LOW | tests/test_multilang.py | 167 | CODE | |
| LOW | tests/test_multilang.py | 1276 | CODE | |
| LOW | tests/test_multilang.py | 215 | CODE | |
| LOW | tests/test_multilang.py | 1298 | CODE | |
| LOW | tests/test_multilang.py | 224 | CODE | |
| LOW | tests/test_csharp_type_resolution.py | 1223 | CODE | |
| LOW | tests/test_install.py | 1716 | CODE | |
| LOW | tests/test_skillgen.py | 424 | CODE | |
| LOW | graphify/cross_repo_calls.py | 151 | CODE | |
| LOW | graphify/build.py | 912 | CODE | |
| LOW | graphify/build.py | 999 | CODE | |
| LOW | graphify/build.py | 1704 | CODE | |
| LOW | graphify/build.py | 1802 | CODE | |
| LOW | graphify/build.py | 1903 | CODE | |
| LOW | graphify/build.py | 1969 | CODE | |
| LOW | graphify/build.py | 2113 | CODE | |
| LOW | graphify/build.py | 2567 | CODE | |
| LOW | graphify/ingest.py | 14 | CODE | |
| LOW | graphify/hooks.py | 555 | CODE | |
| LOW | graphify/hooks.py | 680 | CODE | |
| LOW | graphify/hooks.py | 740 | CODE | |
| LOW | graphify/manifest_ingest.py | 145 | CODE | |
| LOW | graphify/manifest_ingest.py | 175 | CODE | |
| LOW | graphify/cargo_introspect.py | 80 | CODE | |
| LOW | graphify/benchmark.py | 37 | CODE | |
| LOW | graphify/paths.py | 31 | CODE | |
| LOW | graphify/interface_dispatch.py | 66 | CODE | |
| LOW | graphify/security.py | 103 | CODE | |
| LOW | graphify/cache.py | 85 | CODE | |
| LOW | graphify/cache.py | 378 | CODE | |
| LOW | graphify/cache.py | 511 | CODE | |
| LOW | graphify/cache.py | 655 | CODE | |
| LOW | graphify/cache.py | 985 | CODE | |
| LOW | graphify/cache.py | 1504 | CODE | |
| LOW | graphify/cache.py | 1808 | CODE | |
| LOW | graphify/serve.py | 298 | CODE | |
| LOW | graphify/serve.py | 363 | CODE | |
| LOW | graphify/serve.py | 559 | CODE | |
| LOW | graphify/serve.py | 1034 | CODE | |
| LOW | graphify/serve.py | 1092 | CODE | |
| LOW | graphify/serve.py | 1513 | CODE | |
| LOW | graphify/serve.py | 1829 | CODE | |
| LOW | graphify/serve.py | 1913 | CODE | |
| LOW | graphify/serve.py | 1955 | CODE | |
| LOW | graphify/serve.py | 1924 | CODE | |
| LOW | graphify/serve.py | 2474 | CODE | |
| LOW | graphify/llm.py | 272 | CODE | |
| LOW | graphify/llm.py | 1049 | CODE | |
| LOW | graphify/llm.py | 1365 | CODE | |
| LOW | graphify/llm.py | 1947 | CODE | |
| LOW | graphify/llm.py | 2293 | CODE | |
| LOW | graphify/llm.py | 2568 | CODE | |
| 293 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 101 | # tree-sitter-dm (BYOND DreamMaker) ships only a Windows wheel, so on Linux/Mac it | COMMENT |
| LOW | tools/skillgen/platforms.toml | 1 | # skillgen platform manifest | COMMENT |
| LOW | tools/skillgen/platforms.toml | 21 | # dispatch Part-B dispatch fragment basename under fragments/dispatch/. | COMMENT |
| LOW | tools/skillgen/gen.py | 41 | FRAGMENTS_DIR = SKILLGEN_DIR / "fragments" | COMMENT |
| LOW | tools/skillgen/gen.py | 61 | """The git ref for a split host's own pre-split skill body.""" | COMMENT |
| LOW | tools/skillgen/gen.py | 141 | _QUERY_REFERENCE = "references/query/default.md" | COMMENT |
| LOW | tools/skillgen/gen.py | 201 | # | COMMENT |
| LOW | tools/skillgen/gen.py | 221 | # lives in the core or a reference under the new heading; the audit confirms | COMMENT |
| LOW | tools/skillgen/gen.py | 361 | # | COMMENT |
| LOW | tools/skillgen/fragments/core/core.md | 501 | $(cat graphify-out/.graphify_python) -c " | COMMENT |
| LOW | tools/skillgen/fragments/references/shared/update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | tools/skillgen/fragments/references/shared/update.md | 141 | COMMENT | |
| LOW | …n/expected/graphify__skills__pi__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …n/expected/graphify__skills__pi__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-trae.md | 581 | # root= relativizes the manifest keys to the scan root (same base as the build), | COMMENT |
| LOW | …pected/graphify__skills__vscode__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …pected/graphify__skills__vscode__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-windows.md | 601 | import json | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | …pected/graphify__skills__agents__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …pected/graphify__skills__agents__references__update.md | 141 | COMMENT | |
| LOW | …expected/graphify__skills__trae__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …expected/graphify__skills__trae__references__update.md | 141 | COMMENT | |
| LOW | …xpected/graphify__skills__codex__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …xpected/graphify__skills__codex__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-kilo.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | …cted/graphify__skills__opencode__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …cted/graphify__skills__opencode__references__update.md | 141 | COMMENT | |
| LOW | …pected/graphify__skills__claude__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …pected/graphify__skills__claude__references__update.md | 141 | COMMENT | |
| LOW | …expected/graphify__skills__kilo__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …expected/graphify__skills__kilo__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-droid.md | 581 | # so the on-disk manifest is portable across clones/machines and a later --update | COMMENT |
| LOW | …expected/graphify__skills__kiro__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …expected/graphify__skills__kiro__references__update.md | 141 | COMMENT | |
| LOW | …xpected/graphify__skills__droid__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …xpected/graphify__skills__droid__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-kiro.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-opencode.md | 581 | # next --update re-queues it, otherwise it is marked done and its content is lost | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-pi.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | …ected/graphify__skills__copilot__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …ected/graphify__skills__copilot__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-copilot.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-vscode.md | 581 | # matches cached files instead of missing every one (#1417). | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-agents.md | 581 | # so the on-disk manifest is portable across clones/machines and a later --update | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-claw.md | 581 | # In --update mode, 'all_files' carries the full corpus; 'files' is the changed | COMMENT |
| LOW | tools/skillgen/expected/graphify__skill-codex.md | 581 | # so the on-disk manifest is portable across clones/machines and a later --update | COMMENT |
| LOW | …ected/graphify__skills__windows__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …ected/graphify__skills__windows__references__update.md | 141 | COMMENT | |
| LOW | …/expected/graphify__skills__amp__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …/expected/graphify__skills__amp__references__update.md | 141 | COMMENT | |
| LOW | tools/skillgen/expected/graphify__skill-amp.md | 581 | # so the on-disk manifest is portable across clones/machines and a later --update | COMMENT |
| LOW | …expected/graphify__skills__claw__references__update.md | 101 | # Do NOT add `changed` here: with root= passed, prune_set relativizes to the same base | COMMENT |
| LOW | …expected/graphify__skills__claw__references__update.md | 141 | COMMENT | |
| LOW | tests/test_dedup.py | 1301 | assert not _same_word_variant("jest", "react") | COMMENT |
| LOW | tests/test_cross_extension_reexport_self_cycle.py | 161 | assert not self_loops, f"unexpected self-loop among siblings; got {self_loops}" | COMMENT |
| LOW | tests/test_detect.py | 2021 | # Verify the whole function still returns True (via name pattern, not dir check). | COMMENT |
| LOW | tests/test_multilang.py | 1361 | continue | COMMENT |
| LOW | tests/test_build.py | 1621 | assert set(hes) == {"he_partial"}, "an all-dangling hyperedge must be dropped" | COMMENT |
| LOW | .github/workflows/publish.yml | 1 | name: Publish to PyPI | COMMENT |
| 217 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | worked/mixed-corpus/raw/cluster.py | 88 | except Exception: | CODE |
| LOW | worked/example/raw/parser.py | 77 | except Exception as e: | CODE |
| LOW | worked/httpx/raw/auth.py | 112 | except Exception: | CODE |
| LOW | worked/httpx/raw/transport.py | 78 | except Exception as exc: | CODE |
| LOW | worked/httpx/raw/transport.py | 131 | except Exception as exc: | CODE |
| LOW | tests/test_source_key_memoization.py | 35 | except Exception: | CODE |
| LOW | tests/test_falkordb_integration.py | 43 | except Exception as e: # pragma: no cover - depends on local environment | CODE |
| LOW | tests/test_falkordb_integration.py | 47 | except Exception as e: # pragma: no cover - depends on local environment | CODE |
| LOW⚡ | tests/test_falkordb_integration.py | 58 | except Exception: | CODE |
| LOW⚡ | tests/test_falkordb_integration.py | 63 | except Exception: | CODE |
| LOW⚡ | tests/test_llm_backends.py | 898 | except Exception: | CODE |
| MEDIUM | tests/bench_extract.py | 119 | print(f"Error: {target} does not exist", file=sys.stderr) | CODE |
| LOW | …erpowers/plans/2026-05-04-incremental-updates-dedup.md | 780 | except Exception as exc: | CODE |
| LOW | …erpowers/plans/2026-05-04-incremental-updates-dedup.md | 790 | except Exception as exc: | CODE |
| LOW | …erpowers/plans/2026-05-04-incremental-updates-dedup.md | 841 | except Exception as exc: | CODE |
| LOW | …erpowers/plans/2026-05-04-incremental-updates-dedup.md | 1044 | except Exception as exc: | CODE |
| LOW | graphify/build.py | 638 | except Exception: | CODE |
| LOW | graphify/file_slice.py | 239 | except Exception: | CODE |
| LOW | graphify/ingest.py | 126 | except Exception: | CODE |
| LOW | graphify/ingest.py | 193 | except Exception: | CODE |
| LOW | graphify/hooks.py | 253 | except Exception: | CODE |
| LOW | graphify/hooks.py | 258 | except Exception as exc: | CODE |
| LOW | graphify/hooks.py | 328 | except Exception: | CODE |
| LOW | graphify/hooks.py | 333 | except Exception as exc: | CODE |
| LOW | graphify/manifest_ingest.py | 92 | except Exception as exc: # noqa: BLE001 — a malformed manifest must not abort extraction | CODE |
| LOW | graphify/global_graph.py | 19 | except Exception as exc: | CODE |
| LOW | graphify/global_graph.py | 34 | except Exception as rename_exc: | CODE |
| LOW | graphify/diagnostics.py | 255 | except Exception as exc: | CODE |
| LOW | graphify/querylog.py | 79 | except Exception: | CODE |
| LOW | graphify/cache.py | 36 | except Exception: | CODE |
| LOW | graphify/cache.py | 67 | except Exception: | CODE |
| LOW | graphify/cache.py | 71 | except Exception: | CODE |
| LOW | graphify/cache.py | 486 | except Exception: | CODE |
| LOW | graphify/cache.py | 1256 | except Exception: | CODE |
| MEDIUM | graphify/serve.py | 1924 | def _relay() -> None: | CODE |
| LOW | graphify/serve.py | 70 | except Exception: | CODE |
| LOW | graphify/serve.py | 88 | except Exception: | CODE |
| LOW | graphify/serve.py | 1931 | except Exception: | CODE |
| LOW | graphify/serve.py | 2421 | except Exception: | CODE |
| LOW | graphify/serve.py | 2458 | except Exception: | CODE |
| LOW | graphify/serve.py | 2496 | except Exception as exc: | CODE |
| LOW | graphify/serve.py | 2521 | except Exception as exc: | CODE |
| LOW | graphify/serve.py | 2539 | except Exception as exc: | CODE |
| LOW | graphify/serve.py | 2580 | except Exception: | CODE |
| LOW | graphify/llm.py | 57 | except Exception: # network failure on first-use download, etc. | CODE |
| LOW | graphify/llm.py | 249 | except Exception: | CODE |
| LOW | graphify/llm.py | 304 | except Exception: | CODE |
| LOW | graphify/llm.py | 698 | except Exception: # noqa: BLE001 — one unreadable file (e.g. a malformed PDF) must not disable binding for the | CODE |
| LOW | graphify/llm.py | 2072 | except Exception as _exc: # noqa: BLE001 — evidence-binding is advisory | CODE |
| LOW | graphify/llm.py | 2141 | except Exception: | CODE |
| LOW | graphify/llm.py | 2423 | except Exception as exc: # noqa: BLE001 — re-raise unless it's a known context overflow or timeout | CODE |
| LOW | graphify/llm.py | 2666 | except Exception as exc: # noqa: BLE001 — caller-facing surface, log + continue | CODE |
| LOW | graphify/llm.py | 2720 | except Exception as _exc: # noqa: BLE001 — checkpoint is best-effort | CODE |
| LOW | graphify/llm.py | 3133 | except Exception: | CODE |
| LOW | graphify/llm.py | 3486 | except Exception as exc: # noqa: BLE001 - reported per-batch; surfaced below | CODE |
| LOW | graphify/llm.py | 3549 | except Exception: | CODE |
| LOW | graphify/llm.py | 3583 | except Exception as exc: | CODE |
| LOW | graphify/multigraph_compat.py | 64 | except Exception as exc: | CODE |
| LOW⚡ | graphify/export.py | 265 | except Exception: | CODE |
| LOW⚡ | graphify/export.py | 270 | except Exception: | CODE |
| 200 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 799 | - Fix: the `claude-cli` backend now reads the CLI's structured-output channel instead of trusting free-form prose (#2076 | CODE |
| MEDIUM⚡ | tests/test_claude_cli_backend.py | 280 | # Newer Claude Code CLIs treat a bare file-dump prompt as an agentic task and | COMMENT |
| MEDIUM⚡ | tests/test_llm_backends.py | 736 | # `chat_template_kwargs.enable_thinking=false` or the model emits chain-of-thought | COMMENT |
| MEDIUM | tests/test_llm_backends.py | 280 | # produce when a chunk overflows the model's context window. | COMMENT |
| MEDIUM⚡ | tests/test_llm_backends.py | 899 | pass # mock scaffolding may not be complete; we only care about the call | CODE |
| MEDIUM⚡ | tests/test_labeling.py | 265 | # 16k context window of self-hosted reasoning models (Qwen3, Llama-3.1 8B). | COMMENT |
| MEDIUM | graphify/llm.py | 1042 | # Reasoning models (nemotron, deepseek-r1, qwq, …) emit their chain of thought | COMMENT |
| MEDIUM | graphify/llm.py | 1744 | # object directly. The <untrusted_source> guardrails in _extraction_system | COMMENT |
| MEDIUM | graphify/llm.py | 1784 | # agentic task and REPORT the extraction in prose ("Knowledge graph | COMMENT |
| MEDIUM | graphify/llm.py | 2136 | # looks like. The chunk then blows the context window and falls into | COMMENT |
| MEDIUM | graphify/llm.py | 3239 | # When graphify runs inside an orchestrating agent (Claude Code / Gemini CLI), | COMMENT |
| MEDIUM | graphify/cli.py | 2352 | # standalone there is no orchestrating agent to do skill.md Step 5, so | COMMENT |
| MEDIUM | graphify/report.py | 161 | # agree on (#3148) -- file nodes are structural scaffolding, concept | COMMENT |
| MEDIUM | graphify/extractors/bash.py | 126 | # Cross-file resolution scaffolding consumed by resolve_bash_source_edges in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_detect.py | 4076 | # Step 1: Workspace root or sibling subfolder is graphed | COMMENT |
| LOW⚡ | tests/test_detect.py | 4080 | # Step 2: Incremental update on subfolder A only | COMMENT |
| LOW | tests/test_unverified_semantic_shrink.py | 189 | # Step 1: Initial build (README: 3 nodes, GUIDE: 2 nodes) | COMMENT |
| LOW | tests/test_unverified_semantic_shrink.py | 222 | # Step 2: Edit README.md and re-extract returning only 1 node | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 25 | # Step 1: detect | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 31 | # Step 2: extract (AST only - no LLM) | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 38 | # Step 3: build | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 43 | # Step 4: cluster | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 51 | # Step 5: analyze | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 63 | # Step 6: report | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 70 | # Step 7: export - JSON | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 78 | # Step 8: export - HTML | COMMENT |
| LOW⚡ | tests/test_pipeline.py | 86 | # Step 9: export - Obsidian vault | COMMENT |
| LOW | graphify/paths.py | 389 | # Step 2: path proximity over the survivors. | COMMENT |
| LOW | graphify/analyze.py | 749 | # Step 1: Build a directed file-level graph from import/re-export edges. | COMMENT |
| LOW | graphify/analyze.py | 795 | # Step 2: Find simple cycles, bounded by length. | COMMENT |
| LOW | graphify/analyze.py | 807 | # Step 3: Sort by length (shortest = tightest coupling), then deduplicate. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | worked/httpx/raw/transport.py | 13 | def handle_request(self, request: Request) -> Response: | CODE |
| LOW | worked/httpx/raw/transport.py | 70 | def handle_request(self, request: Request) -> Response: | CODE |
| LOW | worked/httpx/raw/transport.py | 112 | def handle_request(self, request: Request) -> Response: | CODE |
| LOW | worked/httpx/raw/transport.py | 126 | def handle_request(self, request: Request) -> Response: | CODE |
| LOW | tests/test_scala_given_instances.py | 21 | " def helper(a: Int): String = a.toString\n" | CODE |
| LOW | tests/test_markdown_code_spans.py | 25 | def helper(): | CODE |
| LOW | tests/test_markdown_code_spans.py | 35 | def helper(): | CODE |
| LOW | tests/test_watch.py | 2305 | (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8") | CODE |
| LOW | tests/test_watch.py | 2360 | (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8") | CODE |
| LOW | tests/test_watch.py | 2386 | (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8") | CODE |
| LOW | tests/test_watch.py | 3782 | " class << self\n def helper(value); value; end\n end\n" | CODE |
| LOW | tests/test_watch.py | 3784 | else " def helper(value); value; end\n" | CODE |
| LOW | tests/test_watch.py | 4994 | (corpus / "b.py").write_text("def helper(): pass\n", encoding="utf-8") | CODE |
| LOW | tests/test_loose_sibling_import_resolution.py | 198 | (scripts / "utils.py").write_text("def helper():\n return 'util'\n", encoding="utf-8") | CODE |
| LOW⚡ | tests/test_issue_3405_python_resolution.py | 127 | def helper(): | STRING |
| LOW⚡ | tests/test_issue_3405_python_resolution.py | 136 | " def helper():\n" | CODE |
| LOW | tests/test_rationale.py | 286 | def helper() -> int: | CODE |
| LOW⚡ | tests/test_type_only_import_cycles.py | 272 | "pkg/b.py": "from pkg.c import C\n\nclass B: ...\n\ndef helper(x):\n return C\n", | CODE |
| LOW | tests/test_type_only_import_cycles.py | 261 | "b.py": "from a import f\n\nclass B: ...\n\ndef helper(x):\n return f\n", | CODE |
| LOW | tests/test_src_layout_import_resolution.py | 21 | "mypkg/helpers.py": "def helper():\n return 1\n", | CODE |
| LOW | tests/test_external_stub_endpoints.py | 114 | "import re\n\ndef helper(x):\n return re.match(r'.', str(x))\n", encoding="utf-8" | CODE |
| LOW | tests/test_source_file_encoding.py | 200 | "pkg/helpers.py": "def helper():\n return 1\n".encode("utf-8"), | STRING |
| LOW | tests/test_incremental.py | 374 | (pkg / "b.py").write_text("def helper():\n return 1\n") | CODE |
| LOW | tests/test_incremental.py | 403 | (proj / "b.py").write_text("def helper():\n return 1\n", encoding="utf-8") | CODE |
| LOW | tests/test_incremental.py | 474 | (proj / "b.py").write_text("def helper():\n return 1\n", encoding="utf-8") | CODE |
| LOW⚡ | tests/test_case_sensitive_resolution.py | 70 | "h.py": "def helper():\n return 1\n", | CODE |
| LOW | tests/test_python_import_resolution.py | 176 | target = _write(tmp_path / "pkg" / "sibling.py", "def helper():\n return 1\n") | CODE |
| LOW | tests/test_python_import_resolution.py | 461 | sub = _write(tmp_path / "ns/sub.py", "def helper():\n pass\n") | CODE |
| LOW | tests/test_python_underscore_resolution.py | 124 | def helper(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_extract_cli.py | 67 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 127 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 180 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 246 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 315 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 368 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 485 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 553 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 600 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 636 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 1394 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 1522 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_extract_cli.py | 1582 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW⚡ | tests/test_dedup.py | 1078 | {"id": "acme_corp_one", "label": "Acme Corp", | CODE |
| LOW⚡ | tests/test_dedup.py | 1080 | {"id": "acme_corp_two", "label": "Acme Corp", | CODE |
| LOW⚡ | tests/test_dedup.py | 1075 | survivor: {'Acme Corp' doc1, 'Acme Corp' doc2, 'Acme Corp.' doc3} all | STRING |
| LOW | tests/test_incomplete_build_guard.py | 42 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_incomplete_build_guard.py | 129 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_hollow_chunks_arm_shrink_guard.py | 40 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW | tests/test_detect.py | 911 | src.write_text("placeholder", encoding="utf-8") | CODE |
| LOW | tests/test_detect.py | 3328 | doc_path.write_bytes(b"placeholder") | CODE |
| LOW | tests/test_dedup_shrink_refuses_force_write.py | 68 | monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key") | CODE |
| LOW⚡ | tests/test_llm_backends.py | 206 | big.write_text(("# Section\n\n" + "lorem ipsum dolor sit amet " * 60 + "\n\n") * 30) | CODE |
| LOW⚡ | tests/test_llm_backends.py | 206 | big.write_text(("# Section\n\n" + "lorem ipsum dolor sit amet " * 60 + "\n\n") * 30) | CODE |
| LOW⚡ | tests/test_llm_backends.py | 1552 | assert source == "placeholder" | CODE |
| LOW | tests/test_llm_backends.py | 1290 | "https://api.moonshot.ai/v1", "fake-key", "kimi-k2", | CODE |
| LOW | tests/test_llm_backends.py | 1318 | monkeypatch.setattr(llm, "_get_backend_api_key", lambda _b: "fake-key") | CODE |
| LOW | tests/test_llm_backends.py | 1346 | monkeypatch.setattr(llm, "_get_backend_api_key", lambda _b: "fake-key") | CODE |
| LOW⚡ | tests/test_labeling.py | 199 | assert source == "placeholder" | CODE |
| LOW⚡ | tests/test_labeling.py | 210 | assert source == "placeholder" | CODE |
| LOW⚡ | tests/test_file_slice.py | 28 | text = ("# Heading\n\n" + "lorem ipsum " * 40 + "\n\n") * 20 | CODE |
| LOW | graphify/llm.py | 3567 | return _placeholder_community_labels(communities), "placeholder" | CODE |
| LOW | graphify/llm.py | 3590 | return _placeholder_community_labels(communities), "placeholder" | CODE |
| LOW | graphify/llm.py | 3545 | ``"placeholder"``. Never raises.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_skill_auto_refresh.py | 0 | gemini and hermes install to different directories on windows; these tests assert the posix layout, so pin it. | STRING |
| HIGH | tests/test_install_references.py | 0 | gemini and hermes install to different directories on windows; these tests assert the posix layout, so pin it. | STRING |
| HIGH | tests/test_uninstall_scope.py | 0 | gemini and hermes install to different directories on windows; these tests assert the posix layout, so pin it. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_languages.py | 3251 | # More robust: no target should contain a brace character | COMMENT |
| MEDIUM | tests/test_hook_guard.py | 21 | # Direct-call harness: hermetic w.r.t. the ambient GRAPHIFY_OUT env. | COMMENT |
| MEDIUM | graphify/extract.py | 8990 | # path.name)``). Resolving file membership by that shared string is robust | COMMENT |
| LOW | graphify/extract.py | 2484 | # Edge target already a real node - just add the edge, don't add a node. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_word_count_cache.py | 13 | def _settle(path: Path) -> None: | CODE |
| LOW | tests/test_stat_index_portability.py | 61 | def _settle(path: Path) -> None: | CODE |
| LOW | tests/test_hooks.py | 559 | def _set_hookspath(repo: Path, value: str) -> None: | CODE |
| LOW | graphify/manifest_ingest.py | 25 | __all__ = ["is_package_manifest_path", "extract_package_manifest", "PACKAGE_MANIFEST_NAMES"] | CODE |
| LOW | graphify/manifest.py | 4 | __all__ = ["save_manifest", "load_manifest", "detect_incremental"] | CODE |
| LOW | graphify/watch.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | graphify/ids.py | 47 | __all__ = ["normalize_id", "make_id"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | graphify/detect.py | 541 | # Check if it's a converted paper | COMMENT |
| LOW | graphify/extract.py | 3099 | # Check if preceded by `(` (e.g. range-based for loop `for(class MACRO var: items)`) | COMMENT |
| LOW | graphify/extractors/bash.py | 399 | # Check if the leading variable is tracked | COMMENT |
| LOW | graphify/extractors/dart.py | 45 | # Check if this is a part-of file and redirect to parent | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_prs.py | 29 | CODE | |
| LOW | graphify/cache.py | 1504 | CODE | |
| LOW | graphify/serve.py | 2752 | CODE | |
| LOW | graphify/llm.py | 2568 | CODE | |
| LOW | graphify/callflow_html.py | 1608 | CODE | |
| LOW | graphify/callflow_html.py | 1543 | CODE |