Repository Analysis

Lum1104/Understand-Anything

Graphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.

4.0 Likely human-written View on GitHub
4.0
Adjusted Score
4.0
Raw Score
100%
Time Factor
2026-05-26
Last Push
45,883
Stars
TypeScript
Language
94,709
Lines of Code
351
Files
201
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 5MEDIUM 86LOW 110

Pattern Findings

201 matches across 10 categories. Click a row to expand file-level details.

Decorative Section Separators76 hits · 248 pts
SeverityFileLineSnippet
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx80// ── Helper components that must live inside <ReactFlow> ────────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx209// ── Overview level: layers as cluster nodes ────────────────────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx331// ── Layer detail level: topology (ELK Stage 1) + visual overlay ─────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx657 // ── Async ELK Stage 1 layout ────────────────────────────────────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx775 // ── Stage 2: lazy per-container layout on expand ───────────────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx1020 // ── Container visual overlay flags (Task 14) ────────────────────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx1297// ── Main inner component (must be inside ReactFlowProvider) ────────────
MEDIUM…plugin/packages/dashboard/src/components/GraphView.tsx1389 // ── Auto-expand triggers (Task 13) ─────────────────────────────────────
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py25# ---------------------------------------------------------------------------
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py27# ---------------------------------------------------------------------------
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py69# ---------------------------------------------------------------------------
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py71# ---------------------------------------------------------------------------
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py88# ---------------------------------------------------------------------------
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py90# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py22# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py24# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py34# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py36# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py72# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py74# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py166# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py168# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py197# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py199# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py219# ---------------------------------------------------------------------------
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py221# ---------------------------------------------------------------------------
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py722# ── Main merge + normalize ────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py727 # ── Pattern counters for "Fixed" report ──────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py731 # ── Detail lists for "Could not fix" report ──────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py734 # ── Step 1: Combine all nodes and edges ──────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py744 # ── Step 2: Normalize node IDs and build ID mapping ──────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py796 # ── Step 5: Deduplicate nodes by ID (keep last) ─────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py805 # ── Step 5b: Deterministic tested_by linker ──────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py811 # ── Step 6: Deduplicate edges, drop dangling ─────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py30# ── Configuration ─────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py81# ── tested_by linker configuration ────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py132# ── Batch loading ─────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py152# ── ID normalization ──────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py252# ── Deterministic tested_by linker ────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py355 # ── JS/TS family ──────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py385 # ── Go ────────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py390 # ── Python ────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py414 # ── Java ──────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py432 # ── Kotlin ────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py448 # ── C# ────────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py495 # ── C/C++ ─────────────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py768 # ── Step 3: Normalize complexity ─────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py784 # ── Step 4: Rewrite edge references ──────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py838 # ── Build report ─────────────────────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py911# ── Imports-edge recovery from importMap ──────────────────────────────────
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py1001# ── Main ──────────────────────────────────────────────────────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py55 # ── Pattern counters for "Fixed" report ──────────────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py58 # ── Detail lists for "Could not fix" report ──────────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py64 # ── Nodes: deduplicate by id, later occurrence wins ───────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py106 # ── Layers: merge by id, union nodeIds ────────────────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py127 # ── Tour: concatenate, merge steps with same title ─────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py158 # ── Project metadata: merge ───────────────────────────────────────
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py183 # ── Build report ─────────────────────────────────────────────────
MEDIUM…gin/skills/understand-domain/extract-domain-context.py22# ── Configuration ──────────────────────────────────────────────────────────
MEDIUM…gin/skills/understand-domain/extract-domain-context.py68# ── Entry point detection patterns ─────────────────────────────────────────
16 more matches not shown…
Hyper-Verbose Identifiers84 hits · 67 pts
SeverityFileLineSnippet
LOWunderstand-anything-plugin/packages/core/src/schema.ts447function buildInvalidCollectionIssue(name: string): GraphIssue {
LOW…-anything-plugin/packages/core/src/ignore-generator.ts61export function generateStarterIgnoreFile(projectRoot: string): string {
LOW…packages/core/src/plugins/extractors/java-extractor.ts68function extractScopedIdentifierPath(node: TreeSitterNode): string {
LOW…/plugins/extractors/__tests__/python-extractor.test.ts162class DataProcessor:
LOW…g-plugin/packages/core/src/analyzer/language-lesson.ts112export function buildLanguageLessonPrompt(
LOW…g-plugin/packages/core/src/analyzer/language-lesson.ts178export function parseLanguageLessonResponse(
LOW…ng-plugin/packages/core/src/analyzer/tour-generator.ts7export function buildTourGenerationPrompt(graph: KnowledgeGraph): string {
LOW…ng-plugin/packages/core/src/analyzer/tour-generator.ts70export function parseTourGenerationResponse(response: string): TourStep[] {
LOW…hing-plugin/packages/core/src/analyzer/llm-analyzer.ts48export function buildProjectSummaryPrompt(
LOW…hing-plugin/packages/core/src/analyzer/llm-analyzer.ts102export function parseFileAnalysisResponse(
LOW…hing-plugin/packages/core/src/analyzer/llm-analyzer.ts148export function parseProjectSummaryResponse(
LOW…ng-plugin/packages/core/src/analyzer/layer-detector.ts150export function buildLayerDetectionPrompt(graph: KnowledgeGraph): string {
LOW…ng-plugin/packages/core/src/analyzer/layer-detector.ts177export function parseLayerDetectionResponse(
LOW…hing-plugin/packages/dashboard/src/utils/containers.ts77function shouldFallbackToCommunity(
LOW…nything-plugin/skills/understand/merge-batch-graphs.py331def _js_ts_sibling_candidates(dir_path: str, base_stem: str) -> list[str]:
LOW…nything-plugin/skills/understand/merge-batch-graphs.py913def recover_imports_from_scan(
LOWtests/skill/understand/test_merge_batch_graphs.py209 def test_js_ts_test_subdir_walkout(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py217 def test_python_in_package_tests_walkout(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py226 def test_csharp_tests_subdir_mirror_to_src(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py263 def test_priority_mirrored_tree_sibling_before_mirror(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py278 def test_basic_pairing_emits_forward_edge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py68 def test_js_ts_sibling_test_extensions(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py85 def test_underscore_test_dir_with_test_extension(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py89 def test_tests_directory_with_test_extension(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py123 def test_production_files_rejected(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py140 def test_helper_in_tests_dir_without_test_extension_is_not_test(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py167 def test_underscore_tests_dir(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py242 def test_csharp_dotnet_sibling_project_mirror(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py252 def test_priority_underscore_tests_sibling_before_walkup(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py302 def test_no_production_counterpart_no_edge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py315 def test_inverted_llm_edge_is_swapped_not_stripped(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py350 def test_canonical_llm_edge_kept_unchanged(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py377 def test_drops_test_to_test_edge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py402 def test_drops_orphan_endpoint_edge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py423 def test_dup_keeps_higher_weight_canonical(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py443 def test_dup_lighter_inverted_dropped_no_swap_counted(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py468 def test_dup_replaces_with_heavier_inverted(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py493 def test_dup_swapped_then_canonical_heavier_clears_swapped_count(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py515 def test_dup_two_inverted_keeps_heavier_swapped_once(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py539 def test_drops_duplicate_canonical_edges(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py573 def test_supplement_skips_pair_already_covered_by_llm(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py607 def test_swap_recovers_real_world_one_test_many_production(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py650 def test_unrelated_edges_pass_through(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py680 def test_direction_always_forward_production_to_test(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py728 def test_first_matching_candidate_wins(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py750 def test_does_not_match_test_to_test(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py764 def test_does_not_duplicate_existing_tag(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py785 def test_node_without_filepath_falls_back_to_id(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py805 def test_malformed_tags_is_replaced_not_crashed(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py833 def test_linker_runs_during_merge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py883 def test_missing_defaults_to_forward(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py887 def test_valid_values_pass_through(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py900 def test_unknown_values_fall_back_to_forward(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py914 def test_missing_direction_is_persisted_as_forward(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py930 def test_alias_is_canonicalized_before_dedup(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py989 def test_two_parts_of_one_logical_batch_merge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py1006 def test_three_parts_of_one_logical_batch_merge(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py1016 def test_malformed_part_is_skipped_with_warning(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py1029 def test_mixed_single_and_multi_part(self) -> None:
LOWtests/skill/understand/test_merge_batch_graphs.py1046 def test_missing_part_emits_warning(self) -> None:
24 more matches not shown…
Cross-Language Confusion (JS/TS)4 hits · 20 pts
SeverityFileLineSnippet
HIGH…/plugins/extractors/__tests__/python-extractor.test.ts69 print(name)
HIGH…/plugins/extractors/__tests__/python-extractor.test.ts557print("hello")
HIGH…/plugins/extractors/__tests__/python-extractor.test.ts614 return None
HIGH…/plugins/extractors/__tests__/python-extractor.test.ts621 print(args, kwargs)
Excessive Try-Catch Wrapping11 hits · 19 pts
SeverityFileLineSnippet
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py97 print(f"Error: {manifest_path} not found. Run parse-knowledge-base.py first.",
MEDIUM…n/skills/understand-knowledge/merge-knowledge-graph.py390 print(f"Error: {root} is not a directory", file=sys.stderr)
MEDIUM…in/skills/understand-knowledge/parse-knowledge-base.py489 print(f"Error: {root} is not a directory", file=sys.stderr)
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py1012 print(f"Error: {intermediate_dir} does not exist", file=sys.stderr)
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py1023 print("Error: no batch-*.json files found in intermediate/", file=sys.stderr)
MEDIUM…nything-plugin/skills/understand/merge-batch-graphs.py1102 print("Error: no valid batch files loaded", file=sys.stderr)
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py244 print(f"Error: {ua_dir} does not exist", file=sys.stderr)
MEDIUM…ing-plugin/skills/understand/merge-subdomain-graphs.py280 print("Error: no valid subdomain graphs loaded", file=sys.stderr)
MEDIUM…gin/skills/understand-domain/extract-domain-context.py383 print(f"Error: {project_root} is not a directory", file=sys.stderr)
LOW…gin/skills/understand-domain/extract-domain-context.py422 except Exception as e:
MEDIUM…gin/skills/understand-domain/extract-domain-context.py423 print(f"Error: {e}", file=sys.stderr)
Deep Nesting11 hits · 10 pts
SeverityFileLineSnippet
LOW…n/skills/understand-knowledge/merge-knowledge-graph.py92
LOW…in/skills/understand-knowledge/parse-knowledge-base.py113
LOW…in/skills/understand-knowledge/parse-knowledge-base.py278
LOW…nything-plugin/skills/understand/merge-batch-graphs.py224
LOW…nything-plugin/skills/understand/merge-batch-graphs.py340
LOW…nything-plugin/skills/understand/merge-batch-graphs.py556
LOW…ing-plugin/skills/understand/merge-subdomain-graphs.py52
LOW…gin/skills/understand-domain/extract-domain-context.py151
LOW…gin/skills/understand-domain/extract-domain-context.py197
LOW…gin/skills/understand-domain/extract-domain-context.py306
LOW…gin/skills/understand-domain/extract-domain-context.py159
Over-Commented Block6 hits · 5 pts
SeverityFileLineSnippet
LOWinstall.sh1#!/usr/bin/env bash
LOWunderstand-anything-plugin/hooks/auto-update-prompt.md101// The script should:
LOW…plugin/packages/dashboard/src/components/GraphView.tsx1181 diffContainers,
LOW…nything-plugin/skills/understand/merge-batch-graphs.py261# saw an import / using / same-package call). We just flip direction
LOW…nything-plugin/skills/understand/merge-batch-graphs.py601 if is_test_path(path):
LOW…uperpowers/specs/2026-04-10-understandignore-design.md161# Built-in defaults (always excluded unless negated):
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippet
HIGH…/superpowers/plans/2026-03-14-phase3-implementation.md968**Context:** Users should be able to click "Explain" on any node to get a detailed plain-English explanation generated b
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippet
LOW…n/skills/understand-knowledge/merge-knowledge-graph.py205 # Step 1: Build entity/claim → article mapping from edges
LOW…n/skills/understand-knowledge/merge-knowledge-graph.py216 # Step 2: For orphan entities/claims, try to match by ID prefix
LOW…n/skills/understand-knowledge/merge-knowledge-graph.py270 # Step 3: Place children into their parent article's layer
Unused Imports4 hits · 4 pts
SeverityFileLineSnippet
LOW…n/skills/understand-knowledge/merge-knowledge-graph.py19
LOW…in/skills/understand-knowledge/parse-knowledge-base.py17
LOW…gin/skills/understand-domain/extract-domain-context.py16
LOWtests/skill/understand/test_merge_batch_graphs.py9
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippet
LOWinstall.sh4# Usage: