Wed Aug 23 18:37:59 EDT 2017

Current UI model

Controller state:
- type and state of each input
- add hoc state, accumulated during edits
- presentation model

Controller flow:
- event comes in, state gets updated (also type-checked)
- add hoc changes are made based on edit
- presentation model is regenerated
- PM is diffed against previously stored value
- diff is converted to View update commands

- initialized from initial controller state
- each widget sends input change events to controller
- view exposes stateful update events
- view has local cache for constant data(*)

(*) is really a special case to avoid having to diff very large data
structures for data that never changes.  could be part of diff just as