MessageStatus and Ledger persistence

stateDiagram-v2
[*] --> Incoming: recordIncoming
[*] --> Queued: recordOutbound
Queued --> Sent: applyOutboundStatus
Queued --> Failed: applyOutboundStatus
Sent --> Delivered: remote receipt or proof
Sent --> Failed: terminal failure
Failed --> Queued: markRetryQueued

Independent persistence results

Durable means it has been persisted;Deferred means it has entered a fixed depth pending write;Rejected means it has not been accepted by the ledger. They are not MessageStatus.