{"record":{"id":"e62f08551e1b916d","repo":"jdx/mise","slug":"unrecognized-install-s-in-lockfile","errorCode":null,"errorMessage":"unrecognized install {s:?} in lockfile","messagePattern":"unrecognized install (.+?) in lockfile","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lockfile.rs","lineNumber":749,"sourceCode":"                merge_additional_artifacts(&self.additional_artifacts, &other.additional_artifacts)\n            },\n        }\n    }\n}\n\nimpl TryFrom<toml::Value> for PlatformInfo {\n    type Error = Report;\n    fn try_from(value: toml::Value) -> Result<Self> {\n        match value {\n            toml::Value::String(checksum) => Ok(PlatformInfo {\n                checksum: Some(checksum),\n                ..Default::default()\n            }),\n            toml::Value::Table(mut t) => {\n                let install = match t.remove(\"install\") {\n                    Some(toml::Value::String(s)) if s == \"source\" => Some(s),\n                    Some(toml::Value::String(s)) => {\n                        bail!(\"unrecognized install {s:?} in lockfile\")\n                    }\n                    _ => None,\n                };\n                let checksum = match t.remove(\"checksum\") {\n                    Some(toml::Value::String(s)) => Some(s),\n                    _ => None,\n                };\n                let size = t\n                    .remove(\"size\")\n                    .and_then(|v| v.as_integer())\n                    .map(|i| i.try_into())\n                    .transpose()?;\n                let url = match t.remove(\"url\") {\n                    Some(toml::Value::String(s)) => Some(s),\n                    _ => None,\n                };\n                let url_api = match t.remove(\"url_api\") {\n                    Some(toml::Value::String(s)) => Some(s),","sourceCodeStart":731,"sourceCodeEnd":767,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/lockfile.rs#L731-L767","documentation":"Thrown when parsing a lockfile tool entry whose `install` field is a string other than the accepted value \"source\". The lockfile records how a version was installed; any other string indicates an unknown or corrupted entry.","triggerScenarios":"mise.lock contains `install = \"binary\"` (or any non-\"source\" string) under a tool version entry — usually from a newer/older mise version writing a different enum, or manual editing.","commonSituations":"Hand-editing the lockfile; version skew between mise versions with different lockfile schemas; corrupted merge.","solutions":["Remove the invalid `install` key from the entry (it will be re-recorded on next install)","Restore mise.lock from git","Upgrade/downgrade mise to the version that wrote the lockfile, then regenerate","Delete mise.lock and re-run `mise install` to regenerate"],"exampleFix":"# before\n[tools.node.v22.0.0]\ninstall = \"binary\"\n# after\n[tools.node.v22.0.0]\ninstall = \"source\"","handlingStrategy":"validation","validationCode":"grep -nE 'install\\s*=\\s*\"' mise.lock | grep -v '\"source\"'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only mise itself should write mise.lock","Keep mise versions consistent across machines/CI writing the lockfile","Delete and regenerate the lockfile after schema changes"],"tags":["lockfile","validation","enum","config"],"backgroundTag":"invalid-enum-value","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}