{"record":{"id":"11491b06308e9f65","repo":"jdx/mise","slug":"setup-has-conflicts-nothing-was-bootstrapped-use-mise-dot","errorCode":null,"errorMessage":"setup has conflicts; nothing was bootstrapped; use `mise dot status` to resolve them","messagePattern":"setup has conflicts; nothing was bootstrapped; use `mise dot status` to resolve them","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/ssh.rs","lineNumber":126,"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 dot 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":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/ssh.rs#L108-L144","documentation":"`mise dot` bootstrapping aborts because the remote repository setup step reported a conflict (`setup_held`) or the sync status file contains unresolved conflicts. Nothing was changed/bootstrapped, so the user must inspect the conflict state first. mise deliberately refuses to guess at a resolution.","triggerScenarios":"Running `mise dot` (ssh/remote repository bootstrap) when the setup outcome is 'held' (setup_held) or `read_status(store.state_dir()).conflicts` is non-empty.","commonSituations":"A previous sync or bootstrap left the remote repository state file in a conflicted state; two machines edited the same managed files; a partial/failed prior bootstrap left status conflicts behind.","solutions":["Run `mise dot status` to list the conflicts and their files.","Resolve or discard the conflicting local/remote changes indicated by the status output.","Clear the conflict state (re-sync or reset via mise dot subcommands) and re-run the bootstrap.","Use --dry-run first to inspect what setup would do before applying it."],"exampleFix":"// before\nmise dot   # fails: setup has conflicts\n// after\nmise dot status        # inspect conflicts\nmise dot sync --resolve theirs   # or resolve manually\nmise dot               # re-run bootstrap","handlingStrategy":"validation","validationCode":"const status = JSON.parse(require('child_process').execSync('mise dot status --output json').toString());\nif (status.conflicts?.length) { throw new Error('resolve conflicts before bootstrap: ' + status.conflicts.join(', ')); }","typeGuard":"function hasConflicts(status) { return Array.isArray(status?.conflicts) && status.conflicts.length > 0; }","tryCatchPattern":null,"preventionTips":["Run `mise dot status` before bootstrapping in scripts","Resolve conflicts immediately after sync failures","Avoid concurrent mise dot runs on the same state directory"],"tags":["cli","dot","conflict","bootstrap"],"backgroundTag":"invalid-state-transition","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"}