From 3c2f8820532534a134b9e146e72b34a69cddee91 Mon Sep 17 00:00:00 2001 From: Trevin Chow Date: Thu, 29 Jan 2026 13:03:06 -0800 Subject: [PATCH] fix(gateway): only retry transient errors in run-loop, rethrow fatal errors --- src/cli/gateway-cli/run-loop.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cli/gateway-cli/run-loop.ts b/src/cli/gateway-cli/run-loop.ts index 2e7eac3a6..131b57468 100644 --- a/src/cli/gateway-cli/run-loop.ts +++ b/src/cli/gateway-cli/run-loop.ts @@ -4,6 +4,7 @@ import { consumeGatewaySigusr1RestartAuthorization, isGatewaySigusr1RestartExternallyAllowed, } from "../../infra/restart.js"; +import { isTransientNetworkError } from "../../infra/unhandled-rejections.js"; import { createSubsystemLogger } from "../../logging/subsystem.js"; import type { defaultRuntime } from "../../runtime.js"; import { calculateBackoffMs, applyJitter } from "./backoff.js"; @@ -119,7 +120,11 @@ export async function runGatewayLoop(params: { try { server = await params.start(); } catch (err) { - gatewayLog.error(`Gateway startup failed: ${String(err)}`); + // Only retry transient network errors; rethrow fatal/config errors + if (!isTransientNetworkError(err)) { + throw err; + } + gatewayLog.error(`Gateway startup failed (transient): ${String(err)}`); recordCrash({ errorType: classifyError(err), errorMessage: err instanceof Error ? err.message : String(err),