{"record":{"id":"c51e3a1d112754d6","repo":"tauri-apps/tauri","slug":"failed-to-create-plugin-documentation-directory","errorCode":null,"errorMessage":"failed to create plugin documentation directory","messagePattern":"failed to create plugin documentation directory","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tauri/build.rs","lineNumber":427,"sourceCode":"      .unwrap_or_else(|_| panic!(\"unable to autogenerate default permissions\"));\n\n    let permissions = tauri_utils::acl::build::define_permissions(\n      &PathBuf::from(glob::Pattern::escape(\n        &permissions_out_dir.to_string_lossy(),\n      ))\n      .join(\"**\")\n      .join(\"*.toml\")\n      .to_string_lossy(),\n      &format!(\"tauri:{plugin}\"),\n      out_dir,\n      |_| true,\n    )\n    .unwrap_or_else(|e| panic!(\"failed to define permissions for {plugin}: {e}\"));\n\n    let docs_out_dir = Path::new(\"permissions\")\n      .join(plugin_directory_name)\n      .join(\"autogenerated\");\n    fs::create_dir_all(&docs_out_dir).expect(\"failed to create plugin documentation directory\");\n    tauri_utils::acl::build::generate_docs(\n      &permissions,\n      &docs_out_dir,\n      plugin.strip_prefix(\"tauri-plugin-\").unwrap_or(plugin),\n    )\n    .expect(\"failed to generate plugin documentation page\");\n    all_permissions.insert(plugin.to_string(), permissions);\n  }\n\n  let default_permissions = define_default_permission_set(out_dir);\n  all_permissions.insert(\"core\".to_string(), default_permissions);\n\n  all_permissions\n}\n\nfn define_default_permission_set(\n  out_dir: &Path,\n) -> Vec<tauri_utils::acl::manifest::PermissionFile> {","sourceCodeStart":409,"sourceCodeEnd":445,"githubUrl":"https://github.com/tauri-apps/tauri/blob/460ec35447493200d64290dd7f015d5a91d0fd58/crates/tauri/build.rs#L409-L445","documentation":"Panic in the build script's define_permissions helper when fs::create_dir_all cannot create the autogenerated documentation directory (permissions/<plugin>/autogenerated) for a core plugin. This directory receives the ACL permission docs generated by tauri_utils::acl::build::generate_docs. Failure aborts the build.","triggerScenarios":"The permissions/ directory tree in the tauri crate cannot be created: read-only filesystem, permission denied on the existing permissions/ directory, a file exists where a directory is expected (e.g. a stale file named 'autogenerated'), or disk full.","commonSituations":"Building in a checkout where permissions/autogenerated was replaced by a regular file, running the build as a different user than the repo owner, or building on a read-only mount (e.g. some container setups).","solutions":["Check that permissions/<plugin>/autogenerated is not an existing regular file; remove it if so","Fix write permissions on the crates/tauri/permissions directory for the build user","Ensure the repository is on a writable filesystem","Clean and rebuild after restoring a pristine checkout"],"exampleFix":"// before\npermissions/window-state/autogenerated  <- regular file\n// after\nrm permissions/window-state/autogenerated\ncargo build","handlingStrategy":"validation","validationCode":"let docs_dir = std::path::Path::new(\"permissions\").join(plugin_directory_name);\nif docs_dir.exists() {\n    assert!(docs_dir.is_dir(), \"{} is a file, not a directory\", docs_dir.display());\n}\nlet probe = docs_dir.join(\".write-test\");\nstd::fs::create_dir_all(&docs_dir).expect(\"cannot create docs dir\");\nstd::fs::write(&probe, b\"\").expect(\"docs dir not writable\");\nlet _ = std::fs::remove_file(&probe);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never commit stray files named like directories under permissions/","Build as the repository owner user","Keep build mounts writable in containers"],"tags":["build-script","filesystem","permissions","docs"],"backgroundTag":"mkdir-permission-denied","analyzedSha":"460ec35447493200d64290dd7f015d5a91d0fd58","analyzedAt":"2026-09-18T23:55:51.277Z","contentChangedAt":"2026-09-18T23:55:51.277Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}