Harel's recent work (which evolve from Statecharts) is so called Scenario-based programming. If interested I follow his work very closely and showcase his techniques in this article about bthreads: https://lmatteis.github.io/react-behavioral/
Maybe I'm just super dumb but I don't get why such simple examples should be made so difficult. Take for instance the following: "Here were are introducing the 3 main critical pillars of Behavioral Programming; the request, wait and block semantics.".
Except the previous block of code does not exhibit the 'block' semantic at all.
> Try adding two X's in a row. It will not work. It's waiting for an O, and once that is triggered it waits for an X and so on.
If you try to make a move out of turn it seems like the illegal move is still "queued up" somehow. So as soon as you make a legal move the previously attempted illegal one occurs, as it's now legal.
In fact, this resulted in an interesting game where both sides won: