Verified against Semitexa Ultimate 2026.09.30.1034
Browsing the Graph
The project graph can be read without a query: the Observatory has a Graph view, and ai:review-graph:show writes the same view to a single file.
In the Observatory
Open /__observatory and switch the header from live to graph (or press g). The view is available in dev mode only: it maps the application's internals, so monitor mode gets no switch, no viewer assets and no data.
| Part | What it shows |
|---|---|
| Entry points | Routes, commands and handlers. A route expands to its payload, the payload to its handler, the handler to what it depends on. Children load on expand. A class reached from more than one place carries a ×N badge; a loop stops with ↺; ⚠ marks a file with coverage gaps. |
| Focus | The selected node's dependencies, 1–4 steps deep, each class drawn once. Dependents are on the left, dependencies on the right, and a node's height grows with its fan-in across the whole graph. Amber edges close a loop; dashed edges and ghost nodes are references resolved only at runtime. Click inspects a node, double-click refocuses. |
| Node | Every edge in both directions, the coverage gaps in the node's file, the source link, and the recent recorded traces that ran the class. |
| Findings | The same unused classes and loops ai:review-graph:findings prints, each focusing its node, with the coverage line that says how far "no finding" can be trusted. |
Search (/) jumps to a class and opens the tree along the shortest path from an entry point. The address keeps the selection (/__observatory#graph=<node id>), so a link opens the same node.
The trace viewer links back: a class page under /__trace/node has open in graph. Going the other way, "recent traces" lists requests recorded with ?__trace=1; an empty list means no persisted trace names the class, not that it never ran.
When the code has changed since the graph was built, the view says stale. Rebuild with:
bin/semitexa ai:review-graph:generate
As a file
bin/semitexa ai:review-graph:show --format=html --output=var/tmp/graph.html
bin/semitexa ai:review-graph:show --format=html --output=var/tmp/orders.html --module=Orders
bin/semitexa ai:review-graph:show --format=html --output=var/tmp/focus.html --depth=2 'App\Orders\PlaceOrderHandler'
The file carries the viewer and the data inline and fetches nothing, so it opens from file:// — attach it to a pull request and a reviewer needs no running stack. The command prints the size: a focus is a few hundred kilobytes, the whole graph of a large project several megabytes, so filter when sharing. Recent traces are not part of a file.