{"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":3097,"sourceCode":"            relay,\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 repository = self\n            .adopt\n            .as_deref()\n            .map(crate::github_relay::expand_repository)\n            .transpose()?;\n        if let Some(origin) = &repository {\n            system::remote_repository::validate_origin(origin)?;\n        }\n        // a dry run fetches and transfers like a real one: the preview comes\n        // from the target, which inspects itself and the repository\n        let repository = if let Some(origin) = repository {\n            Some(","sourceCodeStart":3079,"sourceCodeEnd":3115,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/bootstrap.rs#L3079-L3115","documentation":"After selecting targets, mise applies RemoteOverrides (per-host CLI overrides) to each host. If any host fails validation in apply_overrides, mise collects all errors and aborts before running anything, listing each target and its error.","triggerScenarios":"One or more selected hosts have invalid configuration after applying overrides — e.g. bad user/host strings, invalid relay or env settings merged from CLI flags onto config-defined hosts.","commonSituations":"Malformed entries under [bootstrap.remote.hosts]; CLI override flags incompatible with a host definition; recent config edits introducing invalid fields.","solutions":["Read the per-target error lines in the message to find the offending host(s)","Fix the host entry under [bootstrap.remote.hosts] (validate user@host format and options)","Remove or correct conflicting --override-style CLI flags for those hosts","Test with a single --host to isolate the failing entry"],"exampleFix":"# before (invalid host string)\n[bootstrap.remote.hosts]\nweb1 = \"web1 example\"\n# after\n[bootstrap.remote.hosts]\nweb1 = \"deploy@web1.example.com\"","handlingStrategy":"validation","validationCode":"hosts.forEach(h => { if (!/^[^@\\s]+@[^@\\s]+$|^[[^\\s]+]$/.test(h)) throw new Error(`bad host: ${h}`) })","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate host strings as [user@]host before committing config","Keep overrides minimal to reduce merge conflicts","Test each new host with a single --host run"],"tags":["cli","bootstrap","validation","config"],"backgroundTag":"schema-validation-failed","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"}