As distributed systems scale to larger sizes, the impact of crash-restart failures increases. These failures must be dealt with in a principled manner since they may result in data inconsistencies. Current solutions often prove unworkable at large scale or when the applications are distributed across enterprise boundaries. COVR avoids data inconsistencies with less coordination than other approaches, making it more suitable for modern distributed systems. More precisely, crash-restart failures and dropped or retried messages cannot result in data inconsistency among components that communicate with a COVR-compliant protocol, even if those components were independently written. This paper presents the least constraining set of rules that components must obey to be COVR-compliant, which should prove useful to designers and implementers of distributed systems and messaging infrastructures.