{"record":{"id":"c1f74599980299f5","repo":"remix-run/remix","slug":"rmx-route-map-loader-signal-c1f745","errorCode":"RMX_ROUTE_MAP_LOADER_SIGNAL","errorMessage":"Route-map loader exited from signal ${signal}.","messagePattern":"Route-map loader exited from signal (.+?)\\.","errorType":"exception","errorClass":"CliError","httpStatus":null,"severity":"error","filePath":"packages/cli/src/lib/route-map.ts","lineNumber":122,"sourceCode":"  child.stdout.on('data', (chunk: string) => {\n    stdout += chunk\n  })\n\n  child.stderr.on('data', (chunk: string) => {\n    stderr += chunk\n  })\n\n  let exitResult = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>(\n    (resolve, reject) => {\n      child.once('error', reject)\n      child.once('close', (code, signal) => {\n        resolve({ code, signal })\n      })\n    },\n  )\n\n  if (exitResult.signal != null) {\n    throw routeMapLoaderSignal(exitResult.signal)\n  }\n\n  if (exitResult.code !== 0) {\n    let message = stderr.trim()\n    if (message.length === 0) {\n      message = 'Route-map loader failed.'\n    }\n\n    throw routeMapLoaderFailed(message)\n  }\n\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(stdout)\n  } catch {\n    throw routeMapLoaderInvalidJson()\n  }\n","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/remix-run/remix/blob/9696913134be3a4423513d2775f7b31d6917c049/packages/cli/src/lib/route-map.ts#L104-L140","documentation":"loadRawRouteMap spawns a child process to load the route map; if that child exits because it received a signal (e.g. SIGKILL, SIGTERM) rather than exiting normally, this error is thrown with the signal name.","triggerScenarios":"The route-map loader subprocess being killed by a signal: OOM killer (SIGKILL), user Ctrl-C propagation, test-runner timeouts killing children, or process-tree cleanup in CI.","commonSituations":"Memory-constrained CI containers where the loader is OOM-killed; tooling that sends SIGTERM to the whole process tree on timeout.","solutions":["Re-run the command to rule out a transient kill","Check memory limits (dmesg / CI logs) for OOM kills and raise limits if needed","Disable or raise test/CI timeouts that kill child processes","Ensure no wrapper script is forwarding signals to the CLI's children"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (error) {\n  if (error instanceof Error && error.code === 'RMX_ROUTE_MAP_LOADER_SIGNAL') {\n    // transient (OOM/timeout): retry once with backoff\n  }\n  throw error\n}","preventionTips":["Give CI containers enough memory for the route-map loader","Avoid process-tree-killing timeouts around route-map commands"],"tags":["cli","routes","subprocess","signal"],"backgroundTag":"subprocess-killed-by-signal","analyzedSha":"9696913134be3a4423513d2775f7b31d6917c049","analyzedAt":"2026-08-27T19:55:01.024Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}