Repository Analysis

safishamsi/graphify

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.

36.1 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of safishamsi/graphify, a Python project with 111,924 GitHub stars. SynthScan v2.0 examined 226,979 lines of code across 711 source files, recording 6696 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 36.1 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

36.1
Adjusted Score
36.1
Raw Score
100%
Time Factor
2026-08-28
Last Push
111.9K
Stars
Python
Language
227.0K
Lines of Code
711
Files
6.7K
Pattern Hits
2026-08-29
Scan Date
0.14
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 101MEDIUM 566LOW 6029

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 6696 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers4278 hits · 3797 pts
SeverityFileLineSnippetContext
LOWtools/skillgen/gen.py893def _is_frontmatter_description_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py947def _is_content_scope_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py962def _is_cache_unlink_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py976def _is_zero_node_guard_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1002def _is_manifest_root_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1017def _is_manifest_stamp_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1045def _is_sensitive_reporting_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1066def _is_shebang_allowlist_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1079def _is_obsidian_usage_comment_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1090def _is_uv_from_interpreter_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1104def _is_semantic_cache_scope_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1120def _is_community_label_export_fix_line(line: str) -> bool:CODE
LOWtools/skillgen/gen.py1169def _is_sanctioned_monolith_diff(line: str) -> bool:CODE
LOWworked/mixed-corpus/raw/analyze.py239def _cross_community_surprises(CODE
LOWworked/httpx/raw/utils.py55def obfuscate_sensitive_headers(headers: dict) -> dict:CODE
LOWtests/test_extract_cli.py22def test_extract_exits_nonzero_when_ast_extraction_raises(CODE
LOWtests/test_extract_cli.py59def test_extract_allow_partial_continues_past_ast_failure(CODE
LOWtests/test_extract_cli.py112def test_extract_exits_nonzero_when_all_semantic_chunks_fail(CODE
LOWtests/test_extract_cli.py173def test_extract_succeeds_when_at_least_one_chunk_completes(CODE
LOWtests/test_extract_cli.py230def test_incremental_partial_run_preserves_untouched_semantic_hash(CODE
LOWtests/test_extract_cli.py305def test_truncated_doc_semantic_hash_is_cleared_for_requeue(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py356def test_manifest_stamps_freshly_extracted_semantic_docs(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py416def test_stamped_manifest_files_normalizes_both_sides(tmp_path):CODE
LOWtests/test_extract_cli.py450def test_stamped_manifest_files_counts_hyperedge_only_docs(tmp_path):CODE
LOWtests/test_extract_cli.py478def test_manifest_stamps_hyperedge_only_docs(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py546def test_extract_mode_deep_dispatches_over_warm_cache(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py593def test_extract_force_flag_redispatches_and_stamps_manifest(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py633def test_extract_graphify_force_env_redispatches(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py656def test_cache_check_mode_deep_reads_deep_namespace(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py700def test_extract_codeonly_succeeds_without_api_key(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py727def test_missing_manifest_code_only_preserves_semantic_layer(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py794def test_extract_out_keeps_project_root_clean(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py831def test_extract_without_key_still_errors_when_docs_present(CODE
LOWtests/test_extract_cli.py859def test_extract_timing_flag_emits_stage_timings(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py894def test_pathless_postgres_extract_initializes_empty_detection(CODE
LOWtests/test_extract_cli.py1034def test_incremental_extract_prunes_newly_excluded_file_not_in_manifest(CODE
LOWtests/test_extract_cli.py1083def test_incremental_extract_prunes_excluded_file_listed_in_manifest(CODE
LOWtests/test_extract_cli.py1127def test_no_cluster_incremental_prunes_newly_excluded_file(CODE
LOWtests/test_extract_cli.py1208def test_failed_extra_is_retried_and_recovers(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1257def test_permanent_failure_does_not_wedge(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1290def test_success_and_unchanged_unaffected(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1310def test_poisoned_manifest_is_healed(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1354def test_cache_check_prompt_file_scopes_hits_to_that_prompt(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1383def test_edge_only_semantic_extraction_not_stamped_and_retried(monkeypatch, tmp_path):CODE
LOWtests/test_extract_cli.py1482def test_stale_poisoned_manifest_semantic_source_healed(monkeypatch, tmp_path, capsys):CODE
LOWtests/test_extract_cli.py1573def test_incremental_stray_attribution_preserves_undispatched_file(CODE
LOWtests/test_pdf_slicing.py78def test_the_fixture_is_the_shape_the_bug_needs(big_pdf):CODE
LOWtests/test_pdf_slicing.py92def test_an_oversized_pdf_is_sliced(big_pdf):CODE
LOWtests/test_pdf_slicing.py99def test_the_slices_tile_the_extracted_text_exactly(big_pdf):CODE
LOWtests/test_pdf_slicing.py106def test_no_slice_exceeds_the_cap(big_pdf):CODE
LOWtests/test_pdf_slicing.py112def test_a_slice_indexes_text_not_bytes(big_pdf):CODE
LOWtests/test_pdf_slicing.py123def test_the_tail_reaches_the_prompt(big_pdf):CODE
LOWtests/test_pdf_slicing.py138def test_a_small_pdf_still_passes_through_whole(tmp_path):CODE
LOWtests/test_pdf_slicing.py146def test_plain_text_slicing_is_unchanged(tmp_path):CODE
LOWtests/test_pdf_slicing.py155def test_images_and_code_are_still_not_sliced(tmp_path):CODE
LOWtests/test_pdf_slicing.py165def test_a_corrupt_pdf_does_not_break_the_pass(tmp_path):CODE
LOWtests/test_pdf_slicing.py171def test_a_rewritten_pdf_is_re_read(tmp_path):CODE
LOWtests/test_pdf_slicing.py184def test_repeated_reads_agree(big_pdf):CODE
LOWtests/test_pdf_slicing.py189def test_bisect_slice_of_a_pdf_indexes_extracted_text_not_bytes(big_pdf):CODE
LOWtests/test_csharp_partial_classes.py63def test_partial_halves_merge_to_one_class_node(tmp_path):CODE
4218 more matches not shown…
Decorative Section Separators543 hits · 2036 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_extract_cli.py999# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_extract_cli.py1004# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_extract_cli.py1166# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_extract_cli.py1172# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_extract_cli.py1555# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_extract_cli.py1562# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_pdf_slicing.py134# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_pdf_slicing.py136# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py9# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py11# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py64# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py66# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py81# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py83# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py92# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py95# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py125# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_semantic_similarity.py127# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_tree_html.py51# ── build_tree unit tests ─────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_tree_html.py83# ── CLI integration ───────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_codebuddy.py43# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py45# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py69# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py71# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py180# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py182# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py233# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py235# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py273# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py275# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py10# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_codebuddy.py12# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_pascal.py145# ── Lazarus Form (.lfm) ───────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_pascal.py199# ── Lazarus Package (.lpk) ───────────────────────────────────────────────────COMMENT
MEDIUMtests/test_pascal.py245# ── Delphi Form (.dfm) ───────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_build_merge_hyperedges_and_prune.py36# ── #1574: hyperedge preservation ─────────────────────────────────────────────COMMENT
MEDIUMtests/test_build_merge_hyperedges_and_prune.py97# ── #1571: root-less prune (absolute deleted paths vs relative node keys) ──────COMMENT
MEDIUMtests/test_dedup.py14# ── entropy gate ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_dedup.py26# ── shingles ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_dedup.py39# ── full pipeline ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_dedup.py130# ── build integration ─────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_dedup.py983# ── #2576: same-file labels differing by a content-word swap ──────────────────COMMENT
MEDIUMtests/test_dedup.py304# ── #1284: numbered siblings + cross-file file-anchored boilerplate ──────────COMMENT
MEDIUMtests/test_dedup.py372# ── #1243: JaroWinkler prefix-bonus over-merge (cross-file) ──────────────────COMMENT
MEDIUMtests/test_dedup.py400# ── #1504: cross-chunk node ID collision warning ──────────────────────────────COMMENT
MEDIUMtests/test_dedup.py440# ── #1857: dedup summary log breakdown ────────────────────────────────────────COMMENT
MEDIUMtests/test_dedup.py476# ── ID collisions: definition vs cross-reference ──────────────────────────────COMMENT
MEDIUMtests/test_dedup.py638# ── #2532: lifecycle-aware, environment-stable collision ranking ──────────────COMMENT
MEDIUMtests/test_dedup.py740# ── #2091 review: attribute-merge correctness (fixes A-D) ─────────────────────COMMENT
MEDIUMtests/test_dedup.py806# ── #2182: cross-file exact-duplicate concepts must merge ─────────────────────COMMENT
MEDIUMtests/test_symbol_resolution.py331# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMtests/test_symbol_resolution.py332# ── Bash source edges resolver tests ──────────────────────────────────────────COMMENT
MEDIUMtests/test_symbol_resolution.py333# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMtests/test_symbol_resolution.py632# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_symbol_resolution.py634# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_security.py31# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_security.py33# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_security.py58# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_security.py60# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_security.py145# ---------------------------------------------------------------------------COMMENT
483 more matches not shown…
Cross-Language Confusion101 hits · 646 pts
SeverityFileLineSnippetContext
HIGHtests/test_ts_parse_warning.py50 "declare const Comp: (props: { to: string }) => null;\n"CODE
HIGHtests/test_indirect_call_function_expression_shadow.py139 "function wrap(a, b){ return a || b; }\n"CODE
HIGHtests/test_indirect_call_for_of_binding_shadow.py58 " if (lookup(entry.name)) resolved.push({ entry });\n"CODE
HIGHtests/test_indirect_call_for_of_binding_shadow.py76 " out.push({ entry });\n"CODE
HIGHtests/test_indirect_call_for_of_binding_shadow.py92 " for (const entry of rows) { out.push({ entry }); }\n"CODE
HIGHtests/test_js_exported_scalar_bindings.py73export const A_MAX = Number(process.env.A_MAX || 10);STRING
HIGHtests/test_indirect_call_catch_binding_shadow.py70 " try { boom(); } catch ({ cause }) { sink.push(cause); }\n"CODE
HIGHtests/test_java_type_resolution.py91 " public boolean validateCurrency(String c) { return c.length() == 3; }\n"CODE
HIGHtests/test_java_type_resolution.py217 " public Map<String, Object> lookup(Long id) { return null; }\n"CODE
HIGHtests/test_java_type_resolution.py218 " public java.util.Optional<Boolean> flag() { return null; }\n"CODE
HIGHtests/test_java_type_resolution.py246 " public OrderDto first() { return null; }\n"CODE
HIGHtests/test_languages.py507 " return null;\n"STRING
HIGHtests/test_dart.py483 context.router.push(ProfileRoute());CODE
HIGHtests/test_hook_guard.py80 "cd findings && ls", # 'find' without a trailing space is not a matchCODE
HIGHtests/test_indirect_call_external_import_shadow.py58 "Palette.tsx": "export function Palette() { return null; }\n",CODE
HIGHtests/test_indirect_call_external_import_shadow.py72 "Chart.tsx": "export function Chart() { return null; }\n",CODE
HIGHtests/test_indirect_call_external_import_shadow.py87 "export function run(sink) { sink.push(Utils); }\n"CODE
HIGHtests/test_indirect_call_external_import_shadow.py102 "export function app(sink) { sink.push(Find); }\n"CODE
HIGHtests/test_indirect_call_external_import_shadow.py120 "Palette.tsx": "export function Palette() { return null; }\n",CODE
HIGHtests/test_indirect_call_external_import_shadow.py135 "widgets.ts": "export function Widget() { return null; }\n",CODE
HIGHtests/test_indirect_call_external_import_shadow.py138 "export function host(sink) { sink.push(Widget); }\n"CODE
HIGHtests/test_indirect_call_external_import_shadow.py163 "table.ts": "export function Filter() { return null; }\n", # unrelated corpus callableCODE
HIGHtests/test_indirect_call_external_import_shadow.py168 " sink.push(Filter);\n" # external -> must NOT bind to table.ts FilterCODE
HIGHtests/test_build.py1253 the source_location shape (AST emits 'L<line>', semantic emits null)."""STRING
HIGHtests/test_hooks.py795 assert 'cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd' in scriptCODE
HIGHtests/test_hooks.py795 assert 'cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd' in scriptCODE
HIGHtests/test_js_callback_calls.py106 "function wrapper(a: unknown, b: unknown) { return a || b; }\n"CODE
HIGHtests/test_js_callback_calls.py122 "function wrapper(a: unknown, b: unknown) { return a || b; }\n"CODE
HIGHtests/test_js_callback_calls.py138 "function wrapper(a: unknown, b: unknown) { return a || b; }\n"CODE
HIGHtests/test_js_callback_calls.py141 " (alpha) => { q.push(alpha); },\n"CODE
HIGHtests/test_js_callback_calls.py156 "function wrapper(a: unknown, b: unknown) { return a || b; }\n"CODE
HIGHtests/test_js_callback_calls.py172 "function wrapper(a: unknown, b: unknown) { return a || b; }\n"CODE
HIGHtests/test_java_member_calls.py146 " { AuditLog service = null; service.charge(); }\n"CODE
HIGHtests/test_java_member_calls.py149 " new Object() { void nested() { AuditLog service = null; } };\n"CODE
HIGHtests/test_java_member_calls.py213 " void run(int value) { PaymentGateway service = null; service.charge(); }\n"CODE
HIGHtests/test_java_member_calls.py214 " void run(String value) { AuditLog service = null; service.charge(); }\n"CODE
HIGHtests/test_incremental.py116 "export function ScanScreen() {\n return null;\n}\n", encoding="utf-8"CODE
HIGHtests/test_cross_language_call_resolution.py48 " return null;\n"CODE
HIGHtests/test_extract.py1078 " render() { return null; }\n"CODE
HIGHtests/test_extract.py2637 "orlist() { helper || return 1; }\n"CODE
HIGHtests/test_extract.py2638 "andlist() { true && helper; }\n"CODE
HIGHtests/test_extract.py2642 "redir() { helper >/dev/null; }\n"CODE
HIGHtests/test_export.py1043 return s(a,b,c)*s(a,b,d) < 0 && s(c,d,a)*s(c,d,b) < 0;CODE
HIGHtests/test_export.py1076 if (!Array.isArray(h) || h.length < 1 || selfIntersects(h)) bad++;CODE
HIGHtests/test_skillgen.py457 assert gen._rm_to_remove_item("rm -f graphify-out/.needs_update 2>/dev/null || true") == (CODE
HIGHgraphify/hooks.py46 if [ -n "$_FROM_FILE" ] && [ -x "$_FROM_FILE" ] && "$_FROM_FILE" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py53 GRAPHIFY_BIN=$(command -v graphify 2>/dev/null)CODE
HIGHgraphify/hooks.py60 if [ -x "$_GFY_BINDIR/../python.exe" ] && "$_GFY_BINDIR/../python.exe" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py62 elif [ -x "$_GFY_BINDIR/python.exe" ] && "$_GFY_BINDIR/python.exe" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py112 if "$_GFY_CAND" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py121 if command -v python3 >/dev/null 2>&1 && python3 -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py121 if command -v python3 >/dev/null 2>&1 && python3 -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py123 elif command -v python >/dev/null 2>&1 && python -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py123 elif command -v python >/dev/null 2>&1 && python -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py34if [ -n "$_PINNED" ] && [ -x "$_PINNED" ] && "$_PINNED" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py91 if [ -n "$GRAPHIFY_PYTHON" ] && ! "$GRAPHIFY_PYTHON" -c "$_GFY_PROBE" 2>/dev/null; thenCODE
HIGHgraphify/hooks.py299_GFY_GITDIR=$(cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd)STRING
HIGHgraphify/hooks.py299_GFY_GITDIR=$(cd "$(git rev-parse --git-dir 2>/dev/null)" 2>/dev/null && pwd)STRING
HIGHgraphify/hooks.py300_GFY_COMMONDIR=$(cd "$(git rev-parse --git-common-dir 2>/dev/null)" 2>/dev/null && pwd)STRING
HIGHgraphify/hooks.py300_GFY_COMMONDIR=$(cd "$(git rev-parse --git-common-dir 2>/dev/null)" 2>/dev/null && pwd)STRING
41 more matches not shown…
Structural Annotation Overuse407 hits · 616 pts
SeverityFileLineSnippetContext
LOWtools/skillgen/gen.py241 "### Step 4 - Build the graph and generate outputs",CODE
LOWtools/skillgen/gen.py242 "### Step 5 - Save manifest, clean up, and report",CODE
LOWtools/skillgen/gen.py252 "### Step 4 - Build graph and cluster",CODE
LOWtools/skillgen/gen.py253 "### Step 5 - Generate report and visualization",CODE
LOWtools/skillgen/fragments/core/devin.md70### Step 1 - Ensure graphify is installedCOMMENT
LOWtools/skillgen/fragments/core/devin.md112### Step 2 - Detect filesCOMMENT
LOWtools/skillgen/fragments/core/devin.md187### Step 3 - Extract entities and relationshipsCOMMENT
LOWtools/skillgen/fragments/core/devin.md453### Step 4 - Build graph, cluster, analyze, generate outputsCOMMENT
LOWtools/skillgen/fragments/core/devin.md513### Step 5 - Label communitiesCOMMENT
LOWtools/skillgen/fragments/core/devin.md560### Step 6 - Generate Obsidian vault (opt-in) + HTMLCOMMENT
LOWtools/skillgen/fragments/core/devin.md674### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOWtools/skillgen/fragments/core/devin.md774### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOWtools/skillgen/fragments/core/devin.md794### Step 9 - Save manifest, update cost tracker, clean up, and reportCOMMENT
LOWtools/skillgen/fragments/core/core.md58### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)COMMENT
LOWtools/skillgen/fragments/core/core.md62### Step 1 - Ensure graphify is installedCOMMENT
LOWtools/skillgen/fragments/core/core.md66### Step 2 - Detect filesCOMMENT
LOWtools/skillgen/fragments/core/core.md110### Step 3 - Extract entities and relationshipsCOMMENT
LOWtools/skillgen/fragments/core/core.md328### Step 4 - Build graph, cluster, analyze, generate outputsCOMMENT
LOWtools/skillgen/fragments/core/core.md417### Step 5 - Label communitiesCOMMENT
LOWtools/skillgen/fragments/core/core.md466### Step 6 - Generate Obsidian vault (opt-in) + HTMLCOMMENT
LOWtools/skillgen/fragments/core/core.md492### Step 9 - Save manifest, update cost tracker, clean up, and reportCOMMENT
LOWtools/skillgen/fragments/core/aider.md59### Step 1 - Ensure graphify is installedCOMMENT
LOWtools/skillgen/fragments/core/aider.md99### Step 2 - Detect filesCOMMENT
LOWtools/skillgen/fragments/core/aider.md174### Step 3 - Extract entities and relationshipsCOMMENT
LOWtools/skillgen/fragments/core/aider.md388### Step 4 - Build graph, cluster, analyze, generate outputsCOMMENT
LOWtools/skillgen/fragments/core/aider.md448### Step 5 - Label communitiesCOMMENT
LOWtools/skillgen/fragments/core/aider.md495### Step 6 - Generate Obsidian vault (opt-in) + HTMLCOMMENT
LOWtools/skillgen/fragments/core/aider.md555### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOWtools/skillgen/fragments/core/aider.md656### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOWtools/skillgen/fragments/core/aider.md676### Step 9 - Save manifest, update cost tracker, clean up, and reportCOMMENT
LOW…illgen/fragments/references/shared/github-and-merge.md5### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)COMMENT
LOWtools/skillgen/fragments/references/shared/exports.md15### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOWtools/skillgen/fragments/references/shared/exports.md79### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOW…pected/graphify__skills__codex__references__exports.md15### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOW…pected/graphify__skills__codex__references__exports.md79### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOW…raphify__skills__kilo__references__github-and-merge.md5### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)COMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md61### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)COMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md65### Step 1 - Ensure graphify is installedCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md107### Step 2 - Detect filesCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md151### Step 3 - Extract entities and relationshipsCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md391### Step 4 - Build graph, cluster, analyze, generate outputsCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md480### Step 5 - Label communitiesCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md529### Step 6 - Generate Obsidian vault (opt-in) + HTMLCOMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md555### Step 9 - Save manifest, update cost tracker, clean up, and reportCOMMENT
LOW…ify__skills__opencode__references__github-and-merge.md5### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)COMMENT
LOW…hify__skills__windows__references__github-and-merge.md5### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)COMMENT
LOW…cted/graphify__skills__windows__references__exports.md15### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOW…cted/graphify__skills__windows__references__exports.md79### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOW…cted/graphify__skills__copilot__references__exports.md15### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
LOW…cted/graphify__skills__copilot__references__exports.md79### Step 8 - Token reduction benchmark (only if total_words > 5000)COMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md61### Step 0 - GitHub repos and multi-path merge (only if a URL or several paths)COMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md65### Step 1 - Ensure graphify is installedCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md134### Step 2 - Detect filesCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md178### Step 3 - Extract entities and relationshipsCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md420### Step 4 - Build graph, cluster, analyze, generate outputsCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md509### Step 5 - Label communitiesCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md558### Step 6 - Generate Obsidian vault (opt-in) + HTMLCOMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md584### Step 9 - Save manifest, update cost tracker, clean up, and reportCOMMENT
LOW…hify__skills__copilot__references__github-and-merge.md5### Step 0 - Clone GitHub repo(s) (only if a GitHub URL was given)COMMENT
LOW…ted/graphify__skills__opencode__references__exports.md15### Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag)COMMENT
347 more matches not shown…
Unused Imports589 hits · 430 pts
SeverityFileLineSnippetContext
LOWtools/skillgen/gen.py24CODE
LOWtools/skillgen/gen.py35CODE
LOWtools/skillgen/__main__.py2CODE
LOWworked/mixed-corpus/raw/build.py2CODE
LOWworked/mixed-corpus/raw/cluster.py2CODE
LOWworked/mixed-corpus/raw/analyze.py2CODE
LOWworked/example/raw/api.py5CODE
LOWworked/example/raw/api.py7CODE
LOWworked/httpx/raw/client.py7CODE
LOWworked/httpx/raw/client.py7CODE
LOWworked/httpx/raw/client.py9CODE
LOWworked/httpx/raw/client.py9CODE
LOWworked/httpx/raw/client.py10CODE
LOWworked/httpx/raw/utils.py5CODE
LOWtests/test_extract_cli.py2CODE
LOWtests/test_extract_cli.py1388CODE
LOWtests/test_csharp_partial_classes.py13CODE
LOWtests/test_csharp_enum_members.py10CODE
LOWtests/test_semantic_similarity.py5CODE
LOWtests/test_word_count_cache.py5CODE
LOWtests/test_multigraph_diagnostics.py1CODE
LOWtests/test_tree_html.py9CODE
LOWtests/test_hook_strict.py15CODE
LOWtests/test_community_labels_skill.py15CODE
LOWtests/test_codebuddy.py7CODE
LOWtests/test_pascal.py2CODE
LOWtests/test_build_merge_hyperedges_and_prune.py13CODE
LOWtests/test_dedup.py2CODE
LOWtests/test_dedup.py217CODE
LOWtests/test_symbol_resolution.py3CODE
LOWtests/test_csharp_call_site_generic_args.py16CODE
LOWtests/test_swift_import_resolution.py1CODE
LOWtests/test_js_dynamic_import_affected.py17CODE
LOWtests/bench_query_scoring.py29CODE
LOWtests/test_security.py2CODE
LOWtests/test_security.py4CODE
LOWtests/test_security.py12CODE
LOWtests/test_security.py12CODE
LOWtests/test_vue_extraction.py7CODE
LOWtests/conftest.py1CODE
LOWtests/test_scala_self_type.py13CODE
LOWtests/test_query_cli.py2CODE
LOWtests/test_semantic_id_remap_root.py10CODE
LOWtests/test_path_cli.py3CODE
LOWtests/test_path_cli.py8CODE
LOWtests/test_path_cli.py10CODE
LOWtests/test_querylog.py3CODE
LOWtests/test_hyperedge_member_shapes.py11CODE
LOWtests/test_zero_node_no_cache.py9CODE
LOWtests/test_zero_node_no_cache.py11CODE
LOWtests/test_incomplete_build_guard.py10CODE
LOWtests/test_hypergraph.py2CODE
LOWtests/test_hypergraph.py8CODE
LOWtests/test_carried_hyperedge_remap.py9CODE
LOWtests/test_ts_parse_warning.py11CODE
LOWtests/test_mcp_ingest.py2CODE
LOWtests/test_mcp_ingest.py7CODE
LOWtests/test_cross_extension_reexport_self_cycle.py17CODE
LOWtests/test_google_workspace.py1CODE
LOWtests/test_hollow_chunks_arm_shrink_guard.py12CODE
529 more matches not shown…
Excessive Try-Catch Wrapping237 hits · 213 pts
SeverityFileLineSnippetContext
LOWworked/mixed-corpus/raw/cluster.py88 except Exception:CODE
LOWworked/example/raw/parser.py77 except Exception as e:CODE
LOWworked/httpx/raw/auth.py112 except Exception:CODE
LOWworked/httpx/raw/transport.py78 except Exception as exc:CODE
LOWworked/httpx/raw/transport.py131 except Exception as exc:CODE
LOWtests/test_falkordb_integration.py43 except Exception as e: # pragma: no cover - depends on local environmentCODE
LOWtests/test_falkordb_integration.py47 except Exception as e: # pragma: no cover - depends on local environmentCODE
LOWtests/test_falkordb_integration.py58 except Exception:CODE
LOWtests/test_falkordb_integration.py63 except Exception:CODE
LOWtests/test_llm_backends.py878 except Exception:CODE
MEDIUMtests/bench_extract.py119 print(f"Error: {target} does not exist", file=sys.stderr)CODE
LOW…erpowers/plans/2026-05-04-incremental-updates-dedup.md780 except Exception as exc:CODE
LOW…erpowers/plans/2026-05-04-incremental-updates-dedup.md790 except Exception as exc:CODE
LOW…erpowers/plans/2026-05-04-incremental-updates-dedup.md841 except Exception as exc:CODE
LOW…erpowers/plans/2026-05-04-incremental-updates-dedup.md1044 except Exception as exc:CODE
LOWgraphify/build.py455 except Exception:CODE
LOWgraphify/file_slice.py237 except Exception:CODE
LOWgraphify/ingest.py112 except Exception:CODE
LOWgraphify/ingest.py179 except Exception:CODE
LOWgraphify/hooks.py181 except Exception:CODE
LOWgraphify/hooks.py186except Exception as exc:CODE
LOWgraphify/hooks.py230 except Exception:CODE
LOWgraphify/hooks.py235except Exception as exc:CODE
LOWgraphify/manifest_ingest.py64 except Exception as exc: # noqa: BLE001 — a malformed manifest must not abort extractionCODE
LOWgraphify/global_graph.py19 except Exception as exc:CODE
LOWgraphify/global_graph.py34 except Exception as rename_exc:CODE
LOWgraphify/diagnostics.py241 except Exception as exc:CODE
LOWgraphify/querylog.py79 except Exception:CODE
LOWgraphify/cache.py34except Exception:CODE
LOWgraphify/cache.py403 except Exception:CODE
LOWgraphify/cache.py1111 except Exception:CODE
MEDIUMgraphify/serve.py1477def _relay() -> None:CODE
LOWgraphify/serve.py51 except Exception:CODE
LOWgraphify/serve.py64 except Exception:CODE
LOWgraphify/serve.py1484 except Exception:CODE
LOWgraphify/serve.py1939 except Exception:CODE
LOWgraphify/serve.py1976 except Exception:CODE
LOWgraphify/serve.py2014 except Exception as exc:CODE
LOWgraphify/serve.py2039 except Exception as exc:CODE
LOWgraphify/serve.py2052 except Exception as exc:CODE
LOWgraphify/serve.py2087 except Exception:CODE
LOWgraphify/llm.py3427 except Exception:CODE
LOWgraphify/llm.py3444 except Exception as exc:CODE
LOWgraphify/llm.py53 except Exception: # network failure on first-use download, etc.CODE
LOWgraphify/llm.py242 except Exception:CODE
LOWgraphify/llm.py297 except Exception:CODE
LOWgraphify/llm.py678 except Exception: # noqa: BLE001 — one unreadable file (e.g. a malformed PDF) must not disable binding for the CODE
LOWgraphify/llm.py2010 except Exception as _exc: # noqa: BLE001 — evidence-binding is advisoryCODE
LOWgraphify/llm.py2079 except Exception:CODE
LOWgraphify/llm.py2361 except Exception as exc: # noqa: BLE001 — re-raise unless it's a known context overflow or timeoutCODE
LOWgraphify/llm.py2604 except Exception as exc: # noqa: BLE001 — caller-facing surface, log + continueCODE
LOWgraphify/llm.py2658 except Exception as _exc: # noqa: BLE001 — checkpoint is best-effortCODE
LOWgraphify/llm.py3071 except Exception:CODE
LOWgraphify/llm.py3364 except Exception as exc: # noqa: BLE001 - reported per-batch; surfaced belowCODE
LOWgraphify/multigraph_compat.py64 except Exception as exc:CODE
LOWgraphify/export.py245 except Exception:CODE
LOWgraphify/export.py250 except Exception:CODE
LOWgraphify/export.py254 except Exception:CODE
LOWgraphify/export.py260 except Exception:CODE
LOWgraphify/export.py273 except Exception:CODE
177 more matches not shown…
Deep Nesting277 hits · 196 pts
SeverityFileLineSnippetContext
LOWtools/skillgen/gen.py431CODE
LOWtools/skillgen/gen.py469CODE
LOWtools/skillgen/gen.py711CODE
LOWworked/example/raw/parser.py29CODE
LOWtests/test_pg_introspect.py16CODE
LOWtests/test_pg_introspect.py40CODE
LOWtests/test_multilang.py167CODE
LOWtests/test_multilang.py215CODE
LOWtests/test_multilang.py224CODE
LOWtests/test_skillgen.py424CODE
LOWgraphify/build.py711CODE
LOWgraphify/build.py798CODE
LOWgraphify/build.py1401CODE
LOWgraphify/build.py2001CODE
LOWgraphify/ingest.py13CODE
LOWgraphify/hooks.py419CODE
LOWgraphify/hooks.py533CODE
LOWgraphify/manifest_ingest.py115CODE
LOWgraphify/manifest_ingest.py145CODE
LOWgraphify/cargo_introspect.py47CODE
LOWgraphify/benchmark.py37CODE
LOWgraphify/security.py103CODE
LOWgraphify/csharp_dispatch.py66CODE
LOWgraphify/cache.py44CODE
LOWgraphify/cache.py328CODE
LOWgraphify/cache.py428CODE
LOWgraphify/cache.py572CODE
LOWgraphify/cache.py1359CODE
LOWgraphify/cache.py1621CODE
LOWgraphify/serve.py262CODE
LOWgraphify/serve.py290CODE
LOWgraphify/serve.py462CODE
LOWgraphify/serve.py924CODE
LOWgraphify/serve.py982CODE
LOWgraphify/serve.py1249CODE
LOWgraphify/serve.py1365CODE
LOWgraphify/serve.py1466CODE
LOWgraphify/serve.py1508CODE
LOWgraphify/serve.py1477CODE
LOWgraphify/serve.py1992CODE
LOWgraphify/llm.py265CODE
LOWgraphify/llm.py1029CODE
LOWgraphify/llm.py1345CODE
LOWgraphify/llm.py1885CODE
LOWgraphify/llm.py2231CODE
LOWgraphify/llm.py2506CODE
LOWgraphify/llm.py2826CODE
LOWgraphify/export.py36CODE
LOWgraphify/export.py126CODE
LOWgraphify/export.py266CODE
LOWgraphify/ruby_resolution.py53CODE
LOWgraphify/validate.py10CODE
LOWgraphify/callflow_html.py582CODE
LOWgraphify/cross_repo_types.py32CODE
LOWgraphify/cli.py160CODE
LOWgraphify/cli.py649CODE
LOWgraphify/cli.py680CODE
LOWgraphify/cli.py930CODE
LOWgraphify/dedup.py463CODE
LOWgraphify/dedup.py503CODE
217 more matches not shown…
Over-Commented Block176 hits · 146 pts
SeverityFileLineSnippetContext
LOWpyproject.toml81# extract_pascal() uses tree-sitter-pascal for AST-quality extraction (moreCOMMENT
LOWtools/skillgen/platforms.toml1# skillgen platform manifestCOMMENT
LOWtools/skillgen/platforms.toml21# dispatch Part-B dispatch fragment basename under fragments/dispatch/.COMMENT
LOWtools/skillgen/gen.py41FRAGMENTS_DIR = SKILLGEN_DIR / "fragments"COMMENT
LOWtools/skillgen/gen.py61 """The git ref for a split host's own pre-split skill body."""COMMENT
LOWtools/skillgen/gen.py141_QUERY_REFERENCE = "references/query/default.md"COMMENT
LOWtools/skillgen/gen.py201#COMMENT
LOWtools/skillgen/gen.py221# lives in the core or a reference under the new heading; the audit confirmsCOMMENT
LOWtools/skillgen/gen.py361#COMMENT
LOWtools/skillgen/fragments/core/core.md501# Save manifest for --updateCOMMENT
LOWtools/skillgen/fragments/references/shared/update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…n/expected/graphify__skills__pi__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-trae.md561from datetime import datetime, timezoneCOMMENT
LOW…pected/graphify__skills__vscode__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-windows.md601#COMMENT
LOWtools/skillgen/expected/graphify__skill.md561import jsonCOMMENT
LOW…pected/graphify__skills__agents__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…expected/graphify__skills__trae__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…xpected/graphify__skills__codex__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-kilo.md561import jsonCOMMENT
LOW…cted/graphify__skills__opencode__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…pected/graphify__skills__claude__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…expected/graphify__skills__kilo__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-droid.md561from graphify.detect import save_manifestCOMMENT
LOW…expected/graphify__skills__kiro__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…xpected/graphify__skills__droid__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-kiro.md561import jsonCOMMENT
LOWtools/skillgen/expected/graphify__skill-opencode.md561# In --update mode, 'all_files' carries the full corpus; 'files' is the changedCOMMENT
LOWtools/skillgen/expected/graphify__skill-pi.md561import jsonCOMMENT
LOW…ected/graphify__skills__copilot__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-copilot.md561import jsonCOMMENT
LOWtools/skillgen/expected/graphify__skill-vscode.md561COMMENT
LOWtools/skillgen/expected/graphify__skill-agents.md561from graphify.detect import save_manifestCOMMENT
LOWtools/skillgen/expected/graphify__skill-claw.md561import jsonCOMMENT
LOWtools/skillgen/expected/graphify__skill-codex.md561from graphify.detect import save_manifestCOMMENT
LOW…ected/graphify__skills__windows__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOW…/expected/graphify__skills__amp__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtools/skillgen/expected/graphify__skill-amp.md561from graphify.detect import save_manifestCOMMENT
LOW…expected/graphify__skills__claw__references__update.md141# prior run's baseline (prevents ghost-node reports on subsequent updates).COMMENT
LOWtests/test_cross_extension_reexport_self_cycle.py161 assert not self_loops, f"unexpected self-loop among siblings; got {self_loops}"COMMENT
LOWtests/test_detect.py1781 # "token_config.yaml": "token" followed by "_" (not alpha) → flagged.COMMENT
LOWtests/test_build.py1561 ],COMMENT
LOW.github/workflows/publish.yml1name: Publish to PyPICOMMENT
LOWgraphify/build.py1# assemble node+edge dicts into a NetworkX graph, preserving edge directionCOMMENT
LOWgraphify/build.py641 # build directory into node IDs when updated on Windows (#2618).COMMENT
LOWgraphify/build.py981 # uses bare-stem IDs (bpe_get_pairs) — different IDs, same symbol.COMMENT
LOWgraphify/build.py1001 attrs = G.nodes[nid]COMMENT
LOWgraphify/build.py1061COMMENT
LOWgraphify/build.py1081 # re-keying aid instead of a silent cross-file (and cross-language) merge.COMMENT
LOWgraphify/build.py1161 tgt = norm_to_id.get(_normalize_id(tgt), tgt)COMMENT
LOWgraphify/build.py1221 and src_ext and tgt_ext and src_fam != tgt_famCOMMENT
LOWgraphify/build.py1241 # causing display functions to show edges backwards.COMMENT
LOWgraphify/build.py1681 # Re-extracted files REPLACE their prior contribution. Every source_fileCOMMENT
LOWgraphify/build.py1861 if edges_to_remove:COMMENT
LOWgraphify/build.py1941COMMENT
LOWgraphify/file_slice.py21COMMENT
LOWgraphify/skill-windows.md601#COMMENT
LOWgraphify/hooks.py21# _PINNED was recorded at hook-install time; tried first so the hook works evenCOMMENT
LOWgraphify/skill-trae.md561from datetime import datetime, timezoneCOMMENT
LOWgraphify/paths.py101 _atomic_replace(path, lambda f: json.dump(obj, f, indent=indent, ensure_ascii=ensure_ascii))COMMENT
116 more matches not shown…
Modern AI Meta-Vocabulary13 hits · 40 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md334- Fix: the `claude-cli` backend now reads the CLI's structured-output channel instead of trusting free-form prose (#2076CODE
MEDIUMtests/test_claude_cli_backend.py243# Newer Claude Code CLIs treat a bare file-dump prompt as an agentic task andCOMMENT
MEDIUMtests/test_llm_backends.py736# `chat_template_kwargs.enable_thinking=false` or the model emits chain-of-thoughtCOMMENT
MEDIUMtests/test_llm_backends.py280 # produce when a chunk overflows the model's context window.COMMENT
MEDIUMtests/test_llm_backends.py879 pass # mock scaffolding may not be complete; we only care about the callCODE
MEDIUMtests/test_labeling.py248# 16k context window of self-hosted reasoning models (Qwen3, Llama-3.1 8B).COMMENT
MEDIUMgraphify/llm.py1022# Reasoning models (nemotron, deepseek-r1, qwq, …) emit their chain of thoughtCOMMENT
MEDIUMgraphify/llm.py1682 # object directly. The <untrusted_source> guardrails in _extraction_systemCOMMENT
MEDIUMgraphify/llm.py1722 # agentic task and REPORT the extraction in prose ("Knowledge graphCOMMENT
MEDIUMgraphify/llm.py2074 # looks like. The chunk then blows the context window and falls intoCOMMENT
MEDIUMgraphify/llm.py3137# When graphify runs inside an orchestrating agent (Claude Code / Gemini CLI),COMMENT
MEDIUMgraphify/cli.py2086 # standalone there is no orchestrating agent to do skill.md Step 5, soCOMMENT
MEDIUMgraphify/extractors/bash.py126 # Cross-file resolution scaffolding consumed by resolve_bash_source_edges inCOMMENT
Verbosity Indicators13 hits · 26 pts
SeverityFileLineSnippetContext
LOWtests/test_pipeline.py25 # Step 1: detectCOMMENT
LOWtests/test_pipeline.py31 # Step 2: extract (AST only - no LLM)COMMENT
LOWtests/test_pipeline.py38 # Step 3: buildCOMMENT
LOWtests/test_pipeline.py43 # Step 4: clusterCOMMENT
LOWtests/test_pipeline.py51 # Step 5: analyzeCOMMENT
LOWtests/test_pipeline.py63 # Step 6: reportCOMMENT
LOWtests/test_pipeline.py70 # Step 7: export - JSONCOMMENT
LOWtests/test_pipeline.py78 # Step 8: export - HTMLCOMMENT
LOWtests/test_pipeline.py86 # Step 9: export - Obsidian vaultCOMMENT
LOWgraphify/paths.py284 # Step 2: path proximity over the survivors.COMMENT
LOWgraphify/analyze.py669 # Step 1: Build a directed file-level graph from import/re-export edges.COMMENT
LOWgraphify/analyze.py710 # Step 2: Find simple cycles, bounded by length.COMMENT
LOWgraphify/analyze.py722 # Step 3: Sort by length (shortest = tightest coupling), then deduplicate.COMMENT
Fake / Example Data31 hits · 26 pts
SeverityFileLineSnippetContext
LOWtests/test_extract_cli.py67 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py127 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py180 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py246 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py315 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py368 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py485 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py553 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py600 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py636 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py1394 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py1522 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_extract_cli.py1582 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_dedup.py972 {"id": "acme_corp_one", "label": "Acme Corp",CODE
LOWtests/test_dedup.py974 {"id": "acme_corp_two", "label": "Acme Corp",CODE
LOWtests/test_dedup.py969 survivor: {'Acme Corp' doc1, 'Acme Corp' doc2, 'Acme Corp.' doc3} allSTRING
LOWtests/test_incomplete_build_guard.py42 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_incomplete_build_guard.py128 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_hollow_chunks_arm_shrink_guard.py40 monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test-fake-key")CODE
LOWtests/test_detect.py2760 doc_path.write_bytes(b"placeholder")CODE
LOWtests/test_llm_backends.py206 big.write_text(("# Section\n\n" + "lorem ipsum dolor sit amet " * 60 + "\n\n") * 30)CODE
LOWtests/test_llm_backends.py206 big.write_text(("# Section\n\n" + "lorem ipsum dolor sit amet " * 60 + "\n\n") * 30)CODE
LOWtests/test_llm_backends.py1270 "https://api.moonshot.ai/v1", "fake-key", "kimi-k2",CODE
LOWtests/test_llm_backends.py1298 monkeypatch.setattr(llm, "_get_backend_api_key", lambda _b: "fake-key")CODE
LOWtests/test_llm_backends.py1326 monkeypatch.setattr(llm, "_get_backend_api_key", lambda _b: "fake-key")CODE
LOWtests/test_labeling.py199 assert source == "placeholder"CODE
LOWtests/test_labeling.py207 assert source == "placeholder"CODE
LOWtests/test_file_slice.py28 text = ("# Heading\n\n" + "lorem ipsum " * 40 + "\n\n") * 20CODE
LOWgraphify/llm.py3436 return _placeholder_community_labels(communities), "placeholder"CODE
LOWgraphify/llm.py3451 return _placeholder_community_labels(communities), "placeholder"CODE
LOWgraphify/llm.py3423 ``"placeholder"``. Never raises."""STRING
Overly Generic Function Names12 hits · 11 pts
SeverityFileLineSnippetContext
LOWworked/httpx/raw/transport.py13 def handle_request(self, request: Request) -> Response:CODE
LOWworked/httpx/raw/transport.py70 def handle_request(self, request: Request) -> Response:CODE
LOWworked/httpx/raw/transport.py112 def handle_request(self, request: Request) -> Response:CODE
LOWworked/httpx/raw/transport.py126 def handle_request(self, request: Request) -> Response:CODE
LOWtests/test_watch.py2087 (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8")CODE
LOWtests/test_watch.py2142 (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8")CODE
LOWtests/test_watch.py2168 (corpus / "b.py").write_text("def helper():\n return 2\n", encoding="utf-8")CODE
LOWtests/test_rationale.py193 def helper() -> int:CODE
LOWtests/test_src_layout_import_resolution.py21 "mypkg/helpers.py": "def helper():\n return 1\n",CODE
LOWtests/test_incremental.py318 (pkg / "b.py").write_text("def helper():\n return 1\n")CODE
LOWtests/test_case_sensitive_resolution.py70 "h.py": "def helper():\n return 1\n",CODE
LOWtests/test_python_import_resolution.py51 target = _write(tmp_path / "pkg" / "sibling.py", "def helper():\n return 1\n")CODE
AI Slop Vocabulary4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_languages.py2368 # More robust: no target should contain a brace characterCOMMENT
MEDIUMtests/test_hook_guard.py21# Direct-call harness: hermetic w.r.t. the ambient GRAPHIFY_OUT env.COMMENT
MEDIUMgraphify/extract.py6625 # path.name)``). Resolving file membership by that shared string is robustCOMMENT
LOWgraphify/extract.py1589 # Edge target already a real node - just add the edge, don't add a node.COMMENT
Modern Structural Boilerplate6 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/test_word_count_cache.py13def _settle(path: Path) -> None:CODE
LOWtests/test_stat_index_portability.py61def _settle(path: Path) -> None:CODE
LOWtests/test_hooks.py380def _set_hookspath(repo: Path, value: str) -> None:CODE
LOWgraphify/manifest_ingest.py25__all__ = ["is_package_manifest_path", "extract_package_manifest", "PACKAGE_MANIFEST_NAMES"]CODE
LOWgraphify/manifest.py4__all__ = ["save_manifest", "load_manifest", "detect_incremental"]CODE
LOWgraphify/ids.py47__all__ = ["normalize_id", "make_id"]CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWgraphify/detect.py527 # Check if it's a converted paperCOMMENT
LOWgraphify/extractors/bash.py392 # Check if the leading variable is trackedCOMMENT
LOWgraphify/extractors/dart.py36 # Check if this is a part-of file and redirect to parentCOMMENT
AI Structural Patterns6 hits · 3 pts
SeverityFileLineSnippetContext
LOWtests/test_prs.py29CODE
LOWgraphify/cache.py1359CODE
LOWgraphify/serve.py2259CODE
LOWgraphify/llm.py2506CODE
LOWgraphify/callflow_html.py1608CODE
LOWgraphify/callflow_html.py1543CODE