Quick answer: Godot 4 NavigationAgent3D target_reached signal firing well before the actual target? target_desired_distance defaults to 1.0 - tighten it or check distance manually in physics_process.
Patrolling NPC marks waypoint reached a full meter early, then teleports for animation. Reads as a glitch even though the path was correct.
Tighten the threshold
agent.target_desired_distance = 0.1
agent.path_desired_distance = 0.5target_desired_distance sets the 'I'm there' radius. The default is generous for performance - 0.1m is normal for character-scale gameplay.
Use a manual check
For tight precision, ignore the signal and check global_position.distance_to(target) yourself. The signal is convenience, not contract.
Tune path_max_distance
If the agent never reaches the target because the nav corridor is too narrow, raise path_max_distance. Otherwise the agent fails to find a path and silently aborts.
“Nav agents fire 'reached' on radius, not coordinates. Tune the radius or trust the math yourself.”
Visualize the desired distance with a debug sphere in the editor. Misjudgments stop happening when you can see the threshold.