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

plugin identity probe found a reparse point, hard link, or u

Error message

plugin identity probe found a reparse point, hard link, or unexpected object

What it means

Identity probe guard in the Windows plugin path: the opened handle's metadata did not match the expected kind — for files it requires a regular file with exactly one hard link; for directories a real directory — or the reparse-point attribute is set. Any mismatch rejects the plugin component.

Source

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

        | if expect_directory {
            FILE_FLAG_BACKUP_SEMANTICS
        } else {
            0
        };
    let file = fs::OpenOptions::new()
        .access_mode(0)
        .share_mode(FILE_SHARE_READ_WRITE_DELETE)
        .custom_flags(flags)
        .open(path)?;
    let metadata = file.metadata()?;
    let identity = windows_file_identity(&file)?;
    let expected_kind = if expect_directory {
        metadata.is_dir()
    } else {
        metadata.is_file() && identity.links == 1
    };
    if !expected_kind || identity.attributes & FILE_ATTRIBUTE_REPARSE_POINT != 0 {
        return Err(std::io::Error::new(
            std::io::ErrorKind::InvalidData,
            "plugin identity probe found a reparse point, hard link, or unexpected object",
        ));
    }
    Ok(file)
}

#[cfg(windows)]
fn ensure_windows_path_still_opened(path: &Path, opened: &fs::File) -> Result<(), String> {
    let after = fs::symlink_metadata(path)
        .map_err(|e| format!("failed to re-inspect plugin path after handle open: {e}"))?;
    if metadata_is_link_or_reparse(&after) {
        return Err("plugin path changed into a reparse point during validation".to_string());
    }
    let expect_directory = if after.is_dir() {
        true
    } else if after.is_file() {
        false

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Install the plugin as plain regular files/directories without links or reparse points.
  2. Re-install the plugin from its source so components are materialized normally.
  3. Audit the plugin directory for hard links created by copy tools (e.g. clone-link installs).
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/tui/src/plugins/manifest.rs:1614 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/6c73a7ef5ab1fad8. Report an issue: GitHub.