jdx/mise · error
unsupported dotfile repository format
Error message
unsupported dotfile repository format {} What it means
The dotfile manifest schema only supports repository `format` 1. `validate` rejects any manifest written with a different (usually newer) format version so the tool never misinterprets unknown fields or semantics.
Solutions
- Upgrade the tool to a version that supports the manifest's format value
- Set the manifest's `format` back to 1 if it was changed by mistake and the content is format-1 compatible
- Regenerate the manifest from a known-good backup or via the tool's own export/init path
Example fix
// before format = 2 // after format = 1
Defensive patterns
Strategy: validation
Validate before calling
fn assert_supported_format(manifest: &Manifest) -> Result<(), String> {
if manifest.format != 1 { Err(format!("format {} unsupported", manifest.format)) } else { Ok(()) }
} Try / catch
match manifest.validate() {
Err(e) if e.to_string().starts_with("unsupported dotfile repository format") => {
// upgrade tool or rewrite manifest with format = 1
}
other => other,
} Prevention
- Never hand-edit the `format` field
- Pin the tool version across machines that share the manifest
- Upgrade the tool before syncing manifests produced by newer releases
When it happens
Trigger: Calling `validate` (directly or via `tracking`/`write`/permission capture) on a manifest whose `format` field is not 1 — e.g. a manifest produced by a newer tool version or hand-edited to another number.
Common situations: Opening a manifest created by a newer release with an older binary; manually bumping `format` expecting migration; a corrupted manifest where the format field got mangled.
Related errors
- dotfile enrollment metadata must be a regular file
- invalid or repeated enrollment path
- invalid or repeated variant for
- invalid or unenrolled permission path
- unsupported lockfile version
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/4cb964b715cae788.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/history/manifest.rs:358
variant != selected.as_deref()
&& variant.is_some_and(|name| {
entry.variants.iter().any(|variant| variant.name() == name)
})
}
};
if carry {
overlays.push(Overlay {
path: file.path,
object: Some((file.mode, file.oid)),
});
}
}
repo.compose(tree, &overlays)
}
pub(crate) fn validate(&self) -> Result<()> {
if self.format != 1 {
bail!("unsupported dotfile repository format {}", self.format);
}
let mut paths = std::collections::BTreeSet::new();
for entry in &self.enrollment {
if !super::sync::layout::is_safe_branch_path(&entry.path)
|| !(entry.path.starts_with("home/")
|| entry.path == "config"
|| entry.path.starts_with("config/"))
|| !paths.insert(&entry.path)
{
bail!("invalid or repeated enrollment path {}", entry.path);
}
let mut variants = std::collections::BTreeSet::new();
super::select::validate(&entry.variants)?;
for variant in &entry.variants {
let name = variant.name();
if name.contains('@')
|| !super::sync::layout::is_safe_branch_path(&name)
|| !variants.insert(name)View on GitHub (pinned to 533346cc37)