{"record":{"id":"6cbab647265c5cc5","repo":"deepseek-ai/deepseek-harness","slug":"search-failed","errorCode":"SEARCH_FAILED","errorMessage":"${toolName} could not start its search command (ripgrep launch failed)","messagePattern":"(.+?) could not start its search command \\(ripgrep launch failed\\)","errorType":"exception","errorClass":"SearchError","httpStatus":null,"severity":"error","filePath":"packages/fs/tool-fs-search/src/search-core.ts","lineNumber":252,"sourceCode":"      stdio: {\n        stdin: 'ignore',\n        stdout: { maxBytes: rawOutputMaxBytes },\n        stderr: { maxBytes: stderrMaxBytes },\n      },\n      graceMs,\n      signal: exec.signal,\n    } satisfies SubprocessSpawnSpec)\n  } catch (error: unknown) {\n    // Node's spawn() throws synchronously for a NUL in argv, and the local\n    // impl can throw synchronously when the signal aborts between the check\n    // above and this call (or when the platform-package resolution rejects).\n    // The static narrowing that proves this re-check \"always false\" cannot\n    // see AbortSignal state changes.\n    // oxlint-disable-next-line typescript/no-unnecessary-condition\n    if (exec.signal.aborted) {\n      throw new SearchError(`${toolName} was aborted before completion (tool timeout or caller cancellation)`, 'SEARCH_ABORTED')\n    }\n    throw new SearchError(`${toolName} could not start its search command (ripgrep launch failed)`, 'SEARCH_FAILED', { cause: error })\n  }\n  let outcome: SubprocessOutcome\n  try {\n    outcome = await handle.done\n  } catch (error: unknown) {\n    throw new SearchError(`${toolName} could not start its search command (ripgrep launch failed)`, 'SEARCH_FAILED', { cause: error })\n  }\n  const stdout = handle.collected.stdout?.readFrom(0)\n  const stderr = handle.collected.stderr?.readFrom(0)\n  if (stdout === undefined || stderr === undefined) {\n    throw new SearchError(`${toolName} search command produced no collected output streams`, 'SEARCH_FAILED')\n  }\n  // The signal can abort while the spawn is awaited; the static narrowing that\n  // proves this re-check \"always false\" cannot see AbortSignal state changes.\n  // oxlint-disable-next-line typescript/no-unnecessary-condition\n  if (exec.signal.aborted) {\n    throw new SearchError(`${toolName} was aborted before completion (tool timeout or caller cancellation)`, 'SEARCH_ABORTED')\n  }","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/fs/tool-fs-search/src/search-core.ts#L234-L270","documentation":"Error \"${toolName} could not start its search command (ripgrep launch failed)\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/fs/tool-fs-search/src/search-core.ts:252 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}