C# code graphs: what CGraph extracts, and what it misses
CGraph builds a C# code graph from classes, methods, and calls, but properties, constructors, and interfaces leave real gaps. Measured on MediatR and Polly.
CGraph builds a C# code graph from classes, methods, and calls, but properties, constructors, and interfaces leave real gaps. Measured on MediatR and Polly.
An import through an index.ts barrel used to stop at the barrel, so impact analysis never reached real users. How CGraph follows export * to the declaring file.
A call graph resolves obj.method() only when something proves what obj is. The five tiers of evidence, and why Java call sites supply it while Rust ones do not.
A wrong CALLS edge is a false dependent forever. CGraph resolves a call only when one candidate is provable, drops the rest, and counts every drop it makes.
Shape s = ...; s.area() produced no edge in CGraph, because the name was ambiguous. How interface dispatch resolves it, the overload regression it caused, and what it costs.
CGraph listed Kotlin as a supported language while extracting zero symbols from it. The cause was a tree-sitter grammar with no named fields — and what finally measured it.
Your AI agent claims it updated every call site. blastline check queries a code graph for what still references the symbol, with file:line evidence — and refuses to certify.
CGraph now extracts Rust — structs, traits, functions, and call edges including method calls — via a pinned tree-sitter grammar, with honest v1 limits.
Every CGraph answer is stamped with a merkle content root of the indexed source, and reads can pin that root — so a stale index errors instead of lying.
A safe-refactoring workflow on a real repo: pin the node with query, size the blast radius with impact, explain surprise dependents with path — before editing.
How CGraph keeps a code graph current as you edit: content-hashed fold-ins within a couple of seconds, and why a branch switch becomes one full rescan.
Which MCP tools does your coding agent actually use? CGraph records every daemon op in a ledger; cgraph stats rolls up counts, latency, and zero-hit rate.
Checkpoint a coding session into the code graph and recall it after /clear or a daemon restart. How CGraph stores durable, code-linked memory that never pollutes retrieval.
Layer prose, concepts, and design intent onto a deterministic code graph — without the binary ever calling an LLM. How CGraph plans chunks and merges host-authored semantic fragments.
Fuse per-repo code graphs into one queryable cross-service graph: declare the wire contract, anchor it to real code, and trace blast radius across services.
A localhost socket is still a trust boundary. How four latent bugs in CGraph's resident daemon survived a green test suite, and what fixing them looked like.
RAG for code: how CGraph gathers a neighborhood around a symbol and packs it into an LLM token budget with a knapsack, returning an inspectable result.
Code graphs, LSP, and ctags answer different questions about a codebase. A decision guide to when each one wins, and where the three usefully overlap.
CGraph extraction is deterministic: the same tree yields the same graph. That makes a code graph diffable in CI with the one-shot CLI and plain diff tooling.
CGraph writes the same code graph in six shapes — JSON, HTML, SVG, an Obsidian vault, Cypher, and a call-flow view. Here is when to reach for each export.
Find the blast radius of a code change in one query. CGraph keeps a resolved graph warm in a daemon, so "what breaks if I change this?" returns in about 10ms.
CGraph parses 11 languages with vendored tree-sitter grammars, then resolves imports, calls, and relations into one deterministic code graph. Stage by stage.
CGraph is an open-source code-intelligence engine that builds a queryable graph of any repository — a self-hosted alternative to proprietary code-search and analysis tools.