{"record":{"id":"4a9d3d7559976447","repo":"paperclipai/paperclip","slug":"daytona-can-delete-snapshot-templates-only-not","errorCode":null,"errorMessage":"Daytona can delete snapshot templates only, not ${templateKind}.","messagePattern":"Daytona can delete snapshot templates only, not (.+?)\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/plugins/sandbox-providers/daytona/src/plugin.ts","lineNumber":2612,"sourceCode":"    params: PluginEnvironmentCancelInteractiveSetupParams,\n  ): Promise<PluginEnvironmentCancelInteractiveSetupResult> {\n    const config = parseDriverConfig(params.config);\n    if (!params.providerLeaseId) {\n      return {\n        status: \"missing\",\n        metadata: {\n          provider: \"daytona\",\n          missing: true,\n          reason: params.reason ?? null,\n        },\n      };\n    }\n    const scope: SandboxScope = {\n      driverKey: params.driverKey,\n      companyId: params.companyId,\n      environmentId: params.environmentId,\n      providerLeaseId: params.providerLeaseId,\n      config,\n    };\n    // C4: cancelling an interactive-setup lease deletes the sandbox, so the\n    // teardown gate blocks fresh cache reads while delete is in flight.\n    const teardownGate = sandboxHandleTeardownGates.begin(scope);\n    sandboxHandleLeaseAdmissionStates.close(scope);\n    try {\n      const sandbox = await getSandboxOrNull(scope, { bypassTeardownGate: true });\n      if (!sandbox) {\n        return {\n          status: \"missing\",\n          metadata: {\n            provider: \"daytona\",\n            missing: true,\n            reason: params.reason ?? null,\n          },\n        };\n      }\n      evictSandboxHandle(scope);","sourceCodeStart":2594,"sourceCodeEnd":2630,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/packages/plugins/sandbox-providers/daytona/src/plugin.ts#L2594-L2630","documentation":"Kind validation in onEnvironmentDeleteTemplate: params.templateKind (defaulting to 'snapshot') is something other than 'snapshot', such as an 'image' template. The Daytona driver only implements deletion of snapshot templates via the snapshot API, so deleting any other template kind is rejected before a client is created.","triggerScenarios":"Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:2495 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Only snapshot templates can be deleted; use an image registry flow for image templates."],"exampleFix":null,"handlingStrategy":"validation","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"}