{"record":{"id":"5a9543fc69b4a814","repo":"jdx/mise","slug":"remote-host-mise-binary-does-not-exist","errorCode":null,"errorMessage":"remote host '{}' mise binary does not exist: {}","messagePattern":"remote host '(.+?)' mise binary does not exist: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/remote.rs","lineNumber":354,"sourceCode":"            for link in &self.copy_link {\n                validate_copy_link(&self.source, link).wrap_err_with(|| {\n                    format!(\"remote host '{}' has invalid copy_link\", self.name)\n                })?;\n            }\n        }\n        if let Some(identity) = &self.identity_file\n            && !identity.is_file()\n        {\n            bail!(\n                \"remote host '{}' identity file does not exist: {}\",\n                self.name,\n                identity.display()\n            );\n        }\n        if let Some(binary) = &self.mise_bin\n            && !binary.is_file()\n        {\n            bail!(\n                \"remote host '{}' mise binary does not exist: {}\",\n                self.name,\n                binary.display()\n            );\n        }\n        let provisioning_strategies = [\n            self.mise_bin.is_some(),\n            self.remote_mise.is_some(),\n            self.bootstrap_command.is_some(),\n        ]\n        .into_iter()\n        .filter(|configured| *configured)\n        .count();\n        if provisioning_strategies > 1 {\n            bail!(\n                \"remote host '{}' must set at most one of mise_bin, remote_mise, or bootstrap_command\",\n                self.name\n            );","sourceCodeStart":336,"sourceCodeEnd":372,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/remote.rs#L336-L372","documentation":"The remote host's `mise_bin` override must point to an existing regular file locally; validate_with_source checks the filesystem and bails when the configured mise binary path does not exist. This prevents remote runs from failing later on a bad binary path.","triggerScenarios":"A remote host entry sets `mise_bin = \"...\"` and the path is missing or is a directory; validate() or apply_overrides() call validate_with_source and bail.","commonSituations":"Custom-built mise binary moved or deleted after `cargo build` cleaned target/; pointing at target/debug/mise on a machine where it was never built; path typo; switching machines or CI runners without rebuilding.","solutions":["Build or reinstall mise and point mise_bin at the real binary path (e.g. ~/.local/bin/mise).","Fix the path in the remote host config to the existing binary.","Remove mise_bin to use the default mise resolution on the host.","Use `which mise` to find the installed binary path and copy it into config."],"exampleFix":"// before\nmise_bin = \"target/debug/mise\"\n// after\nmise_bin = \"/home/user/.local/bin/mise\"","handlingStrategy":"validation","validationCode":"const fs = require('fs');\nfunction assertMiseBin(host) {\n  if (host.mise_bin && !fs.statSync(host.mise_bin).isFile()) {\n    throw new Error(`mise binary missing: ${host.mise_bin}`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Resolve mise_bin at config-generation time via `which mise` instead of hardcoding build paths.","Avoid target/debug paths in durable config; they vanish on `cargo clean`.","Install mise to a stable location (~/.local/bin/mise) on machines used for remote runs."],"tags":["remote","ssh","configuration","binary"],"backgroundTag":"file-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"}