The guard is not an optimisation, it is a safety catch. A navigation that ends in a
full page load (fallback adapter, or a host page that forces a reload) destroys the
agent session; the widget then auto-resumes it, the fresh model re-reads "the visitor
asked to go to X" with no memory of having done it, and calls navigate again — an
endless reload loop, observed on a live voice call (17/09/2026). Answering "you are
already there" breaks that cycle at the only point every caller goes through, and is
the correct answer regardless: re-navigating to the current URL is never what the
caller wants.
The comparison keeps the hash, so #seccion on the current page still navigates —
that one is a scroll, not a no-op.
Navigate, unless we are already exactly there.
The guard is not an optimisation, it is a safety catch. A navigation that ends in a full page load (fallback adapter, or a host page that forces a reload) destroys the agent session; the widget then auto-resumes it, the fresh model re-reads "the visitor asked to go to X" with no memory of having done it, and calls navigate again — an endless reload loop, observed on a live voice call (17/09/2026). Answering "you are already there" breaks that cycle at the only point every caller goes through, and is the correct answer regardless: re-navigating to the current URL is never what the caller wants.
The comparison keeps the hash, so
#seccionon the current page still navigates — that one is a scroll, not a no-op.