A parser walks the repo: gRPC/OpenAPI client imports, Kafka topics in code, DB config. Builds a declarative graph — what should talk to what. Refreshed on every merge.
The diagram
that stays true.
IcePanel shows a beautiful C4 diagram right up until someone forgets to update it by hand. Our C4 is different: code and traces refresh it on every merge. MCP for any question. JSON for any AI agent.
"A map goes stale the second you print it. A living map grows with the knowledge."
Ask the graph. Watch it answer.
One hub. Three outbound patterns.
PCI scope in one query.
Two feeds. Zero manual editing.
Aggregated spans from OTel. Shows real runtime patterns: which connections are live, which are dead code. Drift between code and production becomes visible, not buried in Confluence.
Code and traces rarely match perfectly. C4 doesn't hide that gap — it shows both feeds and the delta. Drift is a signal, not noise.
Four questions C4 answers in seconds.
Instead of a week on the wiki — one question to C4: “what do I break if I touch CardGate?” The answer is structured, current, precise.
Blast radius comes from the graph, not from memory. Every downstream effect — a ready-made paragraph for the post-mortem.
The JSON export is compact and stable. Claude, Cursor, local agents consume it as plain context. MCP — for live queries.
“Which services touch PAN?” “Which gates does card data flow through?” — one query instead of a week of meetings.
Three honest objections. Three honest answers.
Static analysis can't find dynamic calls.
That's why there's a second feed — traces. Code gives you the declaration, traces give you runtime truth. C4 surfaces both and the delta between them.
We already have IcePanel.
Great — IcePanel stays the UI. C4 is the MCP layer underneath. Agent-ready: JSON instead of clicks. The IcePanel diagram updates from the same graph.
Won't this just add another stale artifact?
Artifacts go stale when they're updated by hand. C4 is a pipeline, not an artifact. Every merge refreshes the code feed, every hour refreshes the trace feed. Stale means a broken pipeline, not a forgotten wiki.