screenpipe/screenpipe · error

status: {}

Error message

status: {}

What it means

Wraps a failure of manager.get_status() at the start of run_download. get_status queries the remote archive service for blob counts/stats needed to initialize DownloadProgress.total_blobs; any network, auth, or serialization failure is re-wrapped as 'status: {}'.

Source

Thrown at crates/screenpipe-engine/src/archive.rs:516

                    guard.bytes_written,
                    output_dir.display()
                );
            }
        }
    })
}

/// Download every archived blob and write it to `output_dir`.
async fn run_download(
    manager: &SyncManager,
    output_dir: &std::path::Path,
    progress: &Arc<RwLock<DownloadProgress>>,
) -> anyhow::Result<()> {
    // Determine the time span of archived data.
    let status = manager
        .get_status()
        .await
        .map_err(|e| anyhow::anyhow!("status: {}", e))?;

    {
        let mut g = progress.write().await;
        g.total_blobs = status.stats.total_blobs as u64;
    }

    let start = match status.stats.oldest_data.as_deref().and_then(parse_ts) {
        Some(t) => t,
        None => {
            info!("archive-download: no archived data found");
            return Ok(());
        }
    };
    // Pad the end so the newest instant is included.
    let end = status
        .stats
        .newest_data
        .as_deref()

View on GitHub (pinned to 4ebf712990)

Solutions

  1. Check network connectivity and retry the download
  2. Refresh the archive token — a 401/403 wrapped inside this error means re-authentication is needed
  3. Inspect the root cause for HTTP status or decode errors to target the fix
  4. Retry later if the archive service is temporarily unavailable
Defensive patterns

Strategy: retry

Validate before calling

// pre-flight connectivity/token check
let reachable = tokio::net::TcpStream::connect(("archive-host", 443)).await.is_ok();
if !reachable { anyhow::bail!("archive service unreachable"); }

Try / catch

let status = loop {
    match manager.get_status().await {
        Ok(s) => break s,
        Err(e) if attempts < 3 && is_transient(&e) => { attempts += 1; backoff().await; }
        Err(e) => return Err(anyhow::anyhow!("status: {e:#}")),
    }
};

Prevention

When it happens

Trigger: spawn_download_task -> run_download calls manager.get_status().await before paging through blobs; the request fails (network error, 401/403 from an invalid token, unexpected server response).

Common situations: Offline or flaky network during an archive export; expired archive token causing server rejection; archive backend returning an unexpected payload the client can't parse.

Related errors


AI-assisted analysis of screenpipe/screenpipe@4ebf712990 (2026-09-01). Data as JSON: /api/errors/fddbe3f82770732a. Report an issue: GitHub.