{"record":{"id":"6f9e1e8d7b945a35","repo":"openai/codex","slug":"recursive-no-follow-removal-is-unsupported-6f9e1e","errorCode":null,"errorMessage":"recursive no-follow removal is unsupported","messagePattern":"recursive no-follow removal is unsupported","errorType":"exception","errorClass":"io::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/exec-server/src/no_follow/windows.rs","lineNumber":290,"sourceCode":"                    open_handle(path, FILE_READ_ATTRIBUTES, FILE_OPEN, FILE_DIRECTORY_FILE)?;\n                    Ok(())\n                }\n                Err(error) => Err(error),\n            }\n        }\n        Err(error) => Err(error),\n    }\n}\n\npub(super) async fn create_directory(path: PathBuf, recursive: bool) -> io::Result<()> {\n    tokio::task::spawn_blocking(move || create_directory_sync(&path, recursive))\n        .await\n        .map_err(|error| io::Error::other(format!(\"filesystem task failed: {error}\")))?\n}\n\nfn remove_sync(path: &Path, recursive: bool, force: bool) -> io::Result<()> {\n    if recursive {\n        return Err(io::Error::new(\n            io::ErrorKind::Unsupported,\n            \"recursive no-follow removal is unsupported\",\n        ));\n    }\n\n    let metadata = match open_entry(path).and_then(|file| file.metadata()) {\n        Ok(metadata) => metadata,\n        Err(error) if force && error.kind() == io::ErrorKind::NotFound => return Ok(()),\n        Err(error) => return Err(error),\n    };\n    let create_options = if metadata.is_dir() {\n        FILE_DIRECTORY_FILE\n    } else {\n        FILE_NON_DIRECTORY_FILE\n    };\n    let handle = open_handle(path, DELETE, FILE_OPEN, create_options)?;\n    let disposition = FILE_DISPOSITION_INFO {\n        DeleteFile: BOOLEAN_TRUE,","sourceCodeStart":272,"sourceCodeEnd":308,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/exec-server/src/no_follow/windows.rs#L272-L308","documentation":"Error \"recursive no-follow removal is unsupported\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/exec-server/src/no_follow/windows.rs:290 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}