astrid-runtime/astrid · error
Capsule ' ' has no meta.json - cannot determine original…
Error message
Capsule '{name}' has no meta.json - cannot determine original source. Re-install it manually. What it means
update_capsule refuses to update an installed capsule whose package directory has no meta.json. The meta.json records the capsule's original source, which is required to re-fetch and rebuild it. Without it the updater cannot proceed and asks the user to reinstall manually.
Solutions
- Re-install the capsule manually to regenerate meta.json with source tracking, then re-run the update
- Check the capsule target directory for a meta.json file and restore it from a backup if available
- Delete the capsule directory entirely and reinstall from the canonical source
Example fix
// before astrid capsule update my-capsule # fails: no meta.json // after astrid capsule uninstall my-capsule astrid capsule install <original-source> astrid capsule update my-capsule
Defensive patterns
Strategy: validation
Validate before calling
let meta_path = target_dir.join("meta.json");
if !meta_path.exists() {
eprintln!("Capsule '{}' has no meta.json; reinstall it first.", name);
return Ok(());
} Try / catch
match update_capsule(name).await {
Err(e) if e.to_string().contains("no meta.json") => reinstall_manually(name)?,
other => other?,
} Prevention
- Always install capsules through astrid capsule install so meta.json is generated
- Never hand-edit or prune files inside capsule package directories
- Back up capsule directories including meta.json
- After upgrading astrid-cli, reinstall capsules from pre-source-tracking versions
When it happens
Trigger: Running a capsule update (directly or via update_daemon_capsules) for a capsule installed by an older version of astrid-cli that did not write meta.json, or after the meta.json file was manually deleted/corrupted inside the capsule's target directory.
Common situations: Upgrading astrid-cli from a pre-source-tracking version and then updating old capsules; restoring capsule directories from backups that omitted meta.json; cleaning scripts that remove 'extra' files from package dirs.
Related errors
- Capsule ' ' was installed before source tracking was added…
- an incomplete capsule authority update exists at
- astrid-build failed with exit code
- astrid-build produced no .capsule archive.
- authority receipt has an empty capsule id
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/7d11d4fe928d7d1e.
Report an issue: GitHub.
Appendix: source
Thrown at crates/astrid-cli/src/commands/capsule/install_update.rs:141
if !workspace {
return update_daemon_capsules(target, &principal, approve_untrusted).await;
}
if let Some(name) = target {
let target_dir = astrid_capsule_install::resolve_target_dir_for_with_layout(
&home,
&principal,
name,
workspace,
crate::workspace_layout::current(),
)?;
if !target_dir.exists() {
bail!("Capsule '{name}' is not installed.");
}
let meta = read_meta(&target_dir).ok_or_else(|| {
anyhow::anyhow!(
"Capsule '{name}' has no meta.json - cannot determine original source. \
Re-install it manually."
)
})?;
let source = meta.source.ok_or_else(|| {
anyhow::anyhow!(
"Capsule '{name}' was installed before source tracking was added. \
Re-install it manually to record the source."
)
})?;
eprintln!("Updating {name} from {source}...");
// Re-install exactly the capsule being updated. When `source` is a
// monorepo release that ships several `.capsule` assets, pass `name`
// as the selector so update refreshes only that one — not every
// capsule the release contains.
install_capsule_with_options(View on GitHub (pinned to affd8760f4)