{"record":{"id":"4c71739c7ee466a9","repo":"paperclipai/paperclip","slug":"native-runner-warm-transition-result-unproven","errorCode":null,"errorMessage":"native_runner_warm_transition_result_unproven","messagePattern":"native_runner_warm_transition_result_unproven","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/runnerd-codex-transport.ts","lineNumber":5178,"sourceCode":"    } else {\n      this.#evidence.runnerPid = handle?.child.pid ?? null;\n      this.#evidence.runnerProcessGroupId = handle?.processGroupId ?? null;\n    }\n    this.#publish();\n    if (warmRecovery) {\n      const deadline =\n        Date.now() + (this.options.runnerReconnectGraceMs ?? 5_000);\n      while (\n        !recoveryIdentityMatches(core.store.state.identity, desiredIdentity) ||\n        core.store.state.warmTransition !== undefined\n      ) {\n        if (Date.now() >= deadline || (await this.#runnerHasExited())) {\n          throw new Error(\"native_runner_warm_transition_recovery_pending\");\n        }\n        await new Promise<void>((resolveWait) => setTimeout(resolveWait, 10));\n      }\n      if (core.getCommand(warmRecovery.commandId)?.status !== \"completed\") {\n        throw new Error(\"native_runner_warm_transition_result_unproven\");\n      }\n      this.#durableTurnId = desiredIdentity.turnId;\n      this.#eventIdentity = structuredClone(desiredIdentity);\n      this.#eventSourceSeq = 0;\n      this.#deferredTurnStartEvents = [];\n      if (oldTransitionRegistration && newTransitionRegistration) {\n        await oldTransitionRegistration.release();\n        this.#controlPlaneRelease = newTransitionRegistration.release;\n        this.#controlPlaneCheckpoint =\n          newTransitionRegistration.checkpoint ?? null;\n      }\n    }\n    this.#pump = setInterval(() => this.#pumpEventsSafely(), 5);\n    if (adoptedRunner) {\n      await this.#awaitAdoptedRunnerConnection(\n        adoptedRunner,\n        registration?.ready,\n      );","sourceCodeStart":5160,"sourceCodeEnd":5196,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/live/runnerd-codex-transport.ts#L5160-L5196","documentation":"Correlation guard in the PRP semantic tool-call path of the runnerd Codex transport: an incoming semantic tool call was dropped because its binding no longer matches the admitted turn — admission was not accepted, the transport closed, the turn/thread/epoch changed, or the call's runId/normalizedSessionId no longer match the live core identity. It protects against executing a tool call that belongs to a stale or superseded turn.","triggerScenarios":"Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5178 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect runner logs for the epoch/thread/turn mismatch that invalidated the call binding","Ensure only one live transport core per run (duplicate runners cause identity races)","Re-issue the turn that produced the tool call so it is admitted under the current identity"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}