[feat] expose .changed() in .afterUpdate hooks, closes #2674