Repository navigation
fix(graph): don't lose dependents within the depth limit to edge order (#1974) - #2000
Merged
Merged
Conversation
#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)
This was referenced Sep 27, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
mainand passes on this branch.npx tsc --noEmitis clean.Fixes #1974
🤖 Generated with Claude Code