jdx/mise · error · eyre::Report

remote rustc action diagnostic blob is missing

Error message

remote rustc action diagnostic blob is missing

What it means

For rustc-adapter actions, validate_prefetched_action looks up the action's metadata digest in the fetched rustc_metadata map, then requires BOTH its stdout and stderr diagnostic digests to be present in the verified blob map. Missing diagnostics mean the cached rustc action cannot replay its recorded compiler messages.

Source

Thrown at crates/mise-cache-core/src/agent.rs:1234

    }

    fn validate_prefetched_action(
        action: &PrefetchedAction,
        verified: &BTreeMap<CacheDigest, PathBuf>,
        rustc_metadata: &BTreeMap<CacheDigest, RustcMetadata>,
        directories: &BTreeMap<CacheDigest, CacheDirectory>,
    ) -> Result<()> {
        if !verified.contains_key(&action.result.action) {
            bail!("remote action descriptor is missing");
        }
        if let Some(metadata) = &action.result.metadata {
            if action.adapter == "rustc" {
                let metadata = rustc_metadata
                    .get(metadata)
                    .ok_or_else(|| eyre::eyre!("remote rustc action metadata is missing"))?;
                for digest in [&metadata.stdout, &metadata.stderr] {
                    if !verified.contains_key(digest) {
                        bail!("remote rustc action diagnostic blob is missing");
                    }
                }
            } else if !verified.contains_key(metadata) {
                bail!("remote action metadata is missing");
            }
        }
        let mut pending = action
            .result
            .output_root
            .iter()
            .cloned()
            .collect::<Vec<_>>();
        let mut seen = BTreeMap::new();
        while let Some(digest) = pending.pop() {
            if seen.insert(digest.clone(), ()).is_some() {
                continue;
            }
            if seen.len() > MAX_PREFETCH_DIRECTORY_OBJECTS {

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Retry the run so prefetch re-attempts the full blob set, falling back to local execution on failure
  2. If persistent, delete the incomplete remote action entry (metadata + directories + manifest reference) to force re-creation
  3. Confirm all writers store stdout/stderr blobs alongside rustc metadata
Defensive patterns

Strategy: fallback

Try / catch

match try_restore(&agent, &digest).await {
    Ok(out) => out,
    Err(e) if e.to_string().contains("diagnostic blob is missing") => {
        evict_remote_blobs_for_action(&digest).await?;
        execute_and_store(&action).await?
    }
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: A prefetch that downloaded the rustc metadata object but not one of its stdout/stderr diagnostic blobs; remote entry whose diagnostic blobs were evicted while metadata survived.

Common situations: Partial remote eviction; interrupted multi-object downloads; mixed-version writers that omit diagnostic blobs.

Related errors


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/ee1997ba036b73a0. Report an issue: GitHub.