When running an atomic execution between two subnets whose common parent orchestrating the protocol is not their own parent (i.e. the parties are not required to sync with the subnet), if the top-down message triggered after the success or abortion of the execution doesn't arrive to destination, the locked state in the subnet may be locked forever.
To solve this we could:
Require subnets to sync the state of not only the parent but all of its ancestors (so it can check if there are messages pending that couldn't be propagated). We could probably relax this requirement by just requiring to sync the latest state of ancestors and its checkpoints instead of the whole state.
Include a timer to locked states (in a common reference of time, e.g. number of epochs in the common parent). The time range for the execution can be specified when initializing the execution so if the top-down message doesn't arrive in this number of epochs, the locked state expires and is automatically unlocked. The problem with this solution is that we at least need to be polling the height of the common parent to understand how time evolves.
Use the subnet content resolution protocol to poll the state of the execution from the common parent for the case that the top-down message is not propagated.
When running an atomic execution between two subnets whose common parent orchestrating the protocol is not their own parent (i.e. the parties are not required to sync with the subnet), if the top-down message triggered after the success or abortion of the execution doesn't arrive to destination, the locked state in the subnet may be locked forever.
To solve this we could: