{"record":{"id":"5834de0747b4bbf2","repo":"BoundaryML/baml","slug":"unsupported-manifest-schema-schema","errorCode":null,"errorMessage":"unsupported manifest schema {schema}","messagePattern":"unsupported manifest schema (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"baml_language/crates/baml_release/src/manifest.rs","lineNumber":134,"sourceCode":"        validate_schema(self.schema)?;\n        validate_artifacts(&self.version, &self.artifacts)\n    }\n\n    pub fn artifact_for_target(&self, target: &str) -> anyhow::Result<&Artifact> {\n        self.artifacts.get(target).ok_or_else(|| {\n            anyhow::anyhow!(\"target {target} not built for wrapper {}\", self.version)\n        })\n    }\n}\n\nfn validate_schema(schema: u32) -> anyhow::Result<()> {\n    if schema > MANIFEST_SCHEMA {\n        anyhow::bail!(\n            \"manifest schema {schema} is newer than this wrapper; run `baml self-update`\"\n        );\n    }\n    if schema != MANIFEST_SCHEMA {\n        anyhow::bail!(\"unsupported manifest schema {schema}\");\n    }\n    Ok(())\n}\n\nfn validate_artifacts(version: &str, artifacts: &BTreeMap<String, Artifact>) -> anyhow::Result<()> {\n    let expected: std::collections::BTreeSet<_> =\n        SUPPORTED_RELEASE_TARGETS.iter().copied().collect();\n    let actual: std::collections::BTreeSet<_> = artifacts.keys().map(String::as_str).collect();\n    if actual != expected {\n        anyhow::bail!(\"manifest for {version} has target set {actual:?}; expected {expected:?}\");\n    }\n    for (target, artifact) in artifacts {\n        validate_artifact(target, artifact)?;\n    }\n    Ok(())\n}\n\nfn validate_artifact(name: &str, artifact: &Artifact) -> anyhow::Result<()> {","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/baml_language/crates/baml_release/src/manifest.rs#L116-L152","documentation":"validate_schema also rejects schema values that differ from MANIFEST_SCHEMA in the other direction: any schema less than the current one (after ruling out newer schemas) bails with \"unsupported manifest schema {schema}\". The wrapper only understands exactly one schema version; older manifest formats are intentionally not supported.","triggerScenarios":"Parsing a manifest whose `schema` field is a valid u32 but lower than MANIFEST_SCHEMA, passed through validate() -> validate_schema(); e.g. a cached or archived manifest from an old release.","commonSituations":"Air-gapped environments replaying cached manifests from old releases; restoring an old wrapper data directory; manifests copied from an old project's vendored files; tampered or hand-edited schema fields.","solutions":["Re-fetch the manifest from the current release so its schema matches MANIFEST_SCHEMA.","Delete stale cached manifests and re-run the install/update command.","Stop hand-editing the `schema` field; let the tool regenerate manifests.","If you must support old formats, upgrade the wrapper rather than downgrading schema expectations."],"exampleFix":"// before\nlet m = parse(cached_manifest_from_v0_90)?; // schema 1\n// after\nlet fresh = download_manifest(current_version)?;\nlet m = parse(fresh)?;","handlingStrategy":"try-catch","validationCode":"if manifest.schema < KNOWN_MAX_SCHEMA && manifest.schema != CURRENT_SCHEMA {\n    eprintln!(\"stale manifest schema {}; re-fetch current manifest\", manifest.schema);\n}","typeGuard":null,"tryCatchPattern":"match parse_manifest(json) {\n    Err(e) if e.to_string().contains(\"unsupported manifest schema\") => { re_fetch_current_manifest()?; parse_manifest(&fresh_json) }\n    r => r,\n}","preventionTips":["Always parse freshly fetched manifests, not cached/archived copies.","Never hand-edit the schema field of manifests.","Purge stale manifest caches when upgrading tooling."],"tags":["manifest","schema","version-compatibility","validation"],"backgroundTag":"schema-validation-failed","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}