{"record":{"id":"b31f2b8b5a7d9dd5","repo":"paperclipai/paperclip","slug":"runnerd-did-not-report-its-provider-identity","errorCode":null,"errorMessage":"runnerd did not report its provider identity","messagePattern":"runnerd did not report its provider identity","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/runnerd-codex-transport.ts","lineNumber":5532,"sourceCode":"  ): Promise<void> {\n    const deadline = Date.now() + 30_000;\n    while (Date.now() < deadline) {\n      this.#throwIfFailed();\n      this.#pumpEvents();\n      if (\n        this.#threadId.length > 0 &&\n        (this.#checkpointProviderIdentityExpectation !== null ||\n          this.#evidence.providerExecutionKind === \"remote_service\" ||\n          this.#evidence.providerPid !== null) &&\n        (expectedEventType === undefined ||\n          this.#providerIdentityEventType === expectedEventType)\n      )\n        return;\n      if (await this.#runnerHasExited())\n        throw new Error(\"runnerd exited before provider startup\");\n      await new Promise((resolveWait) => setTimeout(resolveWait, 10));\n    }\n    throw new Error(\"runnerd did not report its provider identity\");\n  }\n\n  async #waitCommand(\n    type: string,\n    commandId?: string,\n    deadline = Date.now() + 30_000,\n  ): Promise<void> {\n    while (Date.now() < deadline) {\n      this.#throwIfFailed();\n      const command =\n        commandId === undefined\n          ? this.#core?.store.state.commands.find(\n              (candidate) => candidate.type === type,\n            )\n          : this.#core?.getCommand(commandId);\n      if (command?.status === \"completed\") return;\n      if (command !== undefined && command.status !== \"pending\") {\n        throw new Error(","sourceCodeStart":5514,"sourceCodeEnd":5550,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/live/runnerd-codex-transport.ts#L5514-L5550","documentation":"Fallback error of the provider-identity wait loop: thrown when the loop exhausts its deadline without runnerd either reporting the expected provider identity or exiting. It is the timeout counterpart to \"runnerd exited before provider startup\" — the process is alive but never publishes the identity evidence the transport requires.","triggerScenarios":"Polling for provider identity (with optional `expectedEventType`) until the loop's iteration budget/deadline expires while `#runnerHasExited()` stays false and the identity evidence (providerPid + expected event type) never arrives.","commonSituations":"runnerd hung during startup; a runnerd version that emits a different identity event name than `expectedEventType`; extremely slow host where startup exceeds the wait window; identity event consumed/hidden by a protocol mismatch.","solutions":["Confirm the runnerd version emits the provider identity event type the transport expects (version-match runnerd and paperclip-runner).","Increase the wait deadline if the host is legitimately slow, or speed up runnerd startup.","Capture runnerd logs to determine whether startup is hung; restart runnerd.","If the expected event type changed in a recent upgrade, update the transport's expected event constant."],"exampleFix":"// before\nthrow new Error(\"runnerd did not report its provider identity\");\n// after\nthrow new Error(\n  `runnerd did not report its provider identity within ${deadlineMs}ms (expected event: ${expectedEventType ?? \"any\"})`,\n);","handlingStrategy":"retry","validationCode":"if (!identityEventSeenWithin(startupDeadlineMs)) logger.warn(\"runnerd provider identity not seen; startup may be hung\");","typeGuard":null,"tryCatchPattern":"try {\n  await transport.waitForProviderStartup(expectedEventType);\n} catch (err) {\n  if (err.message.includes(\"did not report its provider identity\")) {\n    await restartRunnerdAndRetry(expectedEventType);\n  } else throw err;\n}","preventionTips":["Version-match runnerd with the transport so identity event names agree.","Set wait deadlines above p99 observed startup time on your hosts.","Alert on runnerd startup duration regressions after upgrades."],"tags":["runnerd","timeout","startup","ipc"],"backgroundTag":"request-timeout","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}