strict digraph state { rank = 0 subgraph "cluster_internal_state" { rank = 1 ctr = applied start [shape=doublecircle, label="BFFH"] created [label="Machine object created"]; start -> created; created -> attach [label="New state or loaded from disk"]; attach [label="Attach actor", shape=box]; unapplied [label="Unapplied"]; applied [label="Applied"]; verified [label="Verified"]; wait_apply [label="Wait ∀ Actors", shape=box] wait_verify [label="Wait ∀ Actors", shape=box] unapplied -> wait_apply -> applied; applied -> wait_verify -> verified; applied -> unapplied [label="statechange received"]; verified -> unapplied [label="statechange received"]; unapplied -> unapplied [label="statechange received"]; unapplied -> attach -> unapplied; applied -> attach -> unapplied; verified -> attach -> unapplied; } subgraph "cluster_actor" { rank = 1 center = actor_applied actor_start [shape=doublecircle, label="Actor"]; actor_fresh [label="Actor was just constructed"]; actor_start -> actor_fresh; actor_attached [label="Attached"]; actor_unapplied [label="Unapplied"]; actor_applied [label="Applied"]; actor_verified [label="Verified"]; wait_initial [label="Recv", shape=box]; wait_state [label="Recv", shape=box]; actor_fresh -> wait_initial -> actor_attached; actor_attached -> actor_applied [label="initialize/apply"]; actor_unapplied -> actor_applied [label="apply"]; actor_applied -> actor_verified [label="verify"]; actor_unapplied -> wait_state; actor_applied -> wait_state; actor_verified -> wait_state; wait_state -> actor_unapplied; } attach -> wait_initial [label="Send initial state to that actor", style=dotted] unapplied -> wait_state [label="Send new state to all actors", style=dotted]; actor_applied -> wait_apply [label="Confirm apply", style=dotted]; actor_verified -> wait_verify [label="Confirm verify", style=dotted]; }