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
- Re-run `astrid init` to retry the capsules that didn't install.
- Read the per-capsule errors printed above the message and fix the failing capsule (bad source, missing version, network).
- 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
- Treat any non-zero exit from `astrid init` as 'not fully provisioned'.
- Ensure Distro.lock exists before assuming the install succeeded.
- Retry init automatically on failure; it resumes the missing capsules.
- Check network/GitHub access before large multi-capsule installs.
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
- all {total} capsule install(s) failed — not writing Distro.l
- unexpected response from kernel: {other:?}
- Source path does not exist: {source}
- Failed to auto-build capsule from Cargo project.
- --var names no [env] field in {capsule_id}: {key}
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/bd1ec8241e89ba2f.
Report an issue: GitHub.