children* returns [:key node] rather than node, separate update-children
reversed logic reducing overhead