the specification is very vague about this but part of the reason is there is no consensus
you basically have to assume two things:
1. anything you publish is probably picked up immediately and stored by somebody
2. any delete or replace event is probably not going to be acted upon by somebody
this is why fiatjaf and the general consensus among everyone who understands the protocol is that delete just doesn't work
i'm one of the small number who points out that the very concept of replacement should involve a reference to chain them and that deleting should not be all or nothing but moving old versions to a state where they can be deleted but usually not immediately
most of the nostr devs do not really understand distributed systems theory adequately, and i'm not a competent expert but they mostly understand less than me (i've been working on distributed systems since 2018 pretty much full time)
anyhow, i hope that helps