Thanks for running the code and checking this so closely. You’re right. The current simulator assumes the key stays valid and doesn’t model expiry. Kreout’s example makes that limitation clear.
Your earlier point about unresolved cases is fair too. I’ll clarify the reporting so readers can distinguish a correct final state from recovery that’s still marked unresolved, alongside whether the retry was justified.
For expiry, I’d make retention part of the contract and vary the timing across scenarios. That’s an extension we haven’t tested yet