The Knock-on Simulator
Ask what happens if we act — before acting. simulate_intervention() applies do(X=x) on the approved graph, fits a mechanism per node from as-of data (DoWhy-GCM — or uses asserted elasticities, labeled assumed), and draws interventional samples. Back comes the ripple: every downstream variable, with an interval and the causal path it travelled.
The ripple, not a point
Cut the discount tier and the report reads: win rate −2.1pp [±1.4], gross margin +3.4pp [±0.9], revenue net +$210k [−40k, +485k]. Each effect carries the path it took through the graph and every assumption on that path — fit from data, or assumed and labeled as such. Nothing arrives unattributed.
Honest uncertainty, suggested experiments
When an interval is too wide to act on, the simulator says so and names the experiment that would narrow it — here, A/B the cut in one segment for sixty days. Wide intervals are information, not failure; the dishonest version is the point estimate that hides them.

