In itself it is probably a good idea to sanitise whatever is returned as a final game state in the sense that it is probably irrelevant what the bots said in their last step and what the shadow positions are (this strictly belongs to the "RUNNING" game and should be extracted separately); maybe even the positions are irrelevant.
Neither do we need to include layout data and timeout times (unless we want to for clarity), which are strictly configuration.
More important, however, would be to not include the socket information of the teams (and viewers/controllers) as they cannot be serialised (sockets, zmq context) and having a live reference to the Team around means that the Team.__del__ method is never called (which cleans up any remaining traces of processes and sockets).