jdx/mise · error

incoming history.origin is machine-local configuration; remo

Error message

incoming history.origin is machine-local configuration; remove it from the shared setup and use `mise bootstrap dotfiles origin set` on this machine ({})

What it means

mise treats `[history] origin` as machine-local state (where THIS machine stores its saved history), not as shareable configuration. During preflight of incoming shared configuration, if any incoming TOML declares `history.origin`, mise aborts because one machine's local path/state must never be distributed through the shared setup. The fix is to remove it from the shared file and set the origin per machine with `mise bootstrap dotfiles origin set`.

Source

Thrown at src/system/history/sync/preflight.rs:62

        {
            continue;
        }
        let Some((mode, oid)) = object else {
            continue;
        };
        if mode != "100644" && mode != "100755" {
            bail!(
                "incoming configuration must be a regular file: {}",
                path.display()
            );
        }
        let body = String::from_utf8(repo.cat_object(oid)?)?;
        let parsed = MiseToml::for_history_preflight(&body, path)?;
        if parsed
            .history_config()
            .is_some_and(|history| history.origin.is_some())
        {
            bail!(
                "incoming history.origin is machine-local configuration; remove it from the shared setup and use `mise bootstrap dotfiles origin set` on this machine ({})",
                path.display()
            );
        }
        incoming_files.insert(
            path.clone(),
            Arc::new(parsed) as Arc<dyn crate::config::config_file::ConfigFile>,
        );
    }
    crate::system::files::validate_incoming_files(&incoming_files)?;
    let global = match &*crate::env::MISE_GLOBAL_CONFIG_FILE {
        Some(path) => vec![path.clone()].into_iter().collect(),
        None => candidates,
    };
    let mut files = ConfigMap::new();
    let mut excludes = vec![];
    for path in crate::config::system_config_files()
        .into_iter()

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Edit the shared config file in the repository and delete the `origin` key under `[history]` (or the whole machine-local section), then commit and pull.
  2. On each machine, set the origin locally instead: run `mise bootstrap dotfiles origin set <origin>`.
  3. Keep machine-local history settings in an untracked/machine-specific config file that is not committed to the shared repo.

Example fix

// before (shared mise.toml)
[history]
origin = "ssh://git@example.com/team/history.git"

// after (shared mise.toml — key removed)
# per machine instead:
# mise bootstrap dotfiles origin set ssh://git@example.com/team/history.git
Defensive patterns

Strategy: validation

Validate before calling

const body = await readTrackedConfig(path);
if (/^\s*\[history\][\s\S]*?^\s*origin\s*=/m.test(body)) {
  throw new Error(`remove machine-local [history] origin from shared config: ${path}`);
}

Try / catch

try {
  await syncPull();
} catch (e) {
  if (String(e.message).includes("history.origin is machine-local")) {
    console.error("Move origin to per-machine config: mise bootstrap dotfiles origin set");
  } else throw e;
}

Prevention

When it happens

Trigger: A committed config file in the shared repository contains a `[history]` section with an `origin` key. Raised in `prospective` after `MiseToml::for_history_preflight` parses the incoming body and `parsed.history_config().origin.is_some()`.

Common situations: A user ran `mise bootstrap dotfiles origin set` and the setting got written into a tracked/shared config file instead of a machine-local one; the origin line was copy-pasted from another machine's config into the repo.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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