{"record":{"id":"ffa372ce3fcc0808","repo":"jdx/mise","slug":"unrecognized-provenance-table-format-in-lockfile-ffa372","errorCode":null,"errorMessage":"unrecognized provenance table format in lockfile: {keys:?}","messagePattern":"unrecognized provenance table format in lockfile: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lockfile.rs","lineNumber":679,"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 signer = match t.remove(\"signer\") {","sourceCodeStart":661,"sourceCodeEnd":697,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/lockfile.rs#L661-L697","documentation":"The lockfile entry's provenance table must match one of the known shapes (e.g. a registry/source provenance or a Slsa variant with a 'slsa' sub-table). When the table's keys match none of the recognized variants, mise reports the unknown key set with this error.","triggerScenarios":"Parsing a mise.lock tool entry whose provenance table contains unexpected keys (misspelled keys, hand-merged fragments, or a schema from a newer mise) — the parser collects the table's keys and bails listing them.","commonSituations":"Manual lockfile editing with typo'd keys (e.g. 'slsaurl' instead of a nested slsa table), merge conflicts combining two provenance variants, or cross-version lockfile schema drift.","solutions":["Fix the provenance table keys to match the documented lockfile schema (or just delete the provenance table).","Regenerate the entry with `mise lock` so mise writes a valid provenance table.","Compare with a clean lockfile for the same tool from a working checkout and copy the correct shape."],"exampleFix":"// before (mise.lock)\n[tool.node.provenance]\nslsaurl = \"https://...\"\n// after\n[tool.node.provenance.slsa]\nurl = \"https://...\"","handlingStrategy":"validation","validationCode":"# a provenance table must use documented shapes; simplest check: none or nested slsa table\ntomlq '.tool | to_entries[] | .value.provenance? // empty' mise.lock","typeGuard":null,"tryCatchPattern":"// catch\nif err.contains(\"unrecognized provenance table format\") {\n    regenerate_lockfile(); // `mise lock`\n}","preventionTips":["Regenerate provenance via `mise lock` rather than hand-writing the table.","Copy provenance blocks only from a lockfile produced by the same mise version.","Review mise.lock merge conflicts for mixed provenance shapes; re-lock instead."],"tags":["lockfile","config","validation","schema"],"backgroundTag":"schema-validation-failed","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"}