{"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":838,"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 = t\n                    .remove(\"provenance_verified\")\n                    .and_then(|value| value.as_bool());\n                let github_attestations = if provenance.is_some() {\n                    None\n                } else {\n                    github_attestations\n                };\n                let signer = match t.remove(\"signer\") {\n                    Some(toml::Value::String(s)) => Some(s),\n                    _ => None,","sourceCodeStart":820,"sourceCodeEnd":856,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/lockfile.rs#L820-L856","documentation":"Each tool version in a mise.lock can carry a `provenance` table describing how the artifact was verified (e.g. an SLSA provenance entry with a `slsa` sub-table containing a `url`). When the parser encounters a provenance table whose keys match none of the known variants, it fails rather than discarding unknown provenance data.","triggerScenarios":"Parsing a mise.lock where a tool entry's `[tools.<name>.provenance]` table has a structure the current parser doesn't know — e.g. a new variant introduced by a later mise version or hand-written provenance tables.","commonSituations":"Using a lockfile from a newer mise version; manually crafting a provenance table to bypass verification; merging lockfiles from different projects with divergent provenance formats.","solutions":["Upgrade mise to the version that wrote the lockfile so the new provenance format is understood.","Replace the unknown provenance table with the supported SLSA form: [tools.<name>.provenance.slsa] url = \"...\".","Remove the provenance table and re-run `mise lock` to regenerate valid provenance."],"exampleFix":"// before (mise.lock)\n[tools.node.22.provenance]\nunknown_field = \"x\"\n\n// after\n[tools.node.22.provenance.slsa]\nurl = \"https://example.com/provenance.json\"","handlingStrategy":"validation","validationCode":"const prov = toolEntry.get('provenance');\nif (prov && !prov.has('slsa')) throw new Error('unknown provenance variant: ' + [...prov.keys()]);","typeGuard":"function isKnownProvenance(v) { return v == null || (typeof v === 'object' && 'slsa' in v); }","tryCatchPattern":null,"preventionTips":["Only let mise write provenance tables; don't hand-craft them.","Upgrade all collaborators' mise together to avoid format skew.","Validate lockfile TOML structure in CI when merging lockfile changes."],"tags":["lockfile","parsing","provenance","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"}