astrid-runtime/astrid · error

Installation incomplete: {succeeded}/{total} capsule(s) inst

Error message

Installation incomplete: {succeeded}/{total} capsule(s) installed — re-run `astrid init` to retry the rest.

What it means

run_init treats a partially provisioned distro (some but not all capsules installed) as a failure and exits non-zero. No Distro.lock is written on partial installs, so re-running `astrid init` retries the remaining capsules. This prevents automation from mistaking a partial install for success.

Source

Thrown at crates/astrid-cli/src/commands/init.rs:257

        eprintln!("{}", Theme::success("Installation complete."));
        // Apply capsule grants (opt-in) or print the discoverability hint.
        // On a grant failure the capsules are already installed and the lock
        // is written; this returns Err so init exits non-zero with the exact
        // manual command to finish.
        let grant_names = grant::completed_grant_names(
            opts.grant_capsules,
            &lock.capsules,
            &newly_installed_names,
        );
        grant::apply_or_hint_grants(&operator, &target, &grant_names, opts.grant_capsules).await?;
        eprintln!("  Run {} to start.", Theme::prompt("astrid"));
        Ok(())
    } else {
        // Partial provision (0 < succeeded < total): no lock was written, so
        // a re-run retries the rest. Exit NON-ZERO so automation and the
        // in-conversation flow don't read a partial install as success —
        // `astrid init` exits 0 IFF the distro is fully provisioned.
        bail!(
            "Installation incomplete: {succeeded}/{total} capsule(s) installed — \
             re-run `astrid init` to retry the rest."
        )
    }
}

/// Install a distro from a signed, self-contained `.shuttle` archive.
///
/// Implemented in [`super::distro::shuttle_install`] (Part C/D): unpack
/// to a mirror, verify the signature against the trust store, then
/// install each capsule offline from the mirror.
async fn run_init_from_shuttle(source: &str, opts: &InitOpts) -> anyhow::Result<()> {
    super::distro::shuttle_install::install_from_shuttle(std::path::Path::new(source), opts).await
}

fn ensure_init_workspace(
    home: &AstridHome,
    target: &astrid_core::PrincipalId,

View on GitHub (pinned to affd8760f4)

Solutions

  1. Re-run `astrid init` to retry the capsules that didn't install.
  2. Read the per-capsule errors printed above the message and fix the failing capsule (bad source, missing version, network).
  3. Fix connectivity or pin a resolvable capsule version in the distro, then retry.
Defensive patterns

Strategy: retry

Try / catch

let status = Command::new("astrid").args(["init"]).status()?;
if !status.success() {
    eprintln!("partial install; retrying...");
    // re-run astrid init up to N times
}

Prevention

When it happens

Trigger: run_init installs capsules where 0 < succeeded < total — e.g. some capsule installs failed (network errors, bad capsule source) while others succeeded.

Common situations: Flaky network or GitHub outage during a multi-capsule install; one capsule's version pinned in the distro no longer exists, while the others install fine.

Related errors


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