{"record":{"id":"1d87df7419f64a4c","repo":"herdrdev/herdr","slug":"curl-failed-err","errorCode":null,"errorMessage":"curl failed: {err}","messagePattern":"curl failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/remote/attach.rs","lineNumber":1472,"sourceCode":"    }\n\n    Ok(InstallSource::temporary(path, dir))\n}\n\nfn fetch_remote_manifest(url: &str) -> io::Result<Vec<u8>> {\n    let output = crate::noninteractive_process::curl_command()\n        .args([\n            \"-sfL\",\n            \"--retry\",\n            \"3\",\n            \"--connect-timeout\",\n            \"10\",\n            \"--max-time\",\n            \"20\",\n            url,\n        ])\n        .output()\n        .map_err(|err| io::Error::new(err.kind(), format!(\"curl failed: {err}\")))?;\n    if !output.status.success() {\n        return Err(command_failed(\"failed to fetch update manifest\", &output));\n    }\n    Ok(output.stdout)\n}\n\nfn remote_asset_info(asset: &RemoteAssetRef) -> RemoteReleaseAsset {\n    RemoteReleaseAsset {\n        url: asset.url().to_string(),\n        sha256: asset.sha256().map(str::to_string),\n    }\n}\n\nfn preview_assets_for_build<'a>(\n    manifest: &'a RemotePreviewManifest,\n    build_id: &str,\n) -> io::Result<(u32, &'a BTreeMap<String, RemoteAssetRef>)> {\n    if manifest.build_id == build_id {","sourceCodeStart":1454,"sourceCodeEnd":1490,"githubUrl":"https://github.com/herdrdev/herdr/blob/f457cff4f2648eee85d176f8a41861241d4e8428/src/remote/attach.rs#L1454-L1490","documentation":"When fetching the update manifest over HTTP, the curl invocation's .output() call failed to spawn at all. The spawn error is wrapped as 'curl failed: {err}' with the original error kind.","triggerScenarios":"curl binary missing, not executable, wrong architecture, or process creation blocked (sandbox, resource limits) while fetching the update manifest URL.","commonSituations":"Minimal Docker images, hardened sandboxes denying exec, PATH differences in non-interactive SSH environments.","solutions":["Confirm curl --version works in the exact environment herdr runs in","Install curl or fix PATH so the spawn succeeds","If sandboxed, allow exec of curl or pre-seed the manifest locally"],"exampleFix":"# before: no curl in image\n# after\nRUN apt-get update && apt-get install -y curl","handlingStrategy":"fallback","validationCode":"if !curl_available() { eprintln!(\"curl required for update checks\"); }","typeGuard":null,"tryCatchPattern":"match fetch_manifest(url) {\n    Err(e) if e.to_string().contains(\"curl failed\") => use_cached_manifest(),\n    r => r,\n}","preventionTips":["Install curl and verify PATH before relying on update checks","Cache the last good manifest as a fallback"],"tags":["curl","spawn","update-manifest","network","rust"],"backgroundTag":"curl-spawn-failed","analyzedSha":"f457cff4f2648eee85d176f8a41861241d4e8428","analyzedAt":"2026-08-28T15:41:09.197Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}