Hmbown/CodeWhale · error · std::io::Error

plugin file is a reparse point, hard link, or non-regular fi

Error message

plugin file is a reparse point, hard link, or non-regular file

What it means

Hardening guard in open_bundle_file (Windows): the opened bundle file failed the regular-file check — it has the reparse-point attribute, has multiple hard links, or is not a regular file. Plugin bundles must be plain, singly-linked files to prevent link-based substitution.

Source

Thrown at crates/tui/src/plugins/manifest.rs:1546

}

#[cfg(windows)]
pub(crate) fn open_bundle_file(path: &Path) -> std::io::Result<fs::File> {
    use std::os::windows::fs::OpenOptionsExt as _;

    const FILE_ATTRIBUTE_REPARSE_POINT: u32 = 0x0000_0400;
    let file = fs::OpenOptions::new()
        .read(true)
        .share_mode(0x0000_0001) // deny concurrent writes and replacement
        .custom_flags(0x0020_0000) // FILE_FLAG_OPEN_REPARSE_POINT
        .open(path)?;
    let metadata = file.metadata()?;
    let identity = windows_file_identity(&file)?;
    if !metadata.is_file()
        || identity.attributes & FILE_ATTRIBUTE_REPARSE_POINT != 0
        || identity.links != 1
    {
        return Err(std::io::Error::new(
            std::io::ErrorKind::InvalidData,
            "plugin file is a reparse point, hard link, or non-regular file",
        ));
    }
    Ok(file)
}

#[cfg(all(not(unix), not(windows)))]
pub(crate) fn open_bundle_file(path: &Path) -> std::io::Result<fs::File> {
    fs::File::open(path)
}

#[cfg(windows)]
fn open_bundle_directory(path: &Path) -> std::io::Result<fs::File> {
    use std::os::windows::fs::OpenOptionsExt as _;

    const FILE_ATTRIBUTE_REPARSE_POINT: u32 = 0x0000_0400;
    let file = fs::OpenOptions::new()

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Replace the symlink/hard-linked plugin path with the real regular file.
  2. Re-install the plugin so the bundle is materialized as a normal file in the plugin directory.
  3. Check the plugin directory for junctions or externally linked content.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/tui/src/plugins/manifest.rs:1546 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/01c1aa096cf5f8b7. Report an issue: GitHub.