{"record":{"id":"c07a5862190f0472","repo":"astrid-runtime/astrid","slug":"capsule-is-yes-configures-values-but-do","errorCode":null,"errorMessage":"capsule '{}' is {}; --yes configures values but does not approve install authority. Re-run with --approve-untrusted after reviewing the artifact","messagePattern":"capsule '(.+?)' is (.+?); --yes configures values but does not approve install authority\\. Re-run with --approve-untrusted after reviewing the artifact","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/astrid-cli/src/commands/capsule/install/authority.rs","lineNumber":38,"sourceCode":") -> anyhow::Result<AuthorityDecision> {\n    if matches!(\n        inspection.provenance,\n        ArtifactProvenance::LocalRuntime { .. }\n    ) {\n        return Ok(AuthorityDecision::Automatic);\n    }\n    if BATCH_MODE.load(Ordering::Relaxed) {\n        return Ok(AuthorityDecision::OperatorDistribution {\n            content_digest: inspection.content_digest.clone(),\n        });\n    }\n    if prompt.approve_untrusted {\n        return Ok(AuthorityDecision::ExplicitApproval {\n            content_digest: inspection.content_digest.clone(),\n        });\n    }\n    if prompt.yes {\n        bail!(\n            \"capsule '{}' is {}; --yes configures values but does not approve install authority. Re-run with --approve-untrusted after reviewing the artifact\",\n            inspection.capsule_id,\n            inspection.provenance.label()\n        );\n    }\n\n    eprintln!();\n    eprintln!(\n        \"Capsule {} {} is {}.\",\n        inspection.capsule_id,\n        inspection.version,\n        inspection.provenance.label()\n    );\n    if let Some(signer) = inspection.provenance.signer() {\n        eprintln!(\"  Signer: {signer}\");\n    }\n    eprintln!(\"  Content: {}\", inspection.content_digest);\n    if inspection.capability_expansions.is_empty() {","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/astrid-runtime/astrid/blob/affd8760f44190dbdfbec23403f4c4b642c33112/crates/astrid-cli/src/commands/capsule/install/authority.rs#L20-L56","documentation":"authority_decision implements the capsule install-authority consent flow. A capsule whose provenance is not automatically trusted requires explicit operator approval. Passing `--yes` silently is deliberately rejected: automated 'yes to all' must never grant install authority. The error names the capsule, its provenance label, and the exact flag to use after reviewing the artifact.","triggerScenarios":"Installing (via install_from_local_path_for_principal, unpack_via_lib, or daemon_install_authority) a capsule whose provenance is not LocalRuntime, with ManualInstallOptions.yes == true and approve_untrusted == false, outside BATCH_MODE. The bail fires before the interactive prompt is shown.","commonSituations":"CI or scripts pipe `yes | astrid capsule install ...` or pass -y expecting it to skip all prompts; a developer aliases the install command with --yes and hits an untrusted third-party capsule; installing a capsule signed by an unknown signer after a dependency update.","solutions":["Review the capsule first (digest, signer, capability expansions), then re-run with `--approve-untrusted` instead of `--yes`.","If this is an operator-managed distribution, run through the batch/distribution path where BATCH_MODE grants OperatorDistribution authority.","Only approve if the artifact is trusted: verify the content digest against the publisher's published checksum.","If the capsule should be inherently trusted (locally built runtime artifact), check why its provenance is not LocalRuntime (e.g. it was downloaded rather than built locally).","In CI, use the intended non-interactive approval flag (--approve-untrusted) explicitly after verifying the artifact, rather than --yes."],"exampleFix":"// before\nastrid capsule install ./third-party.capsule --yes\n// after\n# inspect digest/signer, then:\nastrid capsule install ./third-party.capsule --approve-untrusted","handlingStrategy":"validation","validationCode":"fn will_reject_yes(yes: bool, approve_untrusted: bool, batch_mode: bool, provenance_local: bool) -> bool {\n    !provenance_local && !batch_mode && yes && !approve_untrusted\n}\n// if will_reject_yes(...), pass --approve-untrusted instead of --yes","typeGuard":null,"tryCatchPattern":"if ! astrid capsule install \"$ART\" --yes 2>&1 | grep -q 'does not approve install authority'; then\n  echo \"untrusted capsule: review then pass --approve-untrusted\"\nfi","preventionTips":["Never use --yes as a blanket approval for capsule installs in scripts.","Verify content digests/signers before passing --approve-untrusted.","Use batch/operator-distribution mode for trusted internal distribution pipelines.","Treat any authority prompt as a security gate — read capability expansions before approving."],"tags":["security","approval","cli","install-authority"],"backgroundTag":"authentication-required","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"}