{"record":{"id":"6f68521d4971526d","repo":"jdx/mise","slug":"the-setup-from-url-is-paused-nothing-was-bootstrapped-mise","errorCode":null,"errorMessage":"the setup from {url} is paused; nothing was bootstrapped. `mise dot status` lists the paths that need attention. Existing files that differ are kept until you decide: `mise dot pull --take-remote-all` chooses the repository's version for every conflict, or `mise dot pull --take-remote <path>` and `mise dot pull --keep-local <path>` decide one at a time. A path held for another reason, such as a directory where the repository has a file, says so in `mise dot status` and needs that fix instead. Then run `mise bootstrap`","messagePattern":"the setup from \\{url\\} is paused; nothing was bootstrapped\\. `mise dot status` lists the paths that need attention\\. Existing files that differ are kept until you decide: `mise dot pull --take-remote-all` chooses the repository's version for every conflict, or `mise dot pull --take-remote <path>` and `mise dot pull --keep-local <path>` decide one at a time\\. A path held for another reason, such as a directory where the repository has a file, says so in `mise dot status` and needs that fix instead\\. Then run `mise bootstrap`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/bootstrap.rs","lineNumber":1879,"sourceCode":"                url,\n                self.yes,\n                self.dry_run,\n                self.replace_history,\n            )\n            .await?\n        {\n            if self.dry_run {\n                if let Some(preview) = outcome.preview_config.as_ref() {\n                    self.run_child_bootstrap(preview.path().to_path_buf())\n                        .await?;\n                }\n                return Ok(());\n            }\n            // the configuration that arrived is what to bootstrap from; one\n            // held for a decision leaves the existing one, whose tasks and\n            // installations are not what was asked for\n            if outcome.setup_held {\n                bail!(\n                    \"the setup from {url} is paused; nothing was bootstrapped. `mise dot status` lists the paths that need attention. Existing files that differ are kept until you decide: `mise dot pull --take-remote-all` chooses the repository's version for every conflict, or `mise dot pull --take-remote <path>` and `mise dot pull --keep-local <path>` decide one at a time. A path held for another reason, such as a directory where the repository has a file, says so in `mise dot status` and needs that fix instead. Then run `mise bootstrap`\"\n                );\n            }\n            let config_dir = system::history::tracked::global_config_dir();\n            self.run_child_bootstrap(config_dir).await?;\n            if !outcome.durable_access {\n                warn!(\"ongoing synchronization still needs credentials on this host (see above)\");\n            }\n            return Ok(());\n        }\n        let (url, checkout) = if let Some(url) = expanded.as_deref() {\n            let checkout = crate::env::MISE_GLOBAL_CONFIG_FILE\n                .as_deref()\n                .map(|path| {\n                    path.parent()\n                        .filter(|parent| !parent.as_os_str().is_empty())\n                        .unwrap_or_else(|| Path::new(\".\"))\n                })","sourceCodeStart":1861,"sourceCodeEnd":1897,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/bootstrap.rs#L1861-L1897","documentation":"After pulling the configured setup from the remote, at least one path was held for a decision (setup_held). Because bootstrapping from a partially-held configuration would run the wrong tasks/installations, mise aborts with guidance to resolve conflicts via `mise dot status` / `mise dot pull` flags.","triggerScenarios":"Running `mise bootstrap --from <url>` where the dotfile sync outcome flagged setup_held — local files differ from the repo and no take-remote/keep-local decision has been recorded.","commonSituations":"First bootstrap onto a machine with existing dotfiles that conflict; a directory exists where the repo has a file, or vice versa.","solutions":["Run `mise dot status` to list held paths and their reasons.","Resolve file conflicts: `mise dot pull --take-remote-all`, or per-path `--take-remote <path>` / `--keep-local <path>`.","Fix structural holds (e.g. remove the local directory where the repo has a file), then re-run `mise bootstrap`."],"exampleFix":"// before\nmise bootstrap --from https://github.com/me/dotfiles  # paused: conflicts\n// after\nmise dot status\nmise dot pull --take-remote-all\nmise bootstrap --from https://github.com/me/dotfiles","handlingStrategy":"validation","validationCode":"mise dot status | grep -i held && echo \"resolve holds before bootstrap\"","typeGuard":null,"tryCatchPattern":"mise bootstrap --from \"$URL\" || { mise dot status; mise dot pull --take-remote-all; mise bootstrap --from \"$URL\"; }","preventionTips":["Run `mise dot status` after pulling config changes.","Decide conflicts promptly with --take-remote/--keep-local flags.","Keep local dotfiles in sync to reduce conflicts."],"tags":["bootstrap","dotfiles","conflict"],"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"}