digraph G { initial[label="", shape="circle"]; pending[label="pending"]; dialog[label="dialog", shape="box"]; done[label="done", shape="box"]; aborted[label="aborted", shape="box", style="dashed"]; aborting[label="aborting", style="dashed"]; expired[label="expired", shape="box"]; failed[label="failed", shape="box"]; suspended[label="suspended", shape="box"]; suspended_aborting[label="suspended-aborting", shape="box", style="dashed"]; deleted[label="deleted", shape="box"]; subgraph { rank = same; done; failed; expired; aborted; } subgraph { rank = same; pending; aborting; } subgraph { rank = same; dialog; suspended; suspended_aborting; } initial->pending; pending->suspended [color="blue",label="suspend"]; pending->expired [label="expire"]; pending->dialog [color="green",label="success"]; pending->pending [color="green",label="progress"]; pending->done [color="green",label="success"]; pending->failed [color="red",label="failure"]; pending->failed [color="blue",label="fail"]; pending->aborting [color="blue",label="abort", style="dashed"]; dialog->pending [color="blue",label="OK"]; dialog->deleted [color="blue", label="delete"]; dialog->expired [label="expire"]; dialog->aborting [color="blue", label="refuse", style="dashed"]; suspended->pending [color="blue",label="resume"]; suspended->aborting [color="blue",label="abort", style="dashed"]; suspended->expired [label="expire"]; aborting->aborting [color="green",label="progress"]; aborting->aborted [color="green",label="success"]; aborting->suspended_aborting [color="blue",label="suspend"]; aborting->failed [color="red",label="failure"]; aborting->failed [color="blue",label="fail"]; suspended_aborting->aborting [color="blue",label="resume"]; suspended_aborting->failed [color="blue",label="fail"]; failed->deleted [color="blue",label="delete"]; expired->deleted [color="blue",label="delete"]; aborted->deleted [color="blue",label="delete"]; done->deleted [color="blue",label="delete"]; }