Teaching Case — Two Services Waiting on Each Other
Four ordinary arrows and two ordinary activation bars. Inventory calls pricing while pricing is mid-call to inventory, and neither call is ever answered — so each is waiting for a reply that cannot arrive until it replies first. The picture is a deadlock and it is indistinguishable from a working handshake. The engine also refuses the false positive next door: a callback that IS answered — one service calling back into another mid-call and getting a reply — is ordinary and this check says nothing about it.
Make it your own.
sequence "Reservation — mutual wait"
participant Cart "Cart"
participant Inventory "Inventory"
participant Pricing "Pricing"
Cart -> Inventory : reserve(sku, 2)
Inventory -> Pricing : quote(sku, 2)
Pricing -> Inventory : stockOnHand(sku)