{"record":{"id":"9dc5d1422ba28347","repo":"jdx/mise","slug":"has-no-executable-called-program","errorCode":null,"errorMessage":"{} has no executable called {program}","messagePattern":"(.+?) has no executable called (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/packslip.rs","lineNumber":1057,"sourceCode":"    match by_name {\n        Some(found) => Ok(found),\n        None => bail!(\"{name} is not an active, installed tool or one of their executables\"),\n    }\n}\n\n/// Run one of the tool's own executables and return what it printed.\nasync fn run_tool(\n    config: &Arc<Config>,\n    backend: &Arc<dyn Backend>,\n    tv: &ToolVersion,\n    argv: &[String],\n    env: &BTreeMap<String, String>,\n) -> Result<String> {\n    let Some((program, args)) = argv.split_first() else {\n        bail!(\"an exec entry with no command\");\n    };\n    let Some(path) = backend.which(config, tv, program).await? else {\n        bail!(\"{} has no executable called {program}\", tv.style());\n    };\n    run_resource_command(\n        &path,\n        args,\n        env,\n        &tv.install_path(),\n        std::time::Duration::from_secs(5),\n    )\n    .await\n}\n\n/// Run vendor resource generation outside the user's project, without\n/// input, under a deadline. Empty output is a failed source, never a cache hit.\nasync fn run_resource_command(\n    path: &Path,\n    args: &[String],\n    env: &BTreeMap<String, String>,\n    install_path: &Path,","sourceCodeStart":1039,"sourceCodeEnd":1075,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/packslip.rs#L1039-L1075","documentation":"After resolving the program name from the exec argv, run_tool asks the tool's backend to locate the executable (backend.which). If the installed tool version does not provide an executable with that name, the error bails naming the tool version and the missing program. It means the manifest's exec entry references a binary that the installed version of the tool doesn't ship.","triggerScenarios":"A resource command's exec argv names a program (e.g. `rg`) that backend.which cannot find in the installed tool version's install path — wrong binary name, binary only present in newer/older versions, or the tool isn't fully installed.","commonSituations":"Manifest written against a different version of the tool than the one installed; renamed executables between releases; typo in the executable name; partial/corrupted install where the binary is missing.","solutions":["Check the executable exists in the installed tool: `mise which <program>` or look in the tool's install path bin directory.","Correct the exec entry's program name to match an executable the tool actually ships.","Pin/install the tool version the manifest was written for, or update the manifest for the installed version.","Reinstall the tool if the binary is missing from an otherwise expected install (`mise install --force <tool>`)."],"exampleFix":"# before: executable doesn't exist in this version\nexec = [\"rg-old\", \"--version\"]\n\n# after\nexec = [\"rg\", \"--version\"]","handlingStrategy":"validation","validationCode":"if backend.which(config, &tv, program).await?.is_none() {\n    eprintln!(\"{} does not ship an executable named {program}\", tv.style());\n}","typeGuard":null,"tryCatchPattern":"match run_tool(config, &backend, &tv, &argv, &env).await {\n    Err(e) if e.to_string().contains(\"has no executable called\") => {\n        eprintln!(\"Check `mise which {program}`; fix the binary name or pin the matching tool version\");\n    }\n    Ok(out) => use(out),\n    Err(e) => return Err(e),\n}","preventionTips":["Verify executable names against the installed tool version (`mise which` or the install bin dir).","Pin tool versions in lockfiles so manifests match the binaries actually installed.","Update manifests when a tool renames its executables between releases."],"tags":["packslip","executable","which","toolset"],"backgroundTag":"command-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}