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
- Retry the run so prefetch re-attempts the full blob set, falling back to local execution on failure
- If persistent, delete the incomplete remote action entry (metadata + directories + manifest reference) to force re-creation
- 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
- Ensure writers always upload stdout/stderr blobs referenced by rustc metadata
- Give remote uploads all-or-nothing semantics per action (upload last, or mark complete)
- Retry once before evicting — transient download gaps look identical to real holes
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
- remote action descriptor is missing
- remote action metadata is missing
- remote action output file is missing
- remote rustc action metadata is invalid
- remote action output tree is too large
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/ee1997ba036b73a0.
Report an issue: GitHub.