{"record":{"id":"d29cf094e0b81519","repo":"paperclipai/paperclip","slug":"timed-out-acquiring-sandbox-callback-bridge-respon","errorCode":null,"errorMessage":"Timed out acquiring sandbox callback bridge response lock.","messagePattern":"Timed out acquiring sandbox callback bridge response lock\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/adapter-utils/src/sandbox-callback-bridge.ts","lineNumber":606,"sourceCode":"          }\n          let holderAlive = false;\n          if (holderPid !== null) {\n            try {\n              process.kill(holderPid, 0);\n              holderAlive = true;\n            } catch {\n              holderAlive = false;\n            }\n          }\n          if (!holderAlive) {\n            await fs.rm(lockDir, { recursive: true, force: true }).catch(() => undefined);\n            continue;\n          }\n          attempts += 1;\n          if (attempts >= 600) {\n            throw new Error(\"Timed out acquiring sandbox callback bridge response lock.\");\n          }\n          await new Promise((resolve) => setTimeout(resolve, 50));\n        }\n      }\n\n      try {\n        if (options.requestPath) {\n          const requestExists = await pathExists(options.requestPath);\n          if (!requestExists) {\n            return { wrote: false };\n          }\n        }\n        const responseExists = await pathExists(responsePath);\n        if (responseExists) {\n          return { wrote: false };\n        }\n        await fs.writeFile(tempPath, body, \"utf8\");\n        await fs.rename(tempPath, responsePath);\n        return { wrote: true };\n      } finally {","sourceCodeStart":588,"sourceCodeEnd":624,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/packages/adapter-utils/src/sandbox-callback-bridge.ts#L588-L624","documentation":"Liveness failure in the filesystem-based sandbox callback bridge queue: the response lock (mkdir lock dir) has been held by a live process through hundreds of polling attempts (~30s), so the bridge cannot take its turn writing responses; stale locks from dead holders are cleaned automatically, so this indicates a genuinely stuck or long-blocked holder.","triggerScenarios":"Thrown at packages/adapter-utils/src/sandbox-callback-bridge.ts:526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry; the response lock timed out under contention.","Reduce concurrent bridge requests or increase the lock timeout."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}