astrid-runtime/astrid · error
{label} download failed
Error message
{label} download failed What it means
download_bounded performs the HTTP GET for update artifacts; if reqwest fails to even send the request or establish a connection, it maps the error to this labeled failure. Note the related but distinct HTTP-status failure uses the ': HTTP <status>' variant — this message specifically means the request never completed successfully at the transport level.
Source
Thrown at crates/astrid-cli/src/commands/self_update/mod.rs:355
}
fn integrity_manifest_url(release: &serde_json::Value) -> Result<&str, UpdateStageError> {
exact_asset_url(release, "BLAKE3SUMS.txt")
.map_err(|error| UpdateStageError::integrity(error.to_string()))
}
/// Stream a URL into memory under the size cap.
pub(super) async fn download_bounded(
client: &reqwest::Client,
url: &str,
limit: usize,
label: &str,
) -> anyhow::Result<Vec<u8>> {
let mut response = client
.get(url)
.send()
.await
.map_err(|_| anyhow::anyhow!("{label} download failed"))?;
if !response.status().is_success() {
bail!("{label} download failed: HTTP {}", response.status());
}
if let Some(length) = response.content_length() {
let length = usize::try_from(length)
.map_err(|_| anyhow::anyhow!("{label} exceeds {limit} byte limit"))?;
anyhow::ensure!(length <= limit, "{label} exceeds {limit} byte limit");
}
let mut bytes = Vec::new();
while let Some(chunk) = response
.chunk()
.await
.map_err(|_| anyhow::anyhow!("{label} download failed"))?
{
anyhow::ensure!(
chunk.len() <= limit.saturating_sub(bytes.len()),
"{label} exceeds {limit} byte limit"
);View on GitHub (pinned to affd8760f4)
Solutions
- Check network connectivity to github.com (and the configured repo host) and retry.
- Configure proxy environment variables (HTTPS_PROXY/HTTP_PROXY) if behind a corporate proxy.
- Fix DNS if resolution is failing (try curl to the release URL).
- Retry later if GitHub is having an outage.
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight connectivity check before updating
curl -fsSI https://api.github.com/ >/dev/null || { echo "github.com unreachable"; exit 1; } Try / catch
for attempt in 0..3 {
match download_bounded(client, url, label, limit).await {
Ok(bytes) => break Ok(bytes),
Err(e) if attempt < 2 && e.to_string().ends_with("download failed") => {
tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await;
}
Err(e) => break Err(e),
}
} Prevention
- Set HTTPS_PROXY correctly in corporate environments.
- Avoid running self update from air-gapped or firewalled hosts.
- Retry on transient failures with backoff.
- Check provider status pages during widespread outages.
When it happens
Trigger: fetching a release, archive, bundle, or manifest where the request errors out: DNS resolution failure, connection refused/reset, TLS handshake failure, or timeout in reqwest's send().
Common situations: Self-update run offline or behind a firewall blocking github.com; corporate proxy without proper env config; transient network blips; DNS problems in CI containers.
Related errors
- {label} download failed: HTTP {status}
- failed to fetch {name} from {url} (HTTP {})
- no GitHub releases found for {org}/{repo}
- GitHub API rate limit exceeded - try again later
- GitHub API returned {}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/3ba746995f761034.
Report an issue: GitHub.