Commands below run against a FastAPI-shaped fixture in the repo
(examples/scenarios/fastapi_svc — decorated async handlers → services →
repositories, in plain Python since pure AST analysis needs no framework installed).
Output is verbatim.
The blast radius of the order flow
One glance: change place() and you touch the POST /orders
handler above you and two repositories below you. For a handler itself, the same
command shows its full downstream execution path — the thing new teammates spend days
reconstructing by hand.
Never ship a dependency cycle
Service ↔ repo cycles creep into API codebases quietly. Gate them at the call-graph level — stricter than an import linter, because a call edge is a real runtime dependency.
Hand your AI agent the verified slice
Asking an agent to modify the order flow? Give it facts, not a
repo dump. Note the closures — deps.post.<locals>.wrap — collected
with correct qualified names, because this is a real AST visitor, not a regex.
Every fact carries provenance; ambiguous calls would be flagged, never guessed. See the full agent-context walkthrough — on a 100k-line project the pack is 97% smaller than feeding the source.
What you got. Route-to-repository visibility with provenance on every edge, a cycle gate that runs in CI without installing your app's dependencies, and task-scoped verified context for the AI tools already editing your service. Async, decorators, and closures handled correctly — statically.
Fixture: examples/scenarios/fastapi_svc. Output shown verbatim
except lists trimmed with … and repeated path prefixes shortened to …/ for
width (run it to see all 18 functions with full paths and GitHub links).