{"record":{"id":"c8c170c01add6a26","repo":"jdx/mise","slug":"cache-agent-returned-an-unexpected-action-lookup-r","errorCode":null,"errorMessage":"cache agent returned an unexpected action lookup response","messagePattern":"cache agent returned an unexpected action lookup response","errorType":"exception","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/cache/rustc.rs","lineNumber":283,"sourceCode":"fn restore_result(\n    action: &RustcAction,\n    outputs: &RustcOutputs,\n    discovered: &DiscoveredInputs,\n    restore_outputs: bool,\n) -> Result<Option<CachedCompilation>> {\n    let responses = session::request_agent(&[AgentRequest::FindActionResult {\n        action: action.digest.clone(),\n    }])?;\n    let Some(response) = responses.into_iter().next() else {\n        bail!(\"cache agent did not return an action lookup response\");\n    };\n    let result = match response {\n        AgentResponse::ActionResult { result } => match result {\n            Some(result) => result,\n            None => return Ok(None),\n        },\n        AgentResponse::Error { message } => bail!(message),\n        _ => bail!(\"cache agent returned an unexpected action lookup response\"),\n    };\n    if result.version != 1 || result.action != action.digest {\n        bail!(\"cached rustc action result has an invalid identity\");\n    }\n    let metadata_digest = result\n        .metadata\n        .ok_or_else(|| eyre::eyre!(\"cached rustc action result has no metadata\"))?;\n    let output_root_digest = result\n        .output_root\n        .ok_or_else(|| eyre::eyre!(\"cached rustc action result has no output root\"))?;\n    let roots = find_blobs(&[\n        action.digest.clone(),\n        metadata_digest.clone(),\n        output_root_digest.clone(),\n    ])?;\n    let cached_action = read_verified_blob(&roots[0], &action.digest, \"action descriptor\")?;\n    if cached_action != action.bytes {\n        bail!(\"cached rustc action descriptor does not match the invocation\");","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cache/rustc.rs#L265-L301","documentation":"The first response to FindActionResult must be an AgentResponse::ActionResult (Some = hit, None = miss) or AgentResponse::Error. Any other variant means the agent answered a different request type — a protocol violation the wrapper refuses to guess about (src/cache/rustc.rs:283).","triggerScenarios":"Version-skewed or buggy agent mis-returning a prediction/blob response for an action-result request; concurrent protocol changes between mise versions sharing one socket.","commonSituations":"Mixed mise installs (e.g. shim from one version, agent spawned by another); upgrading mid-build.","solutions":["Restart agent and shells so one mise version serves all requests","Re-run the failing cargo command in the fresh session","If reproducible, disable the rustc cache and file the mismatch upstream"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"# Variant mismatch => session poison: kill agent, retry build once\ngrep -q 'unexpected action lookup response' build.log && {\n  pkill -f mise-cache-agent || true; cargo build;\n}","preventionTips":["One mise version for agent and wrappers","Restart everything after upgrades","Disable rustc cache wrapper for builds that must not fail (release pipelines)"],"tags":["mise","rustc-cache","cache-agent","protocol","version-mismatch"],"backgroundTag":"cache-agent-protocol-error","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}