Repository navigation
task: Parsing & extraction quality — language/format coverage gaps #592
Description
Scope
Umbrella tracker for graph extraction quality — language/format coverage gaps, missing node/edge kinds, and extraction false positives. These are not crashes (see the stability/performance umbrellas) but cases where indexing succeeds yet the resulting graph is shallow, mistyped, or wrong.
Sub-issues
Language coverage / LSP depth
- Java: @Annotation, signatures, and all AST properties missing from graph nodes #382 — Java:
@Annotation, signatures, and AST properties missing from graph nodes - Rust LSP #405 — Rust LSP (hybrid-LSP tier resolution)
- Feature Request: Add Hybrid LSP support for Julia #535 — Hybrid LSP support for Julia
- Enhancement: index inner declarations of factory/setup callbacks — Vue Pinia setup stores, composables & React hooks (the Vue/React twin of the tracked Zustand gap) #415 — Index inner declarations of factory/setup callbacks (Vue Pinia setup stores, composables, React hooks)
Format / IaC / config extraction
- feat: GitHub Actions semantic extraction — workflows, jobs, steps, uses/needs edges #450 — GitHub Actions semantic extraction (workflows, jobs, steps, uses/needs edges)
- feat(python): class-field nodes, type-annotation edges, and enum members #451 — Python class-field nodes, type-annotation edges, enum members
- feat: Terraform module composition edges + block-type labels (Resource/DataSource/Module/Variable/Output) #452 — Terraform module composition edges + block-type labels
- feat(helm): nested .Values linkage, template→kind typing, image/env + hook/RBAC edges #454 — Helm nested
.Valueslinkage, template→kind typing, image/env + hook/RBAC edges
Correctness / false positives
- cfg-gated twin functions collapse into one node; get_code_snippet returns the inactive branch's body #495 — cfg-gated twin functions collapse into one node;
get_code_snippetreturns inactive branch - Route nodes created from URL strings in config / non-source files #521 — Route nodes created from URL strings in config / non-source files
Content / docs indexing (BM25)
- Index documents as well #490 — Index documents as well
- Section nodes don't index body text — BM25 can't search markdown content #518 — Section nodes don't index body text — BM25 can't search markdown content
- META.yaml/frontmatter description values not indexed for BM25 search #519 — META.yaml / frontmatter description values not indexed for BM25
Tracked via open PR (not part of this task's open work)
- Cross-file CALLS edges resolve to Module node instead of caller Function node (v0.7.0) #438 / C++ out-of-line method definitions: CALLS edge source falls back to Module (file-level) instead of the enclosing Method #554 — cross-file & C++ out-of-line CALLS edges resolve to Module instead of the enclosing function — PR fix(extract): attribute C/C++ CALLS edges to the enclosing function #463
- Add Perl LSP-tier semantic resolution (perl_lsp.c) #459 — Perl LSP-tier semantic resolution — PR feat(perl-lsp): Perl LSP-tier semantic resolution (Closes #459) #461
- Feature request: ObjectScript (InterSystems IRIS) language support #462 — ObjectScript (InterSystems IRIS) language support — PR feat(objectscript): InterSystems IRIS ObjectScript language support #467 / chore(vendor): vendor the InterSystems ObjectScript tree-sitter grammars #590
- Add cross-repo Maven library dependency links #440 — cross-repo Maven library dependency links — PR feat(cross-repo): link Maven library dependencies #442
- SQL DDL is under-modeled: CREATE TABLE/VIEW become generic Variable nodes with no lineage #574 — SQL DDL Table/View nodes + FROM/JOIN lineage — PR feat(sql): first-class Table/View nodes and FROM/JOIN lineage edges #582
- Extract dbt {% macro %} definitions from raw .sql models #575 — dbt lineage/macros from raw
.sql— PR feat(dbt): extract dbt Jinja lineage and macros from raw .sql models #584 - Ingest dbt manifest.json into Model/Source nodes + DEPENDS_ON lineage #576 — dbt
manifest.jsoningest + DEPENDS_ON — PR feat(dbt): add ingest_dbt_manifest tool for Model/Source nodes and DEPENDS_ON lineage #583
Acceptance
Per item: the missing nodes/edges are emitted (or the false positive is suppressed), with a reproduce-first test on a public fixture, or the item is closed with rationale (out of scope / by design).
Why one task
These share the extraction pipeline (tree-sitter queries + hybrid-LSP resolvers + node/edge emission). Triaging them together keeps language/format coverage coherent instead of scattered one-off queries.
Added 2026-06-29 (triage)
Language coverage / LSP depth
- Add Oracle PL/SQL support #669 — Oracle PL/SQL support
- C/C++ CALLS edges are attributed to the File/Module, not the enclosing function — callers are file-level, callees are empty (Python is correct) #694 — C/C++
CALLSedges attributed to File/Module instead of enclosing function
Routes, cross-repo, and protocol extraction
- Go services get 0 cross-repo edges (Fiber route paths empty, gRPC not captured) #686 — Go Fiber route paths empty and gRPC not captured; cross-repo edges stay zero
- cross-repo-intelligence: 0 edges for FastAPI backend — Route.path empty, router prefix stripped #678 — FastAPI
Route.pathempty and router prefix stripped - feat(pipeline): NATS subject detection for cross-repo ASYNC_CALLS edges (Tier 2 follow-up to #292) #652 — NATS subject detection for cross-repo
ASYNC_CALLSedges - cross-repo-intelligence returns 0 edges for a byte-identical call/route #523 — cross-repo-intelligence returns zero edges for byte-identical call/route
- Add cross-repo Maven library dependency links #440 — cross-repo Maven library dependency links
Framework extraction and false positives
- Windows: tree-sitter definitions pass fails on ALL files when repo_path contains non-ASCII (CJK / Cyrillic / Arabic / accented Latin / etc.) characters #636 — Windows non-ASCII repo paths make tree-sitter definitions fail on every file
- [bug] PHP: framework/core method calls ($storage->load()) become false-positive CALLS edges to same-named project methods — same class as the (fixed) Perl #476 #606 — PHP framework/core method calls become false-positive project
CALLSedges - Django REST Framework ViewSet routes miss HANDLES mappings #603 — Django REST Framework ViewSet routes miss
HANDLESmappings - [feature] Add a statement-scoped
orm_call_in_loopsignal (so N+1 detection doesn't false-positive on pre-materialized lists) #600 — statement-scopedorm_call_in_loopsignal for N+1 detection - [bug]
self_recursive/unguarded_recursionmatch calls by bare name →super().save()and same-named wrappers are false positives #599 — recursion detector matches by bare name and flagssuper()/ wrapper calls - [bug] Route extractor over-fits: GraphQL query literals, whole config-file contents, and regex literals become
Routenodes #598 — route extractor over-fits GraphQL, config, and regex literals as Route nodes - Bug: File parsing fails silently on Windows when project path contains accented/non-ASCII characters #700 — duplicate/evidence case: Windows accented path creates File nodes but no Function/Class extraction (see Windows: tree-sitter definitions pass fails on ALL files when repo_path contains non-ASCII (CJK / Cyrillic / Arabic / accented Latin / etc.) characters #636)
Added 2026-06-30 (triage)
- Python parser hangs on deeply chained method calls during definitions pass #710 — Python deep chained call expression hangs definitions pass
- cross-repo HTTP edges missing when caller URL is a constant #706 — caller-side URL constants prevent
HTTP_CALLS/ cross-repo edges - VB6 .frm/.cls misclassified as FORM/Apex; .bas/.ctl unmapped; no Visual Basic language #721 — VB6
.frm/.clsextension collisions misclassify files as FORM/Apex - function "spans" #718 — VB/VB6 function bodies collapse to declaration-only spans
Added 2026-07-01 (triage)
- Java/Spring: class-level @RequestMapping prefix dropped from Route nodes — breaks cross-repo-intelligence for prefixed controllers #734 — Spring class-level
@RequestMappingprefix dropped from emitted Route paths - cross repo intelligence on kinesis stream usage #733 — Kinesis stream producer/consumer detection for cross-repo async edges
- codebase-memory graph it doesn't resolve TypeScript aliases like @packages/shared #730 — TypeScript
pathsaliases unresolved, causing fake dead-code results
Added 2026-07-09 (triage)
- Next.js App Router: app/**/route.ts handlers produce 0 Route nodes, so cross-repo-intelligence finds no edges #759 — Next.js App Router: app/**/route.ts handlers produce 0 Route nodes
- Angular component sibling files (ts/html/scss) merged into one File node; search_code silently incomplete #769 — Angular component sibling files (ts/html/scss) merged into one File node; search_code silently incomplete
- trace_path returns 0 callers for functions called via CommonJS require() — CALLS edge not created #871 — trace_path returns 0 callers for functions called via CommonJS require()
- PHP/Laravel: routes inside Route::prefix()->group() produce no Route nodes #952 — PHP/Laravel: routes inside Route::prefix()->group() produce no Route nodes
- cross-repo-intelligence: gRPC route identities are project/namespace-prefixed, so CROSS_GRPC_CALLS can never match across languages #953 — cross-repo-intelligence: gRPC route identities are project/namespace-prefixed, CROSS_GRPC_CALLS can never match
- C extractor: functions with #ifdef-split braces are dropped from the graph (no Function node) #961 — C extractor: #ifdef-split-brace functions dropped (partially addressed: mcp: make cbm_path_within_root parseable without the preprocessor #960 fixed cbm_path_within_root; fix(cpp): remap recovered definitions to original lines #949 in review recovers callables via the preprocessor pass; coverage signal Best-effort indexing-coverage signal: mark files/regions that were not fully indexed #963 now detects the class)
(#946 C++ parse → PR #949; #964 include→IMPORTS → PR #983 — tracked in their PRs.)
Added 2026-08-03 (triage)
- semantic_query returns noise: a nonsense token outranks a relevant one (0.9.0 and 0.9.1-rc.1) #1417 — semantic_query ranking lets nonsense outrank a relevant symbol
- Vue SFC
<script setup>blocks are never parsed — silent empty graph for.vuefiles, causing false-positive dead code #1410 — Vue<script setup>produces an empty symbol graph - Indexing gap - "instanceof" #1409 — Java 21 record-pattern instanceof extraction gap
- C# overloaded methods not indexed #1407 — C# overloads collapse because method identity omits signature/arity
- fast mode silently excludes
scripts/— first-class Python source dropped from graph (built-in skip list?) #1406 — fast mode silently excludes first-class source under scripts/ - feat: Add .gobra file support (Go verification language) #1405 — Gobra language-support request
- semantic_query is English-only: non-Latin queries score negative against every node #1402 — multilingual semantic-query quality and fallback strategy
- search_graph: non-ASCII queries return noise, and docstrings are never indexed #1401 — non-ASCII BM25 quality and missing docstring search content
- TypeScript: cross-file method calls produce no CALLS edge — type-aware tier resolves same-file calls only, so trace_path(inbound) returns 0 callers #1354 — TypeScript cross-file method calls lose CALLS edges
Activity
test: address DeusData review feedback on DeusData#699
test: address DeusData review feedback on DeusData#699
fix(extract): flag TS/JS member calls with non-this receivers as meth…
fix(pipeline): classify native fetch() as HTTP_CALLS, not local shadows
/api) not composed onto routes from routes/api.php #114614 remaining items
feat(lsp): resolve cross-file base classes for the Python/TS cross-LSP
fix(pipeline): suppress weak short-name matches for Go selector calls
fix(pipeline): suppress weak short-name matches for Go selector calls
fix(pipeline): run the external-import guard after route classification
fix(scala): suppress weak short-name matches for receiver calls
fix(scala): suppress weak short-name matches for receiver calls
fix(scala): suppress weak short-name matches for receiver calls
fix(scala): suppress weak short-name matches for receiver calls
fix(pipeline): suppress weak short-name matches for Go selector calls