You're right. That's basically a move case... the two tagIDs don't match and the new node was not a new addition and the old node was not a deletion.

It does seem that if both the addition *and* the deletion seem unnecessary then we actually need to do both. I'll have to think about that.

This new code makes ordering a lot easier to reason about. I've just fixed a couple of the tests and it was just ordering changes that had no impact on behavior.

(At the moment, I'm working on fixing a test in which things are genuinely busted... this problem was neatly caught by the "apply the diffs and compare the trees" code.)