Trace topology
A single HTTP request fans out across actions, events, reactions, and projection writes — every step inherits the same envelope.correlationId and links back to its parent via causationId. That two-field chain is what lets Studio (and nwire trace) reconstruct an entire call graph from any node in the tree.
What ties the graph together:
envelope.correlationId— same value across every node in the tree. This is the public handle you pass tonwire trace.envelope.causationId— points at the immediate parent. Studio uses this to render the tree.envelope.tenant— propagated unchanged so multi-tenant traces stay scoped.
Every node above is also a telemetry event, so you can replay the same graph from the recorded stream offline.