{"record":{"id":"098f703fcf8d5746","repo":"BoundaryML/baml","slug":"no-asset-named-in-release","errorCode":null,"errorMessage":"No asset named '{}' in release","messagePattern":"No asset named '(.+?)' in release","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/playground-server/src/server.rs","lineNumber":165,"sourceCode":"            status,\n            body\n        ));\n    }\n\n    tracing::info!(\"Parsing JSON response...\");\n    let release: serde_json::Value = resp\n        .json()\n        .await\n        .map_err(|e| anyhow::anyhow!(\"Failed to parse JSON response: {e}\"))?;\n\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","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/playground-server/src/server.rs#L147-L183","documentation":"get_playground_dist searches the release's assets for one whose \"name\" equals the expected web panel asset name. If no asset matches, this error names the missing asset. The release exists but does not contain the playground web panel artifact the server needs.","triggerScenarios":"None of the release assets' name fields equals web_panel_asset_name — the release was built without the web panel asset or the expected asset name changed between versions.","commonSituations":"Server version newer than the release assets (asset naming changed); a partially uploaded release; fetching the wrong release (latest vs pinned tag) whose assets are named differently.","solutions":["List the release assets (via the GitHub UI or API) and compare their names with the expected asset name.","Align the server version with the release that contains the expected asset (pin the version instead of using latest).","Re-publish the release with the missing web panel asset if the release build omitted it."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// preflight: confirm the expected asset exists in the release\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\"] == \"baml-playground-web.tar.gz\")\n});\nif !found { eprintln!(\"Expected web panel asset missing from release\"); }","typeGuard":"fn asset_exists<'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 asset named\") => {\n        eprintln!(\"Version mismatch between server and release assets; pin server version\");\n    }\n    other => other?,\n}","preventionTips":["Keep server version and release asset naming in lockstep","Pin to releases verified to contain the expected asset","Diff release asset names after version upgrades","Alert on release builds missing required assets"],"tags":["github-api","release-assets","version-mismatch","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"}