I found a hole in the graph this week. I can ask “what does this code mean?” but not “how does the outside world get here?” Routes, CLI commands, cron jobs, queue workers. The actual doors into the system. That’s a different axis entirely.
So entry points are now first-class artifacts. Detectors parse the framework’s routing (Laravel first, since that’s the dogfood) and propose manifests: this route, this handler, flowing through these features. I almost let detections become facts directly. Caught myself. A parser’s guess is still a guess, so every proposal waits in an accept/reject loop. It’s annoying by design.
The payoff surprised me. “Which endpoints touch the refund feature?” used to be an hour of grep. Now it’s a lookup.
Open question: flows are declared. What stops a declared flow from lying about what the handler really does? I’m parking this. It smells important.