openai/codex · error · io::Error
recursive no-follow removal is unsupported
Error message
recursive no-follow removal is unsupported
What it means
Error "recursive no-follow removal is unsupported" thrown in openai/codex.
Source
Thrown at codex-rs/exec-server/src/no_follow/unix.rs:298
match mkdirat(&directory, component, Mode::from_raw_mode(0o777)) {
Ok(()) | Err(rustix::io::Errno::EXIST) => {}
Err(error) => return Err(io::Error::from(error)),
}
directory = open_directory(&directory, component)?;
}
Err(error) => return Err(error),
}
}
Ok(())
})
.await
.map_err(|error| io::Error::other(format!("filesystem task failed: {error}")))?
}
pub(super) async fn remove(path: PathBuf, recursive: bool, force: bool) -> io::Result<()> {
tokio::task::spawn_blocking(move || {
if recursive {
return Err(io::Error::new(
io::ErrorKind::Unsupported,
"recursive no-follow removal is unsupported",
));
}
let (parent, leaf) = match parent(&path) {
Ok(value) => value,
Err(error) if force && error.kind() == io::ErrorKind::NotFound => return Ok(()),
Err(error) => return Err(error),
};
let metadata = match statat(&parent, &leaf, AtFlags::SYMLINK_NOFOLLOW) {
Ok(metadata) => metadata,
Err(error) if force && error == rustix::io::Errno::NOENT => return Ok(()),
Err(error) => return Err(io::Error::from(error)),
};
let kind = metadata.st_mode & libc::S_IFMT;
if kind == libc::S_IFLNK {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,View on GitHub (pinned to 339751715c)
When it happens
Trigger: Thrown at codex-rs/exec-server/src/no_follow/unix.rs:298 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of openai/codex@339751715c (2026-08-25).
Data as JSON: /api/errors/f60b5317d1c7bef0.
Report an issue: GitHub.