Quick answer: Unity NavMeshAgent stuck mid-jump on an OffMeshLink after a runtime rebake? The agent's link reference goes stale - call CompleteOffMeshLink() and ResetPath() after BuildNavMesh.

A door opens mid-traversal: rebuilding the navmesh strands the agent on the now-invalid OffMeshLink with isOnOffMeshLink == true forever.

Reset agents after rebake

foreach (var a in agents) {
  if (a.isOnOffMeshLink) a.CompleteOffMeshLink();
  a.ResetPath();
}

Run this immediately after NavMeshSurface.BuildNavMesh(). The link reference held by the agent is by index, and the rebake invalidates indices.

Or rebake incrementally

Use UpdateNavMesh(NavMeshData, NavMeshBuildSource[]) with only the changed sources. The agent's links stay valid across this path because the full surface isn't reallocated.

Re-acquire destinations

After the reset, re-issue SetDestination(). The agent's old destination is in pre-rebake world coordinates conceptually - it tends to repath to the wrong corridor.

“Runtime navmesh rebake is a sledgehammer. Agents need to be told before you swing.”

For shipping titles, batch your nav changes into discrete events (door opens, bridge collapses) and rebake at those moments rather than every frame.