v2.0.0
Every saga step now has a deadline. A stuck order reaper cancels reservations that never answer (releasing stock through the usual compensation), re-drives a silent payment once over the new order.payment_requested topic, and cancels with PAYMENT_TIMEOUT if the second deadline passes too. The payment service answers a re-drive with the outcome it already has, or attempts the payment on the spot.
GET /orders/{id}/timeline returns every step an order went through with timestamps, including late or ignored events. Unit tests: 73 (was 59).