{"record":{"id":"8c60fe0cd1de12ac","repo":"astrid-runtime/astrid","slug":"daemon-rejected-capsule-metadata-request-message-8c60fe","errorCode":null,"errorMessage":"daemon rejected capsule metadata request: {message}","messagePattern":"daemon rejected capsule metadata request: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/capsule/list.rs","lineNumber":25,"sourceCode":"use astrid_core::dirs::AstridHome;\nuse astrid_core::kernel_api::{KernelRequest, KernelResponse};\nuse colored::Colorize;\n\n#[cfg(test)]\nuse super::meta::scan_installed_capsules_in_home_for_with_layout;\nuse crate::theme::Theme;\n\n/// List all installed capsules with their provides/requires metadata.\n///\n/// In default mode, shows a compact one-line-per-capsule view with capability\n/// counts. With `--verbose`, expands each capsule to show the full capability\n/// list and install source.\npub(crate) async fn list_capsules(verbose: bool) -> anyhow::Result<()> {\n    let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?;\n    let entries = match client.request(KernelRequest::GetCapsuleMetadata).await? {\n        KernelResponse::CapsuleMetadata(entries) => entries,\n        KernelResponse::Error(message) => {\n            anyhow::bail!(\"daemon rejected capsule metadata request: {message}\")\n        },\n        other => anyhow::bail!(\"unexpected daemon response: {other:?}\"),\n    };\n\n    if entries.is_empty() {\n        println!(\"{}\", Theme::info(\"No capsules installed.\"));\n        return Ok(());\n    }\n\n    println!(\n        \"{} ({})\",\n        Theme::header(\"Installed Capsules\"),\n        entries.len()\n    );\n    println!(\"{}\", Theme::separator());\n    for entry in &entries {\n        let source = entry\n            .source_id","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/capsule/list.rs#L7-L43","documentation":"Raised by `list_capsules` when the daemon responds to `KernelRequest::GetCapsuleMetadata` with `KernelResponse::Error(message)`. Just like the update path, the CLI surfaces the daemon's own rejection reason verbatim. `astrid capsule list` cannot show anything without the metadata entries, so the error aborts the listing.","triggerScenarios":"Running `astrid capsule list` when `connect_kernel_for_workspace` succeeds but the daemon returns an Error response to GetCapsuleMetadata — daemon-side registry failure, permission problem, or incompatible daemon build.","commonSituations":"Daemon just started and not ready; daemon's metadata cache unreadable; CLI/daemon version mismatch; daemon under a different user without access to the requesting principal's data.","solutions":["Read the daemon's embedded reason and fix the underlying daemon-side issue it names.","Restart the daemon and re-run `astrid capsule list`.","Align CLI and daemon versions (upgrade the daemon if you just updated the CLI).","Verify daemon logs for the metadata request failure and repair or reinstall affected capsules."],"exampleFix":"// before\nastrid capsule list\n// error: daemon rejected capsule metadata request: registry unavailable\n\n// after\nastrid daemon restart\nastrid capsule list","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match list_capsules(verbose).await {\n    Ok(()) => {},\n    Err(e) if e.to_string().contains(\"daemon rejected capsule metadata request\") => {\n        eprintln!(\"{e:#}\\nTry: astrid daemon restart, then re-run capsule list.\");\n        std::process::exit(1);\n    },\n    Err(e) => return Err(e),\n}","preventionTips":["Ensure the daemon is fully started before scripting `astrid capsule list`.","Align CLI and daemon versions; skew is the top cause of rejected metadata requests.","Watch daemon logs for registry/permission errors in its metadata store.","Add a daemon health check (ping) before issuing metadata queries in automation."],"tags":["daemon","ipc","socket"],"backgroundTag":"api-error-response","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"}