jdx/mise · error · eyre::Report

remote action descriptor is missing

Error message

remote action descriptor is missing

What it means

validate_prefetched_action checks that every digest referenced by a prefetched action result exists in the `verified` blob map (blobs downloaded AND digest-checked). The action descriptor digest itself (action.result.action) must be present; a missing descriptor means the prefetch batch is incomplete and the action cannot be trusted for restore.

Source

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

        Ok(directory)
    }

    #[cfg(test)]
    fn load_cache_directory(&self, digest: &CacheDigest) -> Result<CacheDirectory> {
        let path = self
            .find_verified_blob(digest)?
            .ok_or_else(|| eyre::eyre!("remote action output directory is missing"))?;
        Self::parse_cache_directory(&path)
    }

    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

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Retry the task run — failed prefetch falls back to normal (local) execution and the entry gets rewritten
  2. Verify the remote entry is complete (descriptor blob present under its digest key); delete the incomplete entry so it is re-created
  3. Check agent logs just before this error for the individual blob download failure that caused the gap
Defensive patterns

Strategy: fallback

Try / catch

// Incomplete prefetch => fall back to local execution; cache repopulates on success
match try_restore(&agent, &digest).await {
    Ok(out) => out,
    Err(e) if e.to_string().contains("remote action descriptor is missing") => {
        warn!("incomplete cache entry; executing locally");
        execute_and_store(&action).await?
    }
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: A prefetch batch where the descriptor blob's download failed or was skipped while referenced outputs succeeded; the remote store lost the descriptor object (partial eviction); interrupted batch transfer.

Common situations: Flaky network dropping one object in a multi-object batch; concurrent garbage collection on the remote cache between manifest read and blob fetch.

Related errors


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