Summary
codegraph_callees, codegraph_node, and similar lookup tools return Symbol "stage_apply::run" not found for a function that is in fact indexed (visible via codegraph_files at src/configurator/stage_apply.rs:43).
The bare-name form codegraph_callees run does NOT error, but silently resolves to a completely unrelated run_due_tasks function from another module. Functions with unique names in the same file (e.g., render_and_write) resolve correctly.
Root cause appears to be that the lookup vocabulary does not understand the module_path::symbol qualifier syntax that Rust (and most other languages) use to disambiguate same-named symbols across modules.
Reproduce
Tested on:
- codegraph 0.6.8
- macOS aarch64
- Node v25.5.0
Repo: https://github.com/kernex-dev/kernex-agent (Rust workspace consumer; commit 7eb5d13 is a stable target for this report).
The configurator pipeline at src/configurator/ contains seven sibling modules, each exporting pub async fn run:
stage_detect::run
stage_resolve::run
stage_review::run
stage_backup::run
stage_apply::run
stage_verify::run
stage_report::run
In a session with the codegraph MCP server:
codegraph_callees stage_apply::run
> Symbol "stage_apply::run" not found
codegraph_node stage_apply::run
> Symbol "stage_apply::run" not found
codegraph_callees run
> Symbol resolves to `run_due_tasks` (no callees returned)
codegraph_files src/configurator/stage_apply.rs
> Lists stage_apply.rs with `run` at line 43
codegraph_callees render_and_write
> Works correctly (returns `template_for`, `render`, etc.)
Expected
One of:
module_path::symbol resolution: lookup tools accept the canonical Rust-style qualifier stage_apply::run and resolve to the correct symbol.
- Disambiguated bare-name response: when a bare-name lookup is ambiguous (
run matches seven indexed symbols), return all matches with their file paths so the caller can disambiguate, rather than silently picking one.
Either fix would close this. Both would be nicer.
Why this matters
The current behavior makes codegraph less useful in Rust workspaces that use the conventional one-pub fn run-per-module pattern (sub-pipelines, plugin systems, sibling modules with consistent entry points). The user has to fall back to grep/read for these queries, which defeats the productivity claim.
The data is in the index. The lookup vocabulary is the missing piece.
Workaround
For now, work around by calling codegraph_files <path> to get the file's symbol list, then codegraph_node with whatever symbol-ID surface is available. Friction but functional.
Environment
- codegraph: 0.6.8 (installed via
npm install -g @colbymchenry/codegraph)
- Node: v25.5.0 (Homebrew)
- macOS: 14+ (Apple Silicon)
- Claude Code: 2.1.143
- Repo language: Rust (edition 2021, 1.74 MSRV)
- Index size: 59 files, 1206 nodes, 1801 edges (62 Rust, 2 Python)
Happy to provide more detail if useful. Thanks for the tool.
Summary
codegraph_callees,codegraph_node, and similar lookup tools returnSymbol "stage_apply::run" not foundfor a function that is in fact indexed (visible viacodegraph_filesatsrc/configurator/stage_apply.rs:43).The bare-name form
codegraph_callees rundoes NOT error, but silently resolves to a completely unrelatedrun_due_tasksfunction from another module. Functions with unique names in the same file (e.g.,render_and_write) resolve correctly.Root cause appears to be that the lookup vocabulary does not understand the
module_path::symbolqualifier syntax that Rust (and most other languages) use to disambiguate same-named symbols across modules.Reproduce
Tested on:
Repo: https://github.com/kernex-dev/kernex-agent (Rust workspace consumer; commit
7eb5d13is a stable target for this report).The configurator pipeline at
src/configurator/contains seven sibling modules, each exportingpub async fn run:In a session with the codegraph MCP server:
Expected
One of:
module_path::symbolresolution: lookup tools accept the canonical Rust-style qualifierstage_apply::runand resolve to the correct symbol.runmatches seven indexed symbols), return all matches with their file paths so the caller can disambiguate, rather than silently picking one.Either fix would close this. Both would be nicer.
Why this matters
The current behavior makes codegraph less useful in Rust workspaces that use the conventional one-
pub fn run-per-module pattern (sub-pipelines, plugin systems, sibling modules with consistent entry points). The user has to fall back to grep/read for these queries, which defeats the productivity claim.The data is in the index. The lookup vocabulary is the missing piece.
Workaround
For now, work around by calling
codegraph_files <path>to get the file's symbol list, thencodegraph_nodewith whatever symbol-ID surface is available. Friction but functional.Environment
npm install -g @colbymchenry/codegraph)Happy to provide more detail if useful. Thanks for the tool.