astrid-runtime/astrid · error
unexpected daemon metadata response: {other:?}
Error message
unexpected daemon metadata response: {other:?} What it means
`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.
Source
Thrown at crates/astrid-cli/src/commands/capsule/deps.rs:156
// ---------------------------------------------------------------------------
// Display
// ---------------------------------------------------------------------------
/// Show the capsule dependency tree (imports/exports graph).
pub(crate) async fn show_tree() -> anyhow::Result<()> {
let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?;
let capsules = match client.request(KernelRequest::GetCapsuleMetadata).await? {
KernelResponse::CapsuleMetadata(entries) => entries
.into_iter()
.map(|entry| CapsuleDependencyMetadata {
name: entry.name,
imports: entry.imports,
exports: entry.exports,
})
.collect::<Vec<_>>(),
KernelResponse::Error(error) => bail!("daemon metadata lookup failed: {error}"),
other => bail!("unexpected daemon metadata response: {other:?}"),
};
if capsules.is_empty() {
println!("{}", Theme::info("No capsules installed."));
return Ok(());
}
let (all_trees, unsatisfied) = build_dep_graph(&capsules);
for (i, tree) in all_trees.iter().enumerate() {
if i > 0 {
println!();
}
println!("{}", tree.name.bold());
// Show exports.
if tree.exports.is_empty() && tree.imports.is_empty() {View on GitHub (pinned to affd8760f4)
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.
Defensive patterns
Strategy: type-guard
Validate before calling
// detect CLI/daemon version skew before issuing the metadata query
let v = daemon.request(VersionQuery).await?;
if v.major != expected_major { eprintln!("version mismatch: cli={}, daemon={}", expected_major, v.major); } Type guard
fn as_metadata(resp: &KernelResponse) -> Option<&Vec<CapsuleMetadata>> {
match resp { KernelResponse::Metadata(m) => Some(m), _ => None }
} Try / catch
let resp = daemon.request(MetadataQuery).await?;
if as_metadata(&resp).is_none() && !matches!(resp, KernelResponse::Error(_)) {
eprintln!("daemon returned unknown variant {resp:?}; upgrade astrid-cli to match the daemon");
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- daemon metadata lookup failed: {error}
- Daemon returned an unexpected response to GetCommands
- daemon rejected status request: {message}
- shutdown stage daemon.shutdown_ack: rejected: {reason}
- unexpected response while resolving principal UID: {body:?}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/74562e31dff31aad.
Report an issue: GitHub.