Skip to content

fix(graph): don't lose dependents within the depth limit to edge order (#1974) - #2000

Merged
colbymchenry merged 1 commit into
mainfrom
fix/1974-impact-depth
Sep 27, 2026
Merged

colbymchenry merged 1 commit into
mainfrom
fix/1974-impact-depth

Conversation

@colbymchenry

Copy link
Copy Markdown
Owner

Carries @danusha2345's #1991 onto current main (their commits, authorship preserved; the CHANGELOG entry is collected separately to avoid conflicts between the fix PRs).

Validation

Fixes #1974

🤖 Generated with Claude Code

#1974)

getImpactRadius, getCallers and getCallees are depth-limited DFS walks
with one visited set. A node first reached through a longer path at the
depth limit was marked visited without being expanded, so when a shorter
path reached it later it was skipped and its own dependents within the
limit were lost. Record the shallowest depth each node was expanded at
and expand it again when a nearer path reaches it. Results and edges are
still reported once, and output order is unchanged where nothing was
missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit ec56377)
@colbymchenry
colbymchenry merged commit 52df4d2 into main Sep 27, 2026
@colbymchenry
colbymchenry deleted the fix/1974-impact-depth branch October 10, 2026 06:15
colbymchenry pushed a commit that referenced this pull request Oct 31, 2026
The impact walk had no limit, so one call on a heavily referenced symbol could
load every transitive dependent into the query worker or the MCP process, and
a large enough answer could run the process out of memory.

getImpactRadius now takes a node and edge budget, 10,000 nodes and 50,000
edges by default, merged into the depth-aware walk from PR #2000. Re-expanding
a node from a nearer depth is still allowed; only new nodes and new edges spend
the budget. Edge reads are limited in SQL with one row over the budget, so
hitting it can be told from an exact fit. codegraph_impact says when the answer
was truncated and suggests `file` or a smaller `depth`.

Changed on top of the PR:
- codegraph_impact uses the same budget as the library. The PR gave MCP 1,000
  nodes and 5,000 edges, but that truncated 25 of 75 busy-symbol queries on
  excalidraw, a mid-sized repo, and dropped direct dependents an answer shows
  today (the walk is depth-first, so a capped walk favours its first branches).
- `codegraph impact` says so too, in its text and as `truncated` in --json.
  Without this the CLI would have stopped at the limit silently.

Validation:
- Red on main: 6 of 6 dependents past a budget of 3, 10,051 nodes from the CLI,
  and no truncation note.
- Same answers: codegraph_impact on the 25 busiest symbols of excalidraw, gin
  and flask at depth 2, 3 and 5 gave byte-identical text on both arms (225 of
  225).
- A synthetic graph with 60 callers per node, depth 3: 219,661 nodes, 174 ms,
  76 MB of heap and 155 MB RSS on main; 10,000 nodes, 8 ms, 4 MB and 59 MB here.

Original PR #1583 by @danusha2345.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

impact --depth N misses dependents within N hops (depth-limited DFS marks nodes visited at the limit)

1 participant