{"record":{"id":"647a26a8997e8302","repo":"BoundaryML/baml","slug":"no-checksum-asset-named-in-release","errorCode":null,"errorMessage":"No checksum asset named '{}' in release","messagePattern":"No checksum asset named '(.+?)' in release","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/playground-server/src/server.rs","lineNumber":175,"sourceCode":"\n    // Find the main asset\n    let assets = release[\"assets\"]\n        .as_array()\n        .ok_or_else(|| anyhow::anyhow!(\"No assets in release metadata\"))?;\n    let asset = assets\n        .iter()\n        .find(|a| a[\"name\"].as_str() == Some(&web_panel_asset_name))\n        .ok_or_else(|| anyhow::anyhow!(\"No asset named '{}' in release\", web_panel_asset_name))?;\n    let download_url = asset[\"browser_download_url\"]\n        .as_str()\n        .ok_or_else(|| anyhow::anyhow!(\"No download URL for asset\"))?;\n\n    // Find the checksum asset\n    let checksum_asset = assets\n        .iter()\n        .find(|a| a[\"name\"].as_str() == Some(&checksum_asset_name))\n        .ok_or_else(|| {\n            anyhow::anyhow!(\n                \"No checksum asset named '{}' in release\",\n                checksum_asset_name\n            )\n        })?;\n    let checksum_url = checksum_asset[\"browser_download_url\"]\n        .as_str()\n        .ok_or_else(|| anyhow::anyhow!(\"No download URL for checksum asset\"))?;\n\n    tracing::info!(\n        \"Found assets - main: {}, checksum: {}\",\n        download_url,\n        checksum_url\n    );\n\n    // Compute extraction directory using the provided version\n    let home =\n        dirs::home_dir().ok_or_else(|| anyhow::anyhow!(\"Could not determine home directory\"))?;\n    let extract_root: PathBuf = home","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/playground-server/src/server.rs#L157-L193","documentation":"get_playground_dist also locates a checksum asset (checksum_asset_name) so it can verify the downloaded artifact. If no asset in the release matches that name, this error is thrown, mirroring the main-asset lookup. The release is missing the checksum file needed for integrity verification.","triggerScenarios":"No release asset's name equals checksum_asset_name — the release was published without the checksum (e.g. .sha256) file, or its naming convention changed.","commonSituations":"A release build pipeline change that stopped producing/uploading the checksum file; server expecting a checksum naming convention older/newer than the release's; manually edited releases.","solutions":["Check the release's asset list and confirm whether the checksum file exists under a different name.","Regenerate and upload the checksum file to the release (e.g. sha256sum <asset> > <asset>.sha256).","Align the server's expected checksum_asset_name with the release's actual naming convention, or pin to a release that includes it."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// preflight: confirm the checksum asset exists before download\nlet v: serde_json::Value = reqwest::get(&api_url).await?.json().await?;\nlet found = v[\"assets\"].as_array().map_or(false, |a| {\n    a.iter().any(|x| x[\"name\"].as_str().map_or(false, |n| n.ends_with(\".sha256\")))\n});\nif !found { eprintln!(\"Checksum asset missing from release\"); }","typeGuard":"fn checksum_asset<'a>(release: &'a serde_json::Value, name: &str) -> Option<&'a serde_json::Value> {\n    release[\"assets\"].as_array()?.iter().find(|a| a[\"name\"].as_str() == Some(name))\n}","tryCatchPattern":"match get_playground_dist().await {\n    Err(e) if e.to_string().contains(\"No checksum asset\") => {\n        eprintln!(\"Release lacks checksum file; upload it or skip strict verification explicitly\");\n    }\n    other => other?,\n}","preventionTips":["Ensure release CI uploads a checksum file for every artifact","Keep checksum naming convention stable across versions","Verify release contents before publishing","Pin to releases that include checksums"],"tags":["github-api","checksum","release-assets","rust"],"backgroundTag":"resource-not-found","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}