Hmbown/CodeWhale · error · anyhow::Error
this mutation requires async execute (network I/O)
Error message
this mutation requires async execute (network I/O)
What it means
Guard in execute_sync: it handles only local mutations (install/import/remove/trust without network) and bails for requests that require network I/O, directing them to the async execute path. It fires when a caller invoked the synchronous executor with a SkillMutationRequest variant (typically remote install/update) that performs network operations, which sync execution cannot support.
Source
Thrown at crates/tui/src/skills/mutation.rs:438
remove_skill(resolved.id, expected_digest.or(Some(resolved.digest)), ctx)
}
SkillMutationRequest::Trust {
skill_id,
expected_digest,
} => trust_skill(skill_id, expected_digest, ctx),
SkillMutationRequest::TrustByName {
name,
scope,
expected_digest,
} => {
let resolved = resolve_owned_skill_by_name(ctx, &name, scope)?;
let digest = expected_digest.unwrap_or(resolved.digest);
trust_skill(resolved.id, digest, ctx)
}
SkillMutationRequest::InstallRemote { .. }
| SkillMutationRequest::Update { .. }
| SkillMutationRequest::UpdateByName { .. } => {
bail!("this mutation requires async execute (network I/O)")
}
}
}
#[derive(Debug)]
struct ResolvedOwnedSkill {
id: AuditedSkillId,
digest: String,
}
fn resolve_owned_skill_by_name(
ctx: &MutationContext<'_>,
name: &str,
scope: Option<SkillTargetScope>,
) -> Result<ResolvedOwnedSkill> {
// Match SkillRegistry::get — users may pass frontmatter/dir forms
// (Hello_World) while audit stores the folded canonical key (hello-world).
let canonical = normalize_skill_name_for_lookup(name);View on GitHub (pinned to 0c42157ee5)
Solutions
- Route the mutation through the async execute() entry point instead of execute_sync
- Only call execute_sync for purely local mutations (remove/trust/local import)
- Refactor the caller to detect network-dependent requests before choosing the sync path
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at crates/tui/src/skills/mutation.rs:438 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/361aaaf4fc91f730.
Report an issue: GitHub.