{"record":{"id":"4cb964b715cae788","repo":"jdx/mise","slug":"unsupported-dotfile-repository-format","errorCode":null,"errorMessage":"unsupported dotfile repository format {}","messagePattern":"unsupported dotfile repository format (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/history/manifest.rs","lineNumber":358,"sourceCode":"                    variant != selected.as_deref()\n                        && variant.is_some_and(|name| {\n                            entry.variants.iter().any(|variant| variant.name() == name)\n                        })\n                }\n            };\n            if carry {\n                overlays.push(Overlay {\n                    path: file.path,\n                    object: Some((file.mode, file.oid)),\n                });\n            }\n        }\n        repo.compose(tree, &overlays)\n    }\n\n    pub(crate) fn validate(&self) -> Result<()> {\n        if self.format != 1 {\n            bail!(\"unsupported dotfile repository format {}\", self.format);\n        }\n        let mut paths = std::collections::BTreeSet::new();\n        for entry in &self.enrollment {\n            if !super::sync::layout::is_safe_branch_path(&entry.path)\n                || !(entry.path.starts_with(\"home/\")\n                    || entry.path == \"config\"\n                    || entry.path.starts_with(\"config/\"))\n                || !paths.insert(&entry.path)\n            {\n                bail!(\"invalid or repeated enrollment path {}\", entry.path);\n            }\n            let mut variants = std::collections::BTreeSet::new();\n            super::select::validate(&entry.variants)?;\n            for variant in &entry.variants {\n                let name = variant.name();\n                if name.contains('@')\n                    || !super::sync::layout::is_safe_branch_path(&name)\n                    || !variants.insert(name)","sourceCodeStart":340,"sourceCodeEnd":376,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/history/manifest.rs#L340-L376","documentation":"Thrown by `Manifest::validate` when the dotfile repository manifest's `format` field is not 1. The library only understands manifest format version 1; a newer (or corrupted) format is rejected up front so it never misreads unknown fields.","triggerScenarios":"A manifest written by a newer version of the tool (format bumped), a hand-edited manifest with a wrong `format` integer, or corruption of the stored manifest file.","commonSituations":"Downgrading mise after using a newer release that bumped the format; syncing a manifest from a machine running a development build; manually editing the manifest and mistyping the version.","solutions":["Upgrade to the tool version that supports the manifest's format number.","Set `format = 1` in the manifest if it was hand-edited to an unsupported value.","Restore the manifest from repository history or a backup if corrupted.","Re-create enrollment metadata by re-enrolling the dotfiles."],"exampleFix":"// before\nformat = 2\n// after\nformat = 1","handlingStrategy":"validation","validationCode":"// [ -f manifest ] && grep -q '^format = 1$' manifest || echo \"unsupported manifest\"","typeGuard":null,"tryCatchPattern":"// on \"unsupported dotfile repository format N\": upgrade the tool\n// (or restore a format=1 manifest) before retrying","preventionTips":["Never hand-edit the manifest `format` field.","Keep all machines on compatible tool versions when syncing.","Back up the manifest before tool upgrades or downgrades."],"tags":["manifest","versioning","validation","compatibility"],"backgroundTag":"unsupported-config-value","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}