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_rootView on GitHub (pinned to 6f52dcdf99)
Solutions
- Retry the task run — failed prefetch falls back to normal (local) execution and the entry gets rewritten
- Verify the remote entry is complete (descriptor blob present under its digest key); delete the incomplete entry so it is re-created
- 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
- Design restore paths with a local-execution fallback for any prefetch validation error
- Fetch-then-verify whole entry batches atomically; do not act on partial batches
- Watch for concurrent GC on the remote cache evicting entries mid-read
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
- remote action metadata is missing
- remote action output file is missing
- remote rustc action diagnostic blob is missing
- task action manifest is not canonical JSON
- remote action output tree is too large
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/737a205f5673aa59.
Report an issue: GitHub.