astrid-runtime/astrid · error
{message}
Error message
{message} What it means
validated_grant_set_for_reuse asks the kernel for capsule metadata via KernelRequest::GetCapsuleMetadata. If the kernel responds with KernelResponse::Error, the CLI bails with the kernel-provided message. The message text is dynamic — it is whatever error the kernel reported.
Source
Thrown at crates/astrid-cli/src/commands/init_grant.rs:304
/// Reuse a fresh lock only when its installed state still verifies. A current
/// distro id/version with stale or incomplete install provenance falls through
/// to the normal checked install path so init can regenerate the lock.
pub(super) async fn validated_grant_set_for_reuse(
target: &PrincipalId,
locked: &[super::LockedCapsule],
) -> Option<Vec<String>> {
if target != &crate::principal::current() {
return None;
}
let result = async {
let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?;
let entries = match client
.request(astrid_core::kernel_api::KernelRequest::GetCapsuleMetadata)
.await?
{
astrid_core::kernel_api::KernelResponse::CapsuleMetadata(entries) => entries,
astrid_core::kernel_api::KernelResponse::Error(message) => bail!(message),
other => bail!("unexpected capsule metadata response: {other:?}"),
};
let mut installed = Vec::with_capacity(locked.len());
for capsule in locked {
let expected = CapsuleId::new(capsule.name.clone())?;
let entry = entries
.iter()
.find(|entry| entry.name == capsule.name)
.ok_or_else(|| {
anyhow::anyhow!(
"Distro.lock capsule '{}' is absent from the daemon registry",
capsule.name
)
})?;
if !capsule.version.is_empty() && entry.version != capsule.version {
bail!(
"Distro.lock capsule '{}' expects version {}, but the daemon registry reports {}",
capsule.name,View on GitHub (pinned to affd8760f4)
Solutions
- Read the dynamic {message} text in the error — it states the kernel-side cause; address that directly.
- Restart the kernel and retry the init/grant flow.
- Verify the kernel and CLI versions are compatible.
- If the kernel cannot serve metadata, fall back to a full install instead of grant reuse.
Defensive patterns
Strategy: try-catch
Validate before calling
// check kernel connectivity before requesting metadata let mut client = crate::socket_client::connect_kernel_for_workspace(None).await?; // if this fails, the kernel is down; restart before grant reuse
Try / catch
match validated_grant_set_for_reuse().await {
Err(e) => { eprintln!("grant reuse failed: {e}; falling back to full install"); full_install().await }
Ok(set) => Ok(set),
} Prevention
- Restart the kernel when metadata requests error.
- Keep kernel and CLI versions compatible.
- Read the propagated kernel message for the specific cause.
- Fall back to a full install when grant reuse is unavailable.
When it happens
Trigger: The GetCapsuleMetadata request to the kernel socket returns KernelResponse::Error(message); the bail propagates the kernel's own message string.
Common situations: Kernel cannot read its capsule registry; kernel-side permission or state errors while enumerating installed capsules; a kernel bug or version incompatibility producing an error response during grant-set reuse.
Related errors
- unexpected response from kernel: {other:?}
- unexpected response from kernel: {other:?}
- unexpected response from kernel: {other:?}
- kernel refused storage mount: {error}
- kernel refused storage lifecycle request: {error}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/64933d6079471540.
Report an issue: GitHub.