jdx/mise · error

the setup from {url} is paused; nothing was bootstrapped. `m

Error message

the setup from {url} is paused; nothing was bootstrapped. `mise bootstrap dotfiles status` lists the paths that need attention; resolve them with `mise bootstrap dotfiles pull`, then run `mise bootstrap`

What it means

Thrown by `mise bootstrap dotfiles pull` when the pull operation succeeded but the fetched setup is marked as held (paused, e.g. awaiting a decision on a conflicting configuration), so nothing was actually bootstrapped. The error halts the flow and points the user at `bootstrap dotfiles status` to inspect and resolve the pending paths before re-running the bootstrap.

Source

Thrown at src/cli/bootstrap.rs:1897

        // configuration directory: its branch goes into mise's own store and
        // its files are written by the same recoverable pull as any other
        // incoming change; the ordinary bootstrap then runs from them
        if let Some(url) = expanded.as_deref()
            && let Some(outcome) =
                system::history::sync::onboard::from_git(url, self.yes, self.dry_run).await?
        {
            if self.dry_run {
                if let Some(preview) = outcome.preview_config.as_ref() {
                    self.run_child_bootstrap(preview.path().to_path_buf())
                        .await?;
                }
                return Ok(());
            }
            // the configuration that arrived is what to bootstrap from; one
            // held for a decision leaves the existing one, whose tasks and
            // installations are not what was asked for
            if outcome.setup_held {
                bail!(
                    "the setup from {url} is paused; nothing was bootstrapped. `mise bootstrap dotfiles status` lists the paths that need attention; resolve them with `mise bootstrap dotfiles pull`, then run `mise bootstrap`"
                );
            }
            let config_dir = system::history::tracked::global_config_dir();
            self.run_child_bootstrap(config_dir).await?;
            if !outcome.durable_access {
                warn!("ongoing synchronization still needs credentials on this host (see above)");
            }
            return Ok(());
        }
        let (url, checkout) = if let Some(url) = expanded.as_deref() {
            let checkout = crate::env::MISE_GLOBAL_CONFIG_FILE
                .as_deref()
                .map(|path| {
                    path.parent()
                        .filter(|parent| !parent.as_os_str().is_empty())
                        .unwrap_or_else(|| Path::new("."))
                })

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Run `mise bootstrap dotfiles status` to list the paths that need attention.
  2. Resolve each held path with `mise bootstrap dotfiles pull` (accept/decide the pending configuration).
  3. Re-run `mise bootstrap` once the status shows no held setup.
  4. If the held setup is unwanted, reset/discard the paused decision via the dotfiles subcommands before bootstrapping.

Example fix

// before (fails while setup is held)
mise bootstrap
// after
mise bootstrap dotfiles status
mise bootstrap dotfiles pull
mise bootstrap
Defensive patterns

Strategy: try-catch

Validate before calling

mise bootstrap dotfiles status | grep -q 'held\|paused' && { mise bootstrap dotfiles pull; }

Try / catch

if ! mise bootstrap; then
  mise bootstrap dotfiles status
  mise bootstrap dotfiles pull
  mise bootstrap
fi

Prevention

When it happens

Trigger: Running `mise bootstrap` (via the dotfiles pull path) when `outcome.setup_held` is true — the remote configuration that arrived is paused pending a decision, so the existing configuration is kept and no bootstrap child process is started.

Common situations: A dotfiles setup previously paused via `mise bootstrap dotfiles` decision workflows; a conflict between the incoming and existing configuration left unresolved; resuming bootstrap on a new machine where the setup was held from a prior session.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/db6055da2097cb7f. Report an issue: GitHub.