{"record":{"id":"f8ade94ed9f8e852","repo":"jdx/mise","slug":"remote-bootstrap-configuration-is-invalid-for-t","errorCode":null,"errorMessage":"remote bootstrap configuration is invalid for {} target(s):\n  {}","messagePattern":"remote bootstrap configuration is invalid for (.+?) target\\(s\\):\n  (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/bootstrap.rs","lineNumber":2375,"sourceCode":"        let options = system::remote::RemoteRunOptions {\n            dry_run: self.dry_run,\n            yes: self.yes,\n            update: self.update,\n            prompt_secrets: self.prompt_secrets,\n            force_dotfiles: self.force_dotfiles,\n            skip: self.skip.iter().map(bootstrap_part_name).collect(),\n            only: self.only.iter().map(bootstrap_part_name).collect(),\n            keep_staging: self.keep_staging,\n            connect_timeout: self.connect_timeout,\n        };\n        let mut configuration_errors = vec![];\n        for host in selected.values_mut() {\n            if let Err(error) = host.apply_overrides(&overrides) {\n                configuration_errors.push(format!(\"{}: {error:#}\", host.name));\n            }\n        }\n        if !configuration_errors.is_empty() {\n            bail!(\n                \"remote bootstrap configuration is invalid for {} target(s):\\n  {}\",\n                configuration_errors.len(),\n                configuration_errors.join(\"\\n  \")\n            );\n        }\n        let mut failures = vec![];\n        let mut artifacts = system::remote::RemoteArtifactResolver::default();\n        for host in selected.values() {\n            if let Err(error) = system::remote::run(host, &options, &mut artifacts).await {\n                error!(\"remote bootstrap failed on {}: {error:#}\", host.name);\n                failures.push(format!(\"{}: {error:#}\", host.name));\n                if self.fail_fast {\n                    break;\n                }\n            }\n        }\n        if !failures.is_empty() {\n            bail!(","sourceCodeStart":2357,"sourceCodeEnd":2393,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/bootstrap.rs#L2357-L2393","documentation":"Before any host is contacted, each selected RemoteHost gets apply_overrides() with the CLI overrides (source, port, identity file, excludes, ssh options, mise bin). Hosts whose overrides fail validation are collected and reported together (src/cli/bootstrap.rs:2375) - nothing has executed yet; this is purely local configuration validation.","triggerScenarios":"--port with a non-numeric or out-of-range value; --identity-file pointing at a missing key; --source path that does not exist (ad-hoc hosts default source to the cwd); invalid ssh-option strings; per-host config values that become inconsistent once overrides apply.","commonSituations":"CI without the deploy key checked out; relative --source resolved against an unexpected cwd; cross-OS path mismatches between controller and hosts.","solutions":["Read each 'name: error' line and fix the first concrete cause (bad port, missing key, bad path)","Make --source an absolute path that exists on the controlling machine","Verify the identity file exists and has sane permissions (600)","Iterate on a single host ('mise bootstrap remote <name> ...') until overrides validate, then fan out"],"exampleFix":"# before\nmise bootstrap remote web1 --identity-file ~/deploy_ed25519 --source ./repo\n# Error: remote bootstrap configuration is invalid for 1 target(s): web1: ...\n\n# after\nmise bootstrap remote web1 --identity-file ~/.ssh/deploy_ed25519 --source \"$PWD/repo\"","handlingStrategy":"validation","validationCode":"# bash: pre-validate overrides the same way mise does\n[ -n \"$SOURCE\" ] && [ -d \"$SOURCE\" ] || { echo \"--source missing: $SOURCE\" >&2; exit 1; }\n[ -z \"$PORT\" ] || [ \"$PORT\" -gt 0 ] 2>/dev/null || { echo \"bad port: $PORT\" >&2; exit 1; }\n[ -z \"$IDENTITY\" ] || [ -f \"$IDENTITY\" ] || { echo \"identity file missing: $IDENTITY\" >&2; exit 1; }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use absolute paths for --source and identity files","Ensure CI has the deploy key checked out before bootstrap","Test overrides on a single host before fanning out"],"tags":["mise","bootstrap","remote","configuration","validation"],"backgroundTag":"invalid-remote-configuration","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}