{"record":{"id":"14e1aa2ec38e9836","repo":"paperclipai/paperclip","slug":"prp-runtime-request-input-requestid-is-no-longe","errorCode":null,"errorMessage":"PRP runtime request ${input.requestId} is no longer pending","messagePattern":"PRP runtime request (.+?) is no longer pending","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/runnerd-codex-transport.ts","lineNumber":3730,"sourceCode":"            .catch(() => undefined);\n        }\n        this.#failTransport(failure);\n      }\n      throw failure;\n    }\n  }\n\n  async resolveRuntimeRequest(input: {\n    requestId: string;\n    turnId: string;\n    resolution: HarnessRuntimeRequestResolution;\n  }): Promise<void> {\n    if (this.#pendingWarmRecoveryCompletion !== null) {\n      throw new Error(\"native_runner_warm_transition_completion_pending\");\n    }\n    const pending = this.#bridgedRuntimeInputs.get(input.requestId);\n    if (!pending)\n      throw new Error(\n        `PRP runtime request ${input.requestId} is no longer pending`,\n      );\n    if (!(\"response\" in input.resolution)) {\n      throw new Error(\n        \"runnerd-native runtime requests require a canonical question response\",\n      );\n    }\n    const commandId = `command_runtime_input_${createHash(\"sha256\")\n      .update(`${input.requestId}:${pending.durableTurnId}`)\n      .digest(\"hex\")\n      .slice(0, 24)}`;\n    await this.#command(\n      \"request.resolve\",\n      {\n        requestId: input.requestId,\n        turnId: pending.durableTurnId,\n        response: input.resolution.response,\n      },","sourceCodeStart":3712,"sourceCodeEnd":3748,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/live/runnerd-codex-transport.ts#L3712-L3748","documentation":"Thrown when resolveRuntimeRequest cannot find the given requestId among the bridged runtime inputs. The runtime question was already resolved, cancelled, or never registered on this transport, so there is nothing to resolve. The message includes the offending requestId for correlation.","triggerScenarios":"Calling resolveRuntimeRequest with a requestId that is not present in #bridgedRuntimeInputs — e.g. a duplicate resolution, a resolution after the turn was torn down, or a stale/cross-runner requestId.","commonSituations":"Double-click/double-submit of a question answer in the UI; answering a question after the turn ended or the runner restarted; sending a resolution captured on one runner to a different (recovered) runner instance.","solutions":["Check that the requestId matches a currently pending runtime input on this transport","Treat the error as benign if the question was already resolved and skip re-resolution","Refresh the pending-question list from the runner before answering after a reconnect or recovery","Ensure only one component owns resolution of a given runtime request"],"exampleFix":"// before\nawait transport.resolveRuntimeRequest({ requestId, turnId, resolution });\n// after\nconst pending = transport.getPendingRuntimeInput(requestId);\nif (!pending) {\n  console.warn(`Skipping already-resolved runtime request ${requestId}`);\n  return;\n}\nawait transport.resolveRuntimeRequest({ requestId, turnId, resolution });","handlingStrategy":"validation","validationCode":"if (!transport.getPendingRuntimeInput?.(requestId)) {\n  console.warn(`runtime request ${requestId} no longer pending; skipping`);\n  return;\n}","typeGuard":"null","tryCatchPattern":"try {\n  await transport.resolveRuntimeRequest({ requestId, turnId, resolution });\n} catch (err) {\n  if (err instanceof Error && err.message.includes(\"is no longer pending\")) {\n    return; // already resolved or torn down — idempotent no-op\n  }\n  throw err;\n}","preventionTips":["Track resolved requestIds locally and skip duplicates","Refresh pending questions after reconnect/recovery before answering","Ensure single owner of question resolution per turn"],"tags":["stale-state","idempotency","turn-lifecycle"],"backgroundTag":"record-not-found","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}