This looks great, thank you. Just want to make sure. When you call save() on the changeset, does it transfer changes to the model before actual save action on the model happens, so if it failed, changes will stay in the model?
Potentially this approach would solve the problem of accessing to clean attributes, that we solve in kinda ugly way right now. For example, if user edit their username and it’s used in the header, normally changes appear in the header as they type, but we don’t want that until we sure, that changes persisted on the server. So that would be great if we could delegate save completely to changeset so that model state would be updated only when we’re sure that it’s persisted.