Update brings in a *change* to a tree that is locally moved.
The starting point is: a local move from (say) A/B to X.
We design the update editor such that it brings in the new base node tree at A/B and marks a tree conflict on the move source (A/B). It does that unconditionally – even if the destination of the move has no local changes to nodes that would be affected by the incoming change, or even if the move destination has no local changes at all.
The update-move phase is called after that update phase. In the update-move phase, we will not be making any changes in the source tree (A/B), we will only use that as a source of information for one side of the diff that we need to perform.