{"record":{"id":"b6a3ff9fbe98f1d6","repo":"affaan-m/ECC","slug":"the-local-it-cli-terminated-by-signal-result-si","errorCode":null,"errorMessage":"The local Itô CLI terminated by signal ${result.signal}.","messagePattern":"The local Itô CLI terminated by signal (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/ito.js","lineNumber":292,"sourceCode":"    encoding: \"utf8\",\n    // Keep policy helpers immutable for callers, but give child-process\n    // instrumentation its own mutable copy (for example NODE_V8_COVERAGE).\n    env: { ...createSafeItoInvocationEnvironment(environment, args) },\n    stdio: isDeviceLogin ? \"inherit\" : [\"pipe\", \"pipe\", \"pipe\"],\n    maxBuffer: MAX_OUTPUT_BYTES,\n    timeout: isNodeQualification ? NODE_QUALIFICATION_TIMEOUT_MS : undefined,\n    shell: false,\n    windowsHide: true,\n  });\n\n  if (result.stdout) process.stdout.write(result.stdout);\n  if (result.stderr) process.stderr.write(result.stderr);\n  if (result.error) {\n    throw new Error(`The local Itô CLI could not be started: ${result.error.message}`);\n  }\n  if (typeof result.status === \"number\") return result.status;\n  if (result.signal) {\n    throw new Error(`The local Itô CLI terminated by signal ${result.signal}.`);\n  }\n  return 1;\n}\n\nfunction main(argv = process.argv.slice(2), environment = process.env) {\n  try {\n    const parsed = parseArgs(argv, environment);\n    if (parsed.help) {\n      showHelp();\n      return 0;\n    }\n    const executable = resolveItoExecutable(environment);\n    return invokeIto(executable, parsed.invocationArgs, environment);\n  } catch (error) {\n    console.error(`Error: ${error.message}`);\n    return 1;\n  }\n}","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/scripts/ito.js#L274-L310","documentation":"invokeIto maps the child's termination to outcomes: numeric status is returned as-is, a spawn error is thrown, and if the process died from a POSIX signal (result.signal set, no status) the bridge throws naming the signal. This means the Itô CLI was killed externally rather than exiting normally.","triggerScenarios":"Any ecc ito subcommand where the spawned CLI process receives SIGKILL/SIGTERM/SIGINT — e.g. OOM killer terminating the process, a supervisor timeout killing it, or a user Ctrl+C that lands on the child during a synchronous spawn window.","commonSituations":"Long-running `ecc ito evals` node qualification exceeding CI job timeouts; OOM on memory-constrained hosts; container runtime killing processes on shutdown; SIGKILL from cgroup memory limits.","solutions":["Identify the signal in the message (e.g. SIGKILL suggests OOM/limits, SIGTERM suggests a timeout/killer) and address that cause.","Check system logs (dmesg / journalctl) for oom-killer events; raise memory limits or reduce evals node count.","Increase the enclosing CI/timeout budget (the bridge's own node-qualification timeout is 31 minutes) so nothing SIGTERMs the child mid-run.","Re-run the command; transient external kills may simply succeed on retry."],"exampleFix":"// before (CI kills after 10m)\n- run: ecc ito evals --cluster c1 --live-sixtytwo --nodes n1 --config-dir cfg   # timeout: 10\n// after\n- run: ecc ito evals --cluster c1 --live-sixtytwo --nodes n1 --config-dir cfg   # timeout: 35","handlingStrategy":"retry","validationCode":"const os = require('os');\nif (os.freemem() < 512 * 1024 * 1024) console.warn('Low memory: Itô CLI may be OOM-killed');","typeGuard":null,"tryCatchPattern":"try { await invokeIto(evalsArgs); } catch (e) {\n  const m = e.message.match(/terminated by signal (\\w+)/);\n  if (m) { console.error(`Killed by ${m[1]}; check OOM/CI timeout, then retry`); }\n  else throw e;\n}","preventionTips":["Set CI job timeouts comfortably above the 31-minute node-qualification window","Monitor memory/cgroup limits; SIGKILL usually means OOM","Avoid Ctrl+C during synchronous spawn windows; interrupt ECC itself, not the child"],"tags":["process","signal","cli"],"backgroundTag":"network-request-failed","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}