47c3683f23
The JSON guard in fetchJson/fetchPublicJson blamed every HTML reply on a missing backend endpoint. A 3xx HTML body is an access proxy redirecting to its login page: the endpoint exists, the credentials never arrived. Besides misleading the user, the wording is the capability signal that isMissingHealthEndpointError and the renderer's gateway-rpc predicate key on, so an auth redirect was silently classified as "endpoint missing" and routed onto compatibility paths instead of surfacing as an error. Build the error in api-transport.ts (where the sibling httpStatusError lives) and pick the hint by status: 3xx names the redirect and points at the saved token/extra headers; everything else keeps the endpoint-missing wording the predicates rely on. Part of #112072