Code that sleeps for a month: Solving durable execution's immutability problem
restate.dev
restate.dev
But you are right; it's very hard to reason about testing such systems, since you may have accumulated state which causes your handler logic to behave differently. The problem exists in service architectures in general though, it's just very hard to miss with intentionally delayed processing.