{"record":{"id":"a9022a17d24dd975","repo":"jdx/mise","slug":"unrecognized-github-attestations-status-s-in-l","errorCode":null,"errorMessage":"unrecognized github_attestations status {s:?} in lockfile","messagePattern":"unrecognized github_attestations status (.+?) in lockfile","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lockfile.rs","lineNumber":783,"sourceCode":"                };\n                let url_api = match t.remove(\"url_api\") {\n                    Some(toml::Value::String(s)) => Some(s),\n                    _ => None,\n                };\n                let conda_deps = match t.remove(\"conda_deps\") {\n                    Some(toml::Value::Array(arr)) => Some(\n                        arr.into_iter()\n                            .filter_map(|v| v.as_str().map(String::from))\n                            .collect(),\n                    ),\n                    _ => None,\n                };\n                let github_attestations = match t.remove(\"github_attestations\") {\n                    Some(toml::Value::String(s)) if s == \"unavailable\" => {\n                        Some(GithubAttestationsStatus::Unavailable)\n                    }\n                    Some(toml::Value::String(s)) => {\n                        bail!(\"unrecognized github_attestations status {s:?} in lockfile\")\n                    }\n                    _ => None,\n                };\n                let pkgx_deps = match t.remove(\"pkgx_deps\") {\n                    Some(toml::Value::Array(arr)) => Some(\n                        arr.into_iter()\n                            .filter_map(|v| v.as_str().map(String::from))\n                            .collect(),\n                    ),\n                    _ => None,\n                };\n                let pkgx_provides = match t.remove(\"pkgx_provides\") {\n                    Some(toml::Value::Array(arr)) => Some(\n                        arr.into_iter()\n                            .filter_map(|v| v.as_str().map(String::from))\n                            .collect(),\n                    ),\n                    _ => None,","sourceCodeStart":765,"sourceCodeEnd":801,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/lockfile.rs#L765-L801","documentation":"When parsing a mise lockfile, each tool entry may carry a `github_attestations` field. It is only allowed to hold the literal string \"unavailable\" (mapped to GithubAttestationsStatus::Unavailable). Any other string is rejected because the lockfile parser has no known meaning for it, protecting against silently ignoring tampered or hand-edited provenance data.","triggerScenarios":"Parsing a `mise.lock` whose tool entry contains `github_attestations = \"<something other than unavailable>\"` — typically written by a newer mise version that introduced an additional status variant, or by manual editing.","commonSituations":"Opening a lockfile generated by a newer mise release in an older mise; hand-editing lockfile fields to silence attestation checks; copy-pasting tool entries between lockfiles with modified attestation values.","solutions":["Upgrade mise to the latest version so the newer github_attestations status is recognized.","Edit mise.lock and change the value to \"unavailable\" or delete the github_attestations key entirely.","Delete the tool's entry (or the whole lockfile) and re-lock with `mise lock` so provenance is regenerated correctly."],"exampleFix":"// before (mise.lock)\ngithub_attestations = \"verified\"\n\n// after\ngithub_attestations = \"unavailable\"","handlingStrategy":"validation","validationCode":"const v = doc.get('tools')?.flatMap(t => t.get('github_attestations')).filter(Boolean);\nconst bad = v.filter(s => s !== 'unavailable');\nif (bad.length) throw new Error(`unsupported github_attestations: ${bad}`);","typeGuard":"function isGithubAttestationsStatus(v) { return v === 'unavailable'; }","tryCatchPattern":null,"preventionTips":["Keep mise up to date across all machines and CI before sharing lockfiles.","Never hand-edit attestation fields in mise.lock; regenerate with `mise lock`.","Treat mise.lock as a generated artifact and review diffs rather than editing it."],"tags":["lockfile","parsing","attestations","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"}