An MCP server task inherits the dashboard OAuth flow for the life of the task
(the ContextVar sits set inside the transport's auth flow), so once that handle
had ended, every retry/revival re-entered `publish_authorization_url` and got
`RuntimeError: OAuth flow already ended`. That error is transient to the connect
ladder, so the server burned all initial-connect attempts and parked
("failed initial connection after 3 attempts") -- and parked forever: no number
of reconnects could get past the same stale handle.
Re-mint the flow in place for the next authorization attempt instead of raising:
clear the ended attempt's URL, state and (spent) authorization code so the new
URL's state is the one the callback is validated against, and the SDK is never
handed a code the provider already burned. Everything stays under the flow lock,
so concurrent/re-entrant publishes leave exactly one live (url, state) pair.
A user cancellation stays terminal: `mark_error(..., cancelled=True)` (both the
dashboard DELETE route and the gateway cancel) is not re-minted by a retrying
worker -- a cancel must keep freeing the per-server slot promptly.