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.5

target_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.