{"record":{"id":"3396be6883865276","repo":"jdx/mise","slug":"unrecognized-provenance-table-format-in-lockfile","errorCode":null,"errorMessage":"unrecognized provenance table format in lockfile: {:?}","messagePattern":"unrecognized provenance table format in lockfile: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lockfile.rs","lineNumber":639,"sourceCode":"                        if let ProvenanceType::Slsa { ref mut url } = prov {\n                            *url = legacy_provenance_url;\n                        }\n                        Some(prov)\n                    }\n                    Some(toml::Value::Table(mut prov_table)) => {\n                        if let Some(slsa_val) = prov_table.remove(\"slsa\") {\n                            let slsa_url = match slsa_val {\n                                toml::Value::Table(mut st) => match st.remove(\"url\") {\n                                    Some(toml::Value::String(u)) => Some(u),\n                                    _ => None,\n                                },\n                                _ => None,\n                            };\n                            Some(ProvenanceType::Slsa { url: slsa_url })\n                        } else {\n                            // Unknown table variant\n                            let keys: Vec<_> = prov_table.keys().cloned().collect();\n                            bail!(\n                                \"unrecognized provenance table format in lockfile: {:?}\",\n                                keys\n                            );\n                        }\n                    }\n                    _ => None,\n                };\n                let provenance_verified = provenance.is_some()\n                    && matches!(\n                        t.remove(\"provenance_verified\"),\n                        Some(toml::Value::Boolean(true))\n                    );\n                let github_attestations = if provenance.is_some() {\n                    None\n                } else {\n                    github_attestations\n                };\n                let additional_artifacts = match t.remove(\"additional_artifacts\") {","sourceCodeStart":621,"sourceCodeEnd":657,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/lockfile.rs#L621-L657","documentation":"A platform table's provenance entry must be a table containing an slsa sub-table (optionally with a url); if the provenance table holds any other key, mise bails listing the offending keys (src/lockfile.rs:626-643). The format is unknown to this build — a forward-compatibility guard.","triggerScenarios":"mise.lock contains provenance = { <keys other than slsa> } — written by a newer mise release that added a new provenance type, read by an older build; or provenance keys added by hand.","commonSituations":"Version skew across team/CI after upgrading mise on one machine; lockfiles produced by newer formats consumed by pinned older versions.","solutions":["Upgrade mise to the writer's version or newer.","Regenerate the lockfile: rm mise.lock && mise lock.","Pin mise repo-wide and upgrade writer and readers together.","Use the printed key list to locate the offending entry if investigating."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"# CI guard: every provenance table must contain an slsa key\npython3 -c \"\nimport tomllib\n\ndef walk(v):\n    if isinstance(v, dict):\n        if 'provenance' in v and isinstance(v['provenance'], dict) and 'slsa' not in v['provenance']:\n            raise SystemExit('unsupported provenance keys: %s' % list(v['provenance']))\n        for x in v.values(): walk(x)\n    elif isinstance(v, list):\n        for x in v: walk(x)\n\nwalk(tomllib.load(open('mise.lock', 'rb')))\n\"","typeGuard":null,"tryCatchPattern":"Treat \"unrecognized provenance table format\" as a version-skew signal: upgrade mise to match the writer or regenerate the lockfile; the error prints the offending keys, so report those in the job log before failing.","preventionTips":["Align mise versions between lockfile writer and readers.","Regenerate mise.lock after upgrades; do not merge old and new sections by hand.","Review lockfile diffs in PRs to catch new/unknown format keys early."],"tags":["lockfile","parse","provenance","version-mismatch"],"backgroundTag":"lockfile-schema-mismatch","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}