{"record":{"id":"4f0b7d751b481c9b","repo":"astrid-runtime/astrid","slug":"astrid-build-produced-no-capsule-archive","errorCode":null,"errorMessage":"astrid-build produced no .capsule archive.","messagePattern":"astrid-build produced no \\.capsule archive\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/capsule/install.rs","lineNumber":644,"sourceCode":"                        .context(\"invalid built archive path\")?,\n                    context.principal,\n                    context.prompt,\n                )?,\n            )\n            .await;\n        }\n        return unpack_via_lib(\n            &produced[idx],\n            context.workspace,\n            context.home,\n            context.original_source,\n            context.principal,\n            context.expected,\n            context.prompt,\n        );\n    }\n\n    bail!(\"astrid-build produced no .capsule archive.\");\n}\n\nasync fn install_from_local(\n    source: &str,\n    workspace: bool,\n    home: &AstridHome,\n    original_source: Option<&str>,\n    principal: &astrid_core::PrincipalId,\n    expected: Option<ExpectedCapsule<'_>>,\n    prompt: &ManualInstallOptions,\n) -> anyhow::Result<Vec<InstalledCapsuleOutcome>> {\n    let source_path = Path::new(source);\n    if !source_path.exists() {\n        bail!(\"Source path does not exist: {source}\");\n    }\n\n    // Unpack `.capsule` archive when source is a file.\n    if source_path.is_file() && source.ends_with(\".capsule\") {","sourceCodeStart":626,"sourceCodeEnd":662,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/capsule/install.rs#L626-L662","documentation":"After `astrid-build` exits successfully, `clone_and_build` scans the build output directory for a produced `.capsule` archive; if none is found it bails with this message. This is a post-build sanity check: the build claimed success but emitted no installable capsule artifact, so installation cannot continue.","triggerScenarios":"Installing a capsule from GitHub source where `astrid-build` returns exit code 0 but writes no `*.capsule` file into the `--output` directory — e.g. the repo is not actually a capsule (no capsule manifest), the build succeeds as a no-op, or the build writes its artifact to an unexpected location.","commonSituations":"Pointing the installer at a plain library/app repo that has no capsule build configuration; a capsule manifest misconfigured with a wrong output path; a version mismatch where an older `astrid-build` silently skips packaging; repo layout changed upstream and the build output no longer lands in `dist`.","solutions":["Verify the repo is actually an installable capsule (contains the capsule manifest/astrid-build config); if not, install from a different source","Run `astrid-build` manually on the cloned repo and inspect the output directory to see what it produced and where","Fix or update the capsule's build configuration so the `.capsule` archive is emitted into the expected output directory","Update `astrid-build` to a current version and retry, in case an outdated builder silently skipped packaging"],"exampleFix":"// before: repo has no capsule manifest, build no-ops\nastrid capsule install github:org/not-a-capsule\n// error: astrid-build produced no .capsule archive.\n// after: use a repo that actually ships capsule build config\nastrid capsule install github:org/real-capsule","handlingStrategy":"validation","validationCode":"// Confirm the repo is a capsule (has build config) before source install\nlet has_manifest = std::path::Path::new(\"capsule.toml\").exists()\n    || std::path::Path::new(\"Capsule.toml\").exists();\nif !has_manifest {\n    eprintln!(\"repo has no capsule manifest; astrid-build will emit no .capsule archive\");\n}","typeGuard":null,"tryCatchPattern":"match clone_and_build(url, ...) {\n    Ok(id) => proceed(id),\n    Err(e) if e.to_string().contains(\"produced no .capsule archive\") => {\n        // repo likely isn't a capsule or build output path is misconfigured;\n        // switch to a release-asset install or fix the build config\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Only install from source repos that declare a capsule manifest / astrid-build configuration","Check the repo's releases for pre-built `.capsule` assets and prefer release-asset installs","Verify the capsule build config's output path matches where astrid-build writes artifacts","Pin installs to known-good tags verified to build into a `.capsule` archive"],"tags":["build","capsule","missing-artifact","astrid-build"],"backgroundTag":"file-not-found","analyzedSha":"affd8760f44190dbdfbec23403f4c4b642c33112","analyzedAt":"2026-09-09T21:28:12.402Z","contentChangedAt":"2026-09-09T21:28:12.402Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}