{"record":{"id":"5a2545852541a9da","repo":"paperclipai/paperclip","slug":"runtime-restart-suppressed","errorCode":"runtime_restart_suppressed","errorMessage":"Runtime restart storm suppression is active","messagePattern":"Runtime restart storm suppression is active","errorType":"http","errorClass":"ToolRuntimeSupervisorError","httpStatus":429,"severity":"error","filePath":"server/src/services/tool-runtime-supervisor.ts","lineNumber":311,"sourceCode":"          hostCount,\n          maxCompanySlots,\n          maxHostSlots,\n        },\n      });\n      throw new ToolRuntimeSupervisorError(\n        429,\n        \"No local stdio runtime capacity is currently available\",\n        \"runtime_capacity_unavailable\",\n        { reasonCode, companyCount, hostCount, maxCompanySlots, maxHostSlots },\n      );\n    }\n  }\n\n  function assertRestartAllowed(row: typeof toolRuntimeSlots.$inferSelect, metadata: Record<string, unknown>) {\n    const at = now();\n    const suppressedUntil = dateValue(metadata.restartSuppressedUntil);\n    if (suppressedUntil && suppressedUntil.getTime() > at.getTime()) {\n      throw new ToolRuntimeSupervisorError(\n        429,\n        \"Runtime restart storm suppression is active\",\n        \"runtime_restart_suppressed\",\n        { slotId: row.id, suppressedUntil: suppressedUntil.toISOString() },\n      );\n    }\n    const backoffUntil = dateValue(metadata.restartBackoffUntil);\n    if (backoffUntil && backoffUntil.getTime() > at.getTime()) {\n      throw new ToolRuntimeSupervisorError(\n        429,\n        \"Runtime restart backoff is active\",\n        \"runtime_restart_backoff\",\n        { slotId: row.id, backoffUntil: backoffUntil.toISOString() },\n      );\n    }\n  }\n\n  function restartMetadata(row: typeof toolRuntimeSlots.$inferSelect, metadata: Record<string, unknown>, reason: string) {","sourceCodeStart":293,"sourceCodeEnd":329,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/server/src/services/tool-runtime-supervisor.ts#L293-L329","documentation":"assertRestartAllowed storm suppression: the slot's metadata carries restartSuppressedUntil in the future because the process crashed and restarted too often within the storm window. Further restarts are refused with 429 until the suppression window passes, preventing crash-loop resource burn; investigate why the runtime keeps dying.","triggerScenarios":"Thrown at server/src/services/tool-runtime-supervisor.ts:311 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restart storm suppression is active after repeated crashes. Fix the crashing runtime configuration, then wait for suppression to lift."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}