1 import Base 2 3 # Names the visibility boundary reached before a durability failure. 4 type Phase is Data: 5 BeforeRename{} 6 AfterRename{} 7 8 # Distinguishes a definite failure from an uncertain published result. 9 type Failure is Data: 10 KnownFailure{} 11 CommitUnknown{} 12 13 # Classifies whether a publication failure leaves destination visibility uncertain. 14 def failure(phase: Phase) -> Failure: 15 match phase: 16 case BeforeRename{}: KnownFailure{} 17 case AfterRename{}: CommitUnknown{}