jdx/mise · error

incoming history.origin is machine-local configuration…

Error message

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

What it means

Thrown in prospective preflight when an incoming shared configuration file declares a `[history]` section with an `origin` key. history.origin is machine-local (it points at where history is stored on this machine), so it must never be distributed via the shared setup; mise blocks the whole batch to prevent one machine's local path being applied to others.

Solutions

  1. Remove the `origin` key (or the whole `[history]` section) from the shared file and commit the fix
  2. Keep history.origin in a machine-local, non-shared config file instead
  3. On the affected machine run `mise dot origin set` to configure origin locally
  4. Pull again after the shared setup is corrected

Example fix

# before (shared mise.toml)
[history]
origin = "/home/alice/.local/share/mise/history"
# after
# remove the [history] section; run `mise dot origin set` locally instead
Defensive patterns

Strategy: validation

Validate before calling

grep -n '^origin' shared/mise.toml && echo "remove machine-local history.origin from the shared file" || echo ok

Prevention

When it happens

Trigger: A checked-in config file (e.g. the shared mise.toml) contains `[history]` with `origin = "..."`; prospective() parses the incoming file via MiseToml::for_history_preflight and detects the key.

Common situations: A user set history.origin in their local config and then committed the whole file to the shared repo; copy-pasting a personal config into the shared setup.

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@533346cc37 (2026-09-17). Data as JSON: /api/errors/ff679bec1e00a24e. Report an issue: GitHub.

Appendix: 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 dot 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 533346cc37)