jdx/mise · error
unrecognized provenance table format in lockfile
Error message
unrecognized provenance table format in lockfile: {:?} What it means
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.
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.
Example fix
// before (mise.lock) [tools.node.22.provenance] unknown_field = "x" // after [tools.node.22.provenance.slsa] url = "https://example.com/provenance.json"
Defensive patterns
Strategy: validation
Validate before calling
const prov = toolEntry.get('provenance');
if (prov && !prov.has('slsa')) throw new Error('unknown provenance variant: ' + [...prov.keys()]); Type guard
function isKnownProvenance(v) { return v == null || (typeof v === 'object' && 'slsa' in v); } Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- invalid lockfile format for tool
- unrecognized attested_by
- unrecognized github_attestations status
- unsupported asset info format
- additional_artifacts must be an array in lockfile
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/3396be6883865276.
Report an issue: GitHub.
Appendix: source
Thrown at src/lockfile.rs:838
if let ProvenanceType::Slsa { ref mut url } = prov {
*url = legacy_provenance_url;
}
Some(prov)
}
Some(toml::Value::Table(mut prov_table)) => {
if let Some(slsa_val) = prov_table.remove("slsa") {
let slsa_url = match slsa_val {
toml::Value::Table(mut st) => match st.remove("url") {
Some(toml::Value::String(u)) => Some(u),
_ => None,
},
_ => None,
};
Some(ProvenanceType::Slsa { url: slsa_url })
} else {
// Unknown table variant
let keys: Vec<_> = prov_table.keys().cloned().collect();
bail!(
"unrecognized provenance table format in lockfile: {:?}",
keys
);
}
}
_ => None,
};
let provenance_verified = t
.remove("provenance_verified")
.and_then(|value| value.as_bool());
let github_attestations = if provenance.is_some() {
None
} else {
github_attestations
};
let signer = match t.remove("signer") {
Some(toml::Value::String(s)) => Some(s),
_ => None,View on GitHub (pinned to 533346cc37)