I will chime in here to say that move_basic itself is a layer above the navigation stack.
Move basic goes to a new pose only within the limits that you set in it’s launch file.
I have found that an in development version of navigation is very much better than the limits that move_basic uses. So what happens is navigation may have great accuracy to within a couple cm of final location but move_basic may think that is ‘close enough’.
My overall message here is to point out that there is the navigation stack itself and then there is the control program above it (in this case move basic) that may think ‘good enough is good enough’ and may be completely happy with 5cm final X-Y part of the desired waypoint pose. .
I hope this helps isolate the layers and how they think for your usage.