{"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":1361,"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":1343,"sourceCodeEnd":1379,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/packslip.rs#L1343-L1379","documentation":"run_tool, which executes a tool's own binary to capture output for packslip completions, asked the backend's `which` for the named program and got nothing. The installed tool version does not expose an executable with that name, so the exec entry cannot run.","triggerScenarios":"The exec entry names a program (e.g. \"mytool\" or a helper binary) that does not exist in the installed tool version — wrong binary name, renamed binary in a newer version, or the packslip targets a tool variant without that executable.","commonSituations":"Upstream renamed the binary between versions, packslip written for a different tool layout, typo in the executable name, completions entry referencing a binary only present on some platforms.","solutions":["Check the binary name inside the installed tool version (ls the install path / tool's bin dir)","Update the exec entry to the correct executable name","Pin/use a tool version that actually contains the referenced binary","Ensure the platform you run on ships that executable"],"exampleFix":"// before\n// exec = [\"mytool-cli\", \"completions\"]\n// after\n// exec = [\"mytool\", \"completions\"]  # actual binary name in the installed version","handlingStrategy":"validation","validationCode":"const which = await backend.which(config, tv, program);\nif (!which) throw new Error(`${tv} has no executable ${program}`);","typeGuard":null,"tryCatchPattern":"try { await runTool(...) } catch (e) { if (/has no executable called/.test(e.message)) { correctBinaryName(); } else { throw e; } }","preventionTips":["Verify the binary exists in the installed version before referencing it","Update packslips when upstream renames binaries","Pin tool versions whose layout matches the packslip","Check platform-specific binaries"],"tags":["packslip","exec","executable","completion"],"backgroundTag":"command-not-found","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}