{"record":{"id":"5e01d7628c73ba54","repo":"paperclipai/paperclip","slug":"native-runner-warm-transition-registered-endpoint","errorCode":null,"errorMessage":"native_runner_warm_transition_registered_endpoint_mismatch","messagePattern":"native_runner_warm_transition_registered_endpoint_mismatch","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/live/runnerd-codex-transport.ts","lineNumber":4998,"sourceCode":"      >\n    >;\n    let oldTransitionRegistration: RecoveryRegistration | null = null;\n    let newTransitionRegistration: RecoveryRegistration | null = null;\n    if (warmRecovery && this.options.controlPlaneRegistration) {\n      try {\n        oldTransitionRegistration = await this.options.controlPlaneRegistration(\n          core,\n          warmRecovery.proof.receipt.oldIdentity,\n        );\n        const oldConnection = oldTransitionRegistration.connection ?? {\n          mode: \"connect\",\n          connectUrl: oldTransitionRegistration.connectUrl,\n        };\n        if (\n          oldConnection.mode !== \"connect\" ||\n          typeof oldConnection.connectUrl !== \"string\"\n        ) {\n          throw new Error(\n            \"native_runner_warm_transition_registered_endpoint_mismatch\",\n          );\n        }\n        newTransitionRegistration = await this.options.controlPlaneRegistration(\n          core,\n          warmRecovery.proof.receipt.newIdentity,\n        );\n        const newConnection = newTransitionRegistration.connection ?? {\n          mode: \"connect\",\n          connectUrl: newTransitionRegistration.connectUrl,\n        };\n        if (\n          newConnection.mode !== \"connect\" ||\n          durableRecoveryInternals.canonicalJson(newConnection) !==\n            durableRecoveryInternals.canonicalJson(\n              warmRecovery.proof.receipt.connection,\n            )\n        ) {","sourceCodeStart":4980,"sourceCodeEnd":5016,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/live/runnerd-codex-transport.ts#L4980-L5016","documentation":"Consistency guard in the warm-transition recovery path of the runnerd Codex transport: when warm recovery registers both old and new identities with the control plane, the connection endpoint (mode/connectUrl) reported for the old identity does not match the one recorded for the new identity. The warm handover is aborted because the two registrations disagree on which endpoint the runner should connect through.","triggerScenarios":"Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:4998 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify control-plane registration config returns a consistent connection for old and new runner identities","Check for concurrent config changes to the connect URL during the warm transition","Retry the transition after stabilizing the control-plane registration endpoint configuration"],"exampleFix":null,"handlingStrategy":"retry","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-14T05:17:10.506Z"}