now .set() callback is exception safe. and, can set default value when exception happened
update doc and history