Timeout 재배정 — Attempt=2 승격

deadline 만료로 A의 attempt=1을 expired 처리하고 Reassigned push → B로 재제안 → Delivered

Timeout 재배정 — Attempt=2 승격 deadline 만료로 A의 attempt=1을 expired 처리하고 Reassigned push → B로 재제안 → Delivered CreateDeliveryReq(delivery-reassign) OfferDeliveryMsg(attempt=1) deadline 만료 → DeliveryStatusChangedReq(Reassigned) DeliveryStatusChangedRes DeliveryStatusUpdatedMsg DeliveryStatusNotify DeliveryStatusNotify(Reassigned) OfferDeliveryMsg(attempt=2) OfferDeliveryNotify OfferDeliveryNotify CourierDecisionMsg(accepted=true) CourierDecisionMsg OfferDeliveryResultMsg(attempt=2) DeliveryStatusChangedReq(Accepted) DeliveryStatusChangedRes DeliveryStatusChangedReq(Delivered) DeliveryStatusChangedRes DeliveryStatusUpdatedMsg(Delivered) DeliveryStatusNotify DeliveryStatusNotify(Delivered) Customer Client · Sequence participant Customer Client Dispatch · Sequence participant Dispatch Tracking · Sequence participant Tracking CourierActor A · Sequence participant CourierActor A CourierActor B · Sequence participant CourierActor B Courier Client B · Sequence participant Courier Client B CourierSession · Sequence participant CourierSession CustomerActor · Sequence participant CustomerActor CustomerGateway · Sequence participant CustomerGateway

deadline 만료와 stale decision (원문 Note·후속 문단)

  • • 원문 `Note over D`: deadline expires and attempt 1 is marked expired — Dispatch sweeper가 현재 기록을 Expired로 바꾸고 B를 다음 후보로 선택한다. (archify sequence는 note를 렌더하지 않아 세 번째 메시지 label과 이 카드로 보존한다.)
  • • attempt 2가 시작된 뒤 도착한 A의 결정은 stale decision으로 기록되고 상태에 영향이 없다. 후보가 더 남지 않으면 Dispatch가 Failed를 기록하고 terminal 상태를 보낸다.

재배정 경로

  • • 상태 push는 Tracking이 CustomerActor로 보내고, actor가 bound CustomerGateway session으로 push한다 (§7.1·실제 샘플 코드 sendToActor와 동일 — 원문 mermaid가 CustomerActor를 빠뜨린 것을 코드 기준으로 정정)
  • • 재배정 순서 검증: Assigned, Reassigned, Accepted, Delivered 순서와 Accepted 이후 courier가 B인지 확인한다.