paperclipai/paperclip · error
native_runner_warm_transition_result_unproven
Error message
native_runner_warm_transition_result_unproven
What it means
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.
Source
Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5178
} else {
this.#evidence.runnerPid = handle?.child.pid ?? null;
this.#evidence.runnerProcessGroupId = handle?.processGroupId ?? null;
}
this.#publish();
if (warmRecovery) {
const deadline =
Date.now() + (this.options.runnerReconnectGraceMs ?? 5_000);
while (
!recoveryIdentityMatches(core.store.state.identity, desiredIdentity) ||
core.store.state.warmTransition !== undefined
) {
if (Date.now() >= deadline || (await this.#runnerHasExited())) {
throw new Error("native_runner_warm_transition_recovery_pending");
}
await new Promise<void>((resolveWait) => setTimeout(resolveWait, 10));
}
if (core.getCommand(warmRecovery.commandId)?.status !== "completed") {
throw new Error("native_runner_warm_transition_result_unproven");
}
this.#durableTurnId = desiredIdentity.turnId;
this.#eventIdentity = structuredClone(desiredIdentity);
this.#eventSourceSeq = 0;
this.#deferredTurnStartEvents = [];
if (oldTransitionRegistration && newTransitionRegistration) {
await oldTransitionRegistration.release();
this.#controlPlaneRelease = newTransitionRegistration.release;
this.#controlPlaneCheckpoint =
newTransitionRegistration.checkpoint ?? null;
}
}
this.#pump = setInterval(() => this.#pumpEventsSafely(), 5);
if (adoptedRunner) {
await this.#awaitAdoptedRunnerConnection(
adoptedRunner,
registration?.ready,
);View on GitHub (pinned to 01ad858492)
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
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5178 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/4c71739c7ee466a9.
Report an issue: GitHub.