{"record":{"id":"eeaa17167ace71b2","repo":"jdx/mise","slug":"install-mise-must-be-an-absolute-path-or-start-wit","errorCode":null,"errorMessage":"install_mise must be an absolute path or start with ~/: {path:?}","messagePattern":"install_mise must be an absolute path or start with ~/: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/remote.rs","lineNumber":2219,"sourceCode":"fn validated_remote_command_output(output: &str) -> Result<String> {\n    validated_remote_command(output.strip_suffix('\\n').unwrap_or(output))\n}\n\nfn validated_absolute_remote_path_output(output: &str, kind: &str) -> Result<String> {\n    let path = output.strip_suffix('\\n').unwrap_or(output);\n    if !path.starts_with('/') || path.contains(['\\0', '\\n', '\\r']) {\n        bail!(\"{kind} returned an unsafe absolute path: {path:?}\");\n    }\n    Ok(path.to_string())\n}\n\nfn validate_install_mise_path(path: &str) -> Result<()> {\n    validate_value(\"mise install path\", path)?;\n    if path.contains(['\\n', '\\r']) {\n        bail!(\"install_mise must not contain a newline: {path:?}\");\n    }\n    if !path.starts_with('/') && !path.starts_with(\"~/\") {\n        bail!(\"install_mise must be an absolute path or start with ~/: {path:?}\");\n    }\n    if path.split('/').any(|component| component == \"..\") {\n        bail!(\"install_mise must not contain '..': {path:?}\");\n    }\n    if matches!(\n        path.rsplit('/').next(),\n        None | Some(\"\") | Some(\".\") | Some(\"~\")\n    ) {\n        bail!(\"install_mise must name an executable file: {path:?}\");\n    }\n    Ok(())\n}\n\nfn validate_remote_executable(command: &str) -> Result<()> {\n    validate_value(\"mise command\", command)?;\n    let is_path = command.contains('/');\n    if command.starts_with('-')\n        || command.contains(['\\n', '\\r'])","sourceCodeStart":2201,"sourceCodeEnd":2237,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/system/remote.rs#L2201-L2237","documentation":"`install_mise` must point at an unambiguous location on the remote host: an absolute path starting with '/', or an explicit home-relative path starting with '~/' (which mise expands to a concrete absolute path). Anything else — a bare name, './relative', or a plain '~' — cannot be resolved safely, so this error is thrown.","triggerScenarios":"install_mise set to a value like 'mise', './bin/mise', 'bin/mise', or just '~'.","commonSituations":"Copy-pasting a command name instead of an install path; assuming relative paths resolve against HOME; typos dropping the leading '/'.","solutions":["Prefix the path with '/' for an absolute location (e.g. '/usr/local/bin/mise')","Or use '~/...' for a home-relative location (e.g. '~/bin/mise')","Fix typos that leave the value as a bare executable name"],"exampleFix":"// before\ninstall_mise = \"bin/mise\"\n// after\ninstall_mise = '~/bin/mise'","handlingStrategy":"validation","validationCode":"const ok = typeof p === 'string' && (p.startsWith('/') || p.startsWith('~/'));\nif (!ok) throw new Error('install_mise must be absolute or ~/-prefixed');","typeGuard":"const isInstallablePath = (s: unknown): s is string =>\n  typeof s === 'string' && (s.startsWith('/') || s.startsWith('~/'));","tryCatchPattern":"try { validate_install_mise_path(p)?; } catch (e) {\n  // suggest rewriting to an absolute or ~/-prefixed path\n}","preventionTips":["Always write absolute install locations in shared config","Prefer '~/bin/mise' for per-user installs","Validate config in CI before deployment","Don't assume relative paths resolve against HOME"],"tags":["config","path","validation"],"backgroundTag":"invalid-config-value","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"}