jdx/mise · error

relative remote mise path does not name an executable: {comm

Error message

relative remote mise path does not name an executable: {command:?}

What it means

After normalization, a relative remote mise path must still name an executable; if all components resolve away (e.g. ".", "./", or "a/..") the resulting path inside the project is empty, so mise rejects it rather than executing the project directory itself.

Source

Thrown at src/system/remote.rs:1259

        }
        let home = remote_home.ok_or_else(|| eyre!("remote login home was not resolved"))?;
        return Ok(format!("{}/{suffix}", home.trim_end_matches('/')));
    }

    let mut components = Vec::new();
    for component in command.split('/') {
        match component {
            "" | "." => {}
            ".." => {
                if components.pop().is_none() {
                    bail!("relative remote mise path escapes the staged project: {command:?}");
                }
            }
            component => components.push(component),
        }
    }
    if components.is_empty() {
        bail!("relative remote mise path does not name an executable: {command:?}");
    }
    Ok(format!("{project}/{}", components.join("/")))
}

fn remote_mise_find_script() -> &'static str {
    r#"mise_path=$(command -v mise 2>/dev/null || true)
case "$mise_path" in /*) ;; *) mise_path= ;; esac
if [ -z "$mise_path" ]; then
  for candidate in "$HOME/.local/bin/mise" "$HOME/.local/share/mise/bin/mise" "$HOME/.cargo/bin/mise" /usr/local/bin/mise /opt/homebrew/bin/mise; do
    if [ -x "$candidate" ]; then
      mise_path=$candidate
      break
    fi
  done
fi"#
}

fn remote_mise_output_script() -> String {

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Provide a path with at least one real component naming the binary, e.g. "bin/mise"
  2. Fix the templating/config that produced an empty or dot-only path
  3. Prefer an absolute or "~/"-prefixed path where the executable location is fixed

Example fix

// before
remote_mise = "."
// after
remote_mise = "bin/mise"
Defensive patterns

Strategy: validation

Validate before calling

const nonEmptyRelative = (rel) => typeof rel === 'string' && !rel.startsWith('/') && rel.split('/').filter(s => s && s !== '.' && s !== '..').length > 0;

Prevention

When it happens

Trigger: Passing a relative remote mise path like ".", "./", "x/.." or an otherwise empty-resolving path to the resolver that prefixes the staged project.

Common situations: Empty or placeholder config values that yield "."; templating bugs where the executable segment of a relative path is dropped, leaving only directory dots.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/b12f696598231486. Report an issue: GitHub.