jdx/mise · error · eyre::Report

remote action output file is missing

Error message

remote action output file is missing

What it means

While walking the prefetched output tree, every file digest listed in a CacheDirectory must exist in the verified blob map. A file whose blob was not downloaded and digest-verified makes the prefetch batch incomplete, so the action is rejected instead of restored with holes.

Source

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

            .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 {
                bail!("remote action output tree is too large");
            }
            let directory = directories
                .get(&digest)
                .ok_or_else(|| eyre::eyre!("remote action output directory is missing"))?;
            for file in &directory.files {
                if !verified.contains_key(&file.digest) {
                    bail!("remote action output file is missing");
                }
            }
            pending.extend(
                directory
                    .directories
                    .iter()
                    .map(|directory| directory.digest.clone()),
            );
        }
        Ok(())
    }

    #[cfg(test)]
    async fn prefetch_output_tree(
        &self,
        remote: &RemoteCacheClient,
        output_root: &CacheDigest,
    ) -> Result<()> {

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Retry the run — the action executes locally and the cache entry is rewritten
  2. If persistent, remove the incomplete remote action entry so it is re-created whole
  3. Check for concurrent eviction/GC running against the remote cache bucket
Defensive patterns

Strategy: fallback

Try / catch

match try_restore(&agent, &digest).await {
    Ok(out) => out,
    Err(e) if e.to_string().contains("remote action output file 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 directory object arrived but one of its file blobs failed to download or failed digest verification earlier in the batch; remote entry missing individual file objects.

Common situations: Partial network failures during large batch downloads; remote cache objects evicted mid-prefetch; interrupted uploads from the writer.

Related errors


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