{"record":{"id":"e603c3e6c1cf15b1","repo":"HeyPuter/puter","slug":"access-denied-e603c3","errorCode":"access_denied","errorMessage":"Write access denied for destination","messagePattern":"Write access denied for destination","errorType":"http","errorClass":"HttpError","httpStatus":403,"severity":"error","filePath":"src/backend/drivers/ai-video/VideoGenerationDriver.ts","lineNumber":516,"sourceCode":"        let ancestorsCache: Promise<\n            Array<{ uid: string; path: string }>\n        > | null = null;\n        const canWrite = await this.services.acl.check(\n            actor,\n            {\n                path: pathToCheck,\n                resolveAncestors() {\n                    if (!ancestorsCache) {\n                        ancestorsCache =\n                            fsService.getAncestorChain(pathToCheck);\n                    }\n                    return ancestorsCache;\n                },\n            },\n            'write',\n        );\n        if (!canWrite) {\n            throw new HttpError(403, 'Write access denied for destination', {\n                legacyCode: 'access_denied',\n            });\n        }\n    }\n\n    #resolveModel(modelId: string, provider?: string): IVideoModel | null {\n        const models = this.#modelIdMap[modelId?.trim().toLowerCase()];\n        if (!models || models.length === 0) return null;\n        if (!provider) return models[0];\n\n        // Prefer exact primary ID match over alias matches\n        const exactIdMatch = models.find(\n            (m) => m.id === modelId && m.provider === provider,\n        );\n        if (exactIdMatch) return exactIdMatch;\n\n        const exactPuterIdMatch = models.find(\n            (m) => m.puterId === modelId && m.provider === provider,","sourceCodeStart":498,"sourceCodeEnd":534,"githubUrl":"https://github.com/HeyPuter/puter/blob/908ec23eda38526170322c3edf71ba45ecb1ca95/src/backend/drivers/ai-video/VideoGenerationDriver.ts#L498-L534","documentation":"Error \"Write access denied for destination\" thrown in HeyPuter/puter.","triggerScenarios":"Thrown at src/backend/drivers/ai-video/VideoGenerationDriver.ts:516 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Choose a destination path the caller has write permission for.","Verify ownership or permissions on the target directory before writing."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"908ec23eda38526170322c3edf71ba45ecb1ca95","analyzedAt":"2026-08-12T20:53:15.911Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}