Good summary, thanks, and important.
This is hard because the server has no idea whether a game is running.
Existing architecture: The server collects and relays ready status. When the server believes that everybody is ready, the server sends everybody an extra packet to start the game. Afterwards, the server relays plies (assignments and nukes by the players) and ready status -- because the server has no idea when the game is finished.
Ideas: First, the server should remember all plies.
Then, we must think how to separate one game A from the next game B. Certainly, the server will still know when B starts. But the new observer may join after A's players have all returned to the lobby, which the server does not know in the existing architecture.
The server has no idea when overtime starts because the server does not understand level files (he treats level files as an uninterpreted array of bytes) or game rules (the server mindlessly relays plies).
This is now
github issue #393.
-- Simon