{"record":{"id":"74562e31dff31aad","repo":"astrid-runtime/astrid","slug":"unexpected-daemon-metadata-response-other","errorCode":null,"errorMessage":"unexpected daemon metadata response: {other:?}","messagePattern":"unexpected daemon metadata response: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/capsule/deps.rs","lineNumber":156,"sourceCode":"\n// ---------------------------------------------------------------------------\n// Display\n// ---------------------------------------------------------------------------\n\n/// Show the capsule dependency tree (imports/exports graph).\npub(crate) async fn show_tree() -> anyhow::Result<()> {\n    let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?;\n    let capsules = match client.request(KernelRequest::GetCapsuleMetadata).await? {\n        KernelResponse::CapsuleMetadata(entries) => entries\n            .into_iter()\n            .map(|entry| CapsuleDependencyMetadata {\n                name: entry.name,\n                imports: entry.imports,\n                exports: entry.exports,\n            })\n            .collect::<Vec<_>>(),\n        KernelResponse::Error(error) => bail!(\"daemon metadata lookup failed: {error}\"),\n        other => bail!(\"unexpected daemon metadata response: {other:?}\"),\n    };\n\n    if capsules.is_empty() {\n        println!(\"{}\", Theme::info(\"No capsules installed.\"));\n        return Ok(());\n    }\n\n    let (all_trees, unsatisfied) = build_dep_graph(&capsules);\n\n    for (i, tree) in all_trees.iter().enumerate() {\n        if i > 0 {\n            println!();\n        }\n\n        println!(\"{}\", tree.name.bold());\n\n        // Show exports.\n        if tree.exports.is_empty() && tree.imports.is_empty() {","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/capsule/deps.rs#L138-L174","documentation":"`show_tree` matches the daemon's `KernelResponse` against the expected metadata-carrying variants; the `Error` variant is handled separately, and anything else falls into this catch-all bail. It means the daemon returned a response variant the CLI's dependency-tree code does not recognize — a protocol/shape mismatch, not a reported daemon error.","triggerScenarios":"show_tree receives a `KernelResponse` that is neither the metadata variant nor `KernelResponse::Error` — e.g. after a daemon upgrade changed response types, or the request hit a handler replying with a different response kind.","commonSituations":"Version skew between astrid-cli and the running daemon; a proxy/relay rewriting kernel responses; a daemon bug answering the metadata request with the wrong variant.","solutions":["Upgrade or rebuild astrid-cli to match the daemon version (schema drift is the usual cause).","Log the `other:?` payload to see which variant came back.","Restart the daemon to rule out a wedged state.","Report the payload to maintainers if versions match."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"// detect CLI/daemon version skew before issuing the metadata query\nlet v = daemon.request(VersionQuery).await?;\nif v.major != expected_major { eprintln!(\"version mismatch: cli={}, daemon={}\", expected_major, v.major); }","typeGuard":"fn as_metadata(resp: &KernelResponse) -> Option<&Vec<CapsuleMetadata>> {\n    match resp { KernelResponse::Metadata(m) => Some(m), _ => None }\n}","tryCatchPattern":"let resp = daemon.request(MetadataQuery).await?;\nif as_metadata(&resp).is_none() && !matches!(resp, KernelResponse::Error(_)) {\n    eprintln!(\"daemon returned unknown variant {resp:?}; upgrade astrid-cli to match the daemon\");\n}","preventionTips":["Upgrade astrid-cli whenever the kernel daemon is upgraded.","Log unknown KernelResponse variants to catch schema drift early.","Avoid middlemen/proxies rewriting daemon responses.","Pin CLI and daemon versions together in deployment tooling."],"tags":["daemon","ipc","protocol-mismatch","rpc"],"backgroundTag":"unexpected-response-shape","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}