BoundaryML/baml · error
No checksum asset named
Error message
No checksum asset named '{}' in release What it means
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.
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.
Defensive patterns
Strategy: validation
Validate before calling
// preflight: confirm the checksum asset exists before download
let v: serde_json::Value = reqwest::get(&api_url).await?.json().await?;
let found = v["assets"].as_array().map_or(false, |a| {
a.iter().any(|x| x["name"].as_str().map_or(false, |n| n.ends_with(".sha256")))
});
if !found { eprintln!("Checksum asset missing from release"); } Type guard
fn checksum_asset<'a>(release: &'a serde_json::Value, name: &str) -> Option<&'a serde_json::Value> {
release["assets"].as_array()?.iter().find(|a| a["name"].as_str() == Some(name))
} Try / catch
match get_playground_dist().await {
Err(e) if e.to_string().contains("No checksum asset") => {
eprintln!("Release lacks checksum file; upload it or skip strict verification explicitly");
}
other => other?,
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- No asset named ' ' in release
- blob digest mismatch for
- blob size mismatch for
- Checksum mismatch: expected
- {err}
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/647a26a8997e8302.
Report an issue: GitHub.
Appendix: source
Thrown at engine/playground-server/src/server.rs:175
// Find the main asset
let assets = release["assets"]
.as_array()
.ok_or_else(|| anyhow::anyhow!("No assets in release metadata"))?;
let asset = assets
.iter()
.find(|a| a["name"].as_str() == Some(&web_panel_asset_name))
.ok_or_else(|| anyhow::anyhow!("No asset named '{}' in release", web_panel_asset_name))?;
let download_url = asset["browser_download_url"]
.as_str()
.ok_or_else(|| anyhow::anyhow!("No download URL for asset"))?;
// Find the checksum asset
let checksum_asset = assets
.iter()
.find(|a| a["name"].as_str() == Some(&checksum_asset_name))
.ok_or_else(|| {
anyhow::anyhow!(
"No checksum asset named '{}' in release",
checksum_asset_name
)
})?;
let checksum_url = checksum_asset["browser_download_url"]
.as_str()
.ok_or_else(|| anyhow::anyhow!("No download URL for checksum asset"))?;
tracing::info!(
"Found assets - main: {}, checksum: {}",
download_url,
checksum_url
);
// Compute extraction directory using the provided version
let home =
dirs::home_dir().ok_or_else(|| anyhow::anyhow!("Could not determine home directory"))?;
let extract_root: PathBuf = homeView on GitHub (pinned to bd85ce9dee)