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

  1. Upgrade mise to the version that wrote the lockfile so the new provenance format is understood.
  2. Replace the unknown provenance table with the supported SLSA form: [tools.<name>.provenance.slsa] url = "...".
  3. 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

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


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)