This can be replicated by setting widget expiration to 2 seconds, along with a a large maxNumber (in my case 1,000,000).
The user clicks the widget, it begins verifying, and then the challenge expires whilst the client is still calculating a solution. Once a solution is found, the client sets the state to 'Verified' despite the challenge being expired previously. (this also happens if the widget is reset prior to the solution being found)
I think function verify should check if the widget has been reset, or if the challenge had expired since the verification started, and don't set state to 'verified'