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

  1. Read the dynamic {message} text in the error — it states the kernel-side cause; address that directly.
  2. Restart the kernel and retry the init/grant flow.
  3. Verify the kernel and CLI versions are compatible.
  4. 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

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


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/64933d6079471540. Report an issue: GitHub.