Ship the analysis suite: impact, cycles, hierarchy, dead code, hotspots, and coupling - #32
Merged
Merged
Conversation
…ts, and coupling Six analysis features arrive behind a new analyze MCP tool, /api/analysis routes, and a dashboard Analysis tab with symbol-local Impact and Calls sections. Blast radius walks the inbound closure over stable ids with bounded depth; import cycles are canonicalized, including self-imports; call hierarchy expands callers and callees binding overloads to their implementation; unreferenced exports are presented as candidates with their caveats stated, not as verdicts; hotspots and change coupling are computed from indexed git history that now reports its own coverage truthfully: total commits, window size, and whether truncation actually happened, with the numeric window named only when it did. Ownership was deliberately deferred because the graph stores authors, not committers, and shipping it under the wrong name would lie. Every traversal enforces the target's project boundary from inside the query, every response carries normalized inputs, truncation flags, and user-facing caveat strings, and the same question through the service, the route, and the persona returns the same answer, held together by a 66-assertion cross-surface harness. Also fixed here after live use caught it: vector search threw away the whole response when an embedded File node appeared in the hits, because Files carry a derived identity rather than a persisted symbol id. File rows now derive their canonical id at the mapping boundary. This bug shipped with the identity redesign and is fixed on top of it. One adversarial review round found three blocker classes, all repaired red-first and re-verified against the reviewer's own harness. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
What this ships
The final batch of the pre-launch campaign: six analysis features on top of the now-trustworthy graph, exposed through a new analyze MCP tool (impact, import_cycles, call_hierarchy, dead_code, hotspots, change_coupling), REST routes under /api/analysis, and a dashboard Analysis tab plus symbol-local Impact and Calls sections.
Honesty as the feature spec
Also fixed: search dying on embedded File nodes
Live use (Randy testing the dashboard) caught a bug the review rounds missed: after generating embeddings for all nodes, any search whose vector hits included a File threw and killed the whole response, because Files carry the derived File: identity rather than a persisted symbol id and the identity redesign's strict validation rejected them. File rows now derive their canonical id at the mapping boundary. The bug is on main today and ships fixed here.
Review process
A scout grounded all seven candidate features against the real schema and ranked them; three groups built queries, surfaces, and routes against frozen contracts; one adversarial round ran a 66-assertion harness across service, HTTP, and MCP simultaneously and found three blocker classes (self-cycles omitted, structurally untruthful history coverage, cross-project traversal leaks), all repaired red-first and re-verified to 66/66.
Verification
pnpm turbo build 21/21, test 36/36, typecheck 20/20, release:check green and now reporting five tools. Graph 132 tests, core 271, api 239, mcp-server 105, dashboard 41.
Ledger
🤖 Generated with Claude Code