TODO ==== Model as state history of immutable objects ------------------------------------------- 1. Model gets delta from AllWatcher 2. Entity type+id in the delta uniquely identifies an entity in the model 3. The model keeps a history deque for each of these entities 4. The new delta is appended to the deque for this entity 5. When a new python object is created for this entitiy, it: a. Registers an observer with the model so it'll get change callbacks b. Gets its state from a pointer back to the last item in the model's history deque for this entity c. Has a previous() method that returns a copy of the object at its previous frame of history (or None if no previous history exists). This object would be disconnected (would not receive live updates from the model). Make model-changing methods (like deploy()) return the appropriate object ------------------------------------------------------------------------- For objects being added (newly created), this will require that the method doesn't return until the AllWatcher returns a delta containing an id for the newly created thing. Add a LogWatcher coroutine that yields from debug-log api ---------------------------------------------------------