Skip to content

Ship the analysis suite: impact, cycles, hierarchy, dead code, hotspots, and coupling - #32

Merged
Phoenixrr2113 merged 1 commit into
mainfrom
feat/batch-six-roadmap
Aug 22, 2026
Merged

Phoenixrr2113 merged 1 commit into
mainfrom
feat/batch-six-roadmap

Conversation

@Phoenixrr2113

Copy link
Copy Markdown
Owner

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

  • Blast radius and call hierarchy traverse stable symbol ids with bounded depth, diamond-safe counting, and project-boundary enforcement inside the query.
  • Import cycles are canonicalized (one report per cycle, self-imports included).
  • Dead code is presented as unreferenced-export candidates with visible caveats about dynamic use, never as a verdict; barrel-routed references do not produce false positives.
  • Hotspots and change coupling report their git-history coverage truthfully: total commits, window size, and whether truncation happened, with the numeric window named only when it did. This required the sync layer to finally record truncation truth, closing a batch-two ledger item.
  • Ownership was deferred entirely: the graph stores authors, not committers, and shipping it under the wrong name would be false.

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

  • Ownership feature awaits committer identity data and explicit history semantics.
  • The 200-commit sync window itself remains configurable-but-fixed; a time-based window is still open on the ledger.

🤖 Generated with Claude Code

…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>
@vercel

vercel Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
v0-landing-page-build Ready Ready Preview, v0 Aug 22, 2026 1:15am

@Phoenixrr2113
Phoenixrr2113 merged commit 340f22e into main Aug 22, 2026
12 checks passed
@Phoenixrr2113
Phoenixrr2113 deleted the feat/batch-six-roadmap branch August 22, 2026 01:20

This branch was successfully deployed

1 active deployment
Preview — 7fa101a0 Deployed Aug 22, 2026 by vercel[bot]
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.

1 participant