astrid-runtime/astrid · error
capsule ' ' is ; --yes configures values but does not…
Error message
capsule '{}' is {}; --yes configures values but does not approve install authority. Re-run with --approve-untrusted after reviewing the artifact What it means
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.
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.
Example fix
// before astrid capsule install ./third-party.capsule --yes // after # inspect digest/signer, then: astrid capsule install ./third-party.capsule --approve-untrusted
Defensive patterns
Strategy: validation
Validate before calling
fn will_reject_yes(yes: bool, approve_untrusted: bool, batch_mode: bool, provenance_local: bool) -> bool {
!provenance_local && !batch_mode && yes && !approve_untrusted
}
// if will_reject_yes(...), pass --approve-untrusted instead of --yes Try / catch
if ! astrid capsule install "$ART" --yes 2>&1 | grep -q 'does not approve install authority'; then echo "untrusted capsule: review then pass --approve-untrusted" fi
Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- capsule install authority was not approved
- astrid distro apply requires a signed Distro…
- capsule ' ' is ; explicit local approval is required
- headless approval automation is unsupported: approvals…
- manifest exceeds its installed capability approval
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/c07a5862190f0472.
Report an issue: GitHub.
Appendix: source
Thrown at crates/astrid-cli/src/commands/capsule/install/authority.rs:38
) -> anyhow::Result<AuthorityDecision> {
if matches!(
inspection.provenance,
ArtifactProvenance::LocalRuntime { .. }
) {
return Ok(AuthorityDecision::Automatic);
}
if BATCH_MODE.load(Ordering::Relaxed) {
return Ok(AuthorityDecision::OperatorDistribution {
content_digest: inspection.content_digest.clone(),
});
}
if prompt.approve_untrusted {
return Ok(AuthorityDecision::ExplicitApproval {
content_digest: inspection.content_digest.clone(),
});
}
if prompt.yes {
bail!(
"capsule '{}' is {}; --yes configures values but does not approve install authority. Re-run with --approve-untrusted after reviewing the artifact",
inspection.capsule_id,
inspection.provenance.label()
);
}
eprintln!();
eprintln!(
"Capsule {} {} is {}.",
inspection.capsule_id,
inspection.version,
inspection.provenance.label()
);
if let Some(signer) = inspection.provenance.signer() {
eprintln!(" Signer: {signer}");
}
eprintln!(" Content: {}", inspection.content_digest);
if inspection.capability_expansions.is_empty() {View on GitHub (pinned to affd8760f4)