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
- 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.
- On each machine, set the origin locally instead: run `mise bootstrap dotfiles origin set <origin>`.
- 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
- Keep `[history] origin` only in machine-local, untracked config files.
- Review shared config diffs for machine-specific keys before pushing.
- Use a repo hook or CI check that greps tracked TOML for `history.origin`.
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
- setup history changed during adoption; retry pull
- cannot check staged changes in {}: {}
- local and origin histories are unrelated; use a fresh setup
- incoming files changed while preparing adoption; plan again
- incoming configuration must be a regular file: {}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/2967004d98e346fe.
Report an issue: GitHub.