`update` is not part of the protocol, it's `update*`.  `update` is just a regular function that calls `update*`.  

`update*` has to have a specific signature, see `katello.ui/CRUD`.  It takes the old and new records.  What I normally do in the implementation is use `clojure.data/diff` to find the differences (fields that were added/changed/removed) and go from there.