jdx/mise · error
unsupported remote cache client metadata version
Error message
unsupported remote cache client metadata version
What it means
Remote cache entries carry a client-metadata blob with a version field; RemoteClientMetadata::into_manifest only accepts version 1. A different version means the entry was written by a mise release with an incompatible metadata schema, and deserializing it as v1 could mis-restore outputs, so it is rejected.
Source
Thrown at src/task/task_cache_store.rs:62
fn from_manifest(manifest: &CacheManifest) -> Self {
Self {
execution_duration_ns: manifest.execution_duration_ns,
output: manifest.output.clone(),
restored_bytes: manifest.restored_bytes,
roots: manifest
.roots
.iter()
.map(|path| path.to_string_lossy().replace('\\', "/"))
.collect(),
task_identity: manifest.task_identity.clone(),
kind: "task".to_string(),
version: 1,
}
}
fn into_manifest(self, key: &str) -> Result<CacheManifest> {
if self.version != 1 {
bail!("unsupported remote cache client metadata version");
}
if self.kind != "task" {
bail!("remote cache metadata kind is not a task");
}
let roots = self.roots.into_iter().map(PathBuf::from).collect();
Ok(CacheManifest {
format: CACHE_FORMAT_VERSION,
key: key.to_string(),
task_identity: self.task_identity,
artifact_checksum: None,
roots,
output: self.output,
restored_bytes: self.restored_bytes,
execution_duration_ns: self.execution_duration_ns,
})
}
}
View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- Align mise versions across all writers and readers (pin mise in CI and dev environments)
- Segment the remote cache by mise version (different prefix or bucket per release) so schemas never mix
- If unavoidable, purge the remote entries so current-version metadata is rewritten fresh
Example fix
# before: one bucket shared across mise versions MISE_TASK_CACHE_REMOTE_URL=s3://cache/tasks # after: prefix keyed by mise version MISE_TASK_CACHE_REMOTE_URL=s3://cache/tasks/v2026-01
Defensive patterns
Strategy: fallback
Try / catch
// on unsupported-version metadata, bypass the remote tier and rebuild
match remote_store.get(&key).await {
Ok(entry) => entry,
Err(e) if e.to_string().contains("unsupported remote cache client metadata version") => {
disable_remote_task_cache();
local_only_get(&key)
}
Err(e) => return Err(e),
} Prevention
- Segment remote cache URLs by mise major version
- Pin mise in CI and note the version next to the cache config
- Purge remote caches deliberately as part of version upgrades
When it happens
Trigger: get() downloads the CLIENT_METADATA_MEDIA_TYPE blob, parses it, and its 'version' field is not 1 when into_manifest runs — i.e. the remote store holds entries written by a newer or older mise.
Common situations: Team or CI machines on different mise versions sharing one remote cache bucket; rolling upgrades; stale entries from an earlier beta of task artifact caching.
Related errors
- task cache store version mismatch: local version {}, remote
- unsupported remote cache directory version
- remote cache metadata kind is not a task
- remote action result is missing its output root
- remote cache path escapes its output root
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/f886f7b31cda0f68.
Report an issue: GitHub.