{"record":{"id":"39ac53ed1aa99935","repo":"jdx/mise","slug":"setup-has-conflicts-nothing-was-bootstrapped-use","errorCode":null,"errorMessage":"setup has conflicts; nothing was bootstrapped; use `mise bootstrap dotfiles status` to resolve them","messagePattern":"setup has conflicts; nothing was bootstrapped; use `mise bootstrap dotfiles status` to resolve them","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/ssh.rs","lineNumber":125,"sourceCode":"                )\n                .await?;\n                if let Some(directory) = &self.repository_preview_directory {\n                    let preview = outcome\n                        .preview_config\n                        .as_ref()\n                        .ok_or_else(|| eyre::eyre!(\"missing setup configuration preview\"))?;\n                    // The remote runner supplies a new directory inside its\n                    // private staging area; never overwrite an existing tree.\n                    std::fs::create_dir(directory)?;\n                    crate::file::copy_dir_all_preserve_symlinks(preview.path(), directory)?;\n                }\n                if !self.repository_dry_run\n                    && (outcome.setup_held\n                        || !crate::system::history::sync::run::read_status(store.state_dir())?\n                            .conflicts\n                            .is_empty())\n                {\n                    bail!(\n                        \"setup has conflicts; nothing was bootstrapped; use `mise bootstrap dotfiles status` to resolve them\"\n                    );\n                }\n                return Ok(());\n            }\n            crate::system::remote_repository::install(\n                &bundle,\n                &origin,\n                &revision,\n                self.repository_update,\n                self.repository_yes,\n                self.repository_dry_run,\n            )?;\n            return Ok(());\n        }\n        let scope = crate::github_relay::Scope::from_flags(\n            self.github_relay_read_only,\n            &self.github_relay_repo,","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/ssh.rs#L107-L143","documentation":"`mise ssh` (src/cli/ssh.rs:125) aborts bootstrapping when onboarding finished but left unresolved state: the onboarding outcome was `setup_held` or the sync status still lists conflicts, and the command was not a dry run. Nothing is installed; the user is directed to `mise bootstrap dotfiles status` to inspect and resolve the conflicts first.","triggerScenarios":"Running a non-dry-run `mise ssh` bootstrap where `onboard::run` reports `setup_held`, or `read_status(store.state_dir()).conflicts` is non-empty after onboarding.","commonSituations":"Dotfiles repository whose setup files conflict with existing local files (existing configs that would be overwritten); a previously interrupted bootstrap leaving held/conflicted entries; re-running bootstrap on a machine with divergent dotfiles.","solutions":["Run `mise bootstrap dotfiles status` to list the conflicts and resolve each one.","Move aside or merge the conflicting local files, then rerun the bootstrap.","Use `--repository-dry-run` first to preview what would conflict.","If a prior bootstrap was interrupted, finish or roll back that onboarding before retrying."],"exampleFix":"// before\nmise ssh host --bootstrap-dotfiles ...\n\n// after: inspect and resolve first\nmise bootstrap dotfiles status\n# resolve reported conflicts\nmise ssh host --bootstrap-dotfiles ...","handlingStrategy":"try-catch","validationCode":"# detect conflicts before a real run\nmise ssh host --repository-dry-run ... || true\nmise bootstrap dotfiles status | grep -i conflict","typeGuard":null,"tryCatchPattern":"try {\n  await $`mise ssh host --bootstrap-dotfiles ...`;\n} catch (e) {\n  if (String(e).includes('setup has conflicts')) {\n    await $`mise bootstrap dotfiles status`; // inspect & resolve\n  }\n}","preventionTips":["Always dry-run repository bootstraps first.","Keep local dotfiles in sync with the repository to avoid conflicts.","Resolve held/conflicted entries promptly after an interrupted bootstrap."],"tags":["ssh","bootstrap","dotfiles","conflicts"],"backgroundTag":"conflicting-config-options","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}