Hmbown/CodeWhale · error · anyhow::Error

owned skill path {} does not exist

Error message

owned skill path {} does not exist

What it means

validate_owned_child found the child path absent while require_existing is true, i.e. a mutation that presupposes an installed skill (update/remove/trust) was pointed at a package directory that no longer exists. The audit state is stale: the skill was deleted or never installed in this root. The missing child path is the input at fault; absence is permitted when require_existing is false (install path).

Source

Thrown at crates/tui/src/skills/mutation.rs:304

    let anchor = owned_anchor(ctx.workspace, ctx.home, target)?;
    validate_owned_target_chain(anchor, &expected, true)?;
    Ok(expected)
}

/// Validate a real direct child of an already validated owned skills root.
/// Returns false only when a missing child is permitted.
fn validate_owned_child(skills_dir: &Path, child: &Path, require_existing: bool) -> Result<bool> {
    if child.parent() != Some(skills_dir) {
        bail!(
            "refusing to mutate path {} outside direct owned root {}",
            child.display(),
            skills_dir.display()
        );
    }
    let exists = checked_real_directory(child)?;
    if !exists {
        if require_existing {
            bail!("owned skill path {} does not exist", child.display());
        }
        return Ok(false);
    }

    let canonical_root = fs::canonicalize(skills_dir).with_context(|| {
        format!(
            "failed to resolve owned skill root {}",
            skills_dir.display()
        )
    })?;
    let canonical_child = fs::canonicalize(child)
        .with_context(|| format!("failed to resolve owned skill path {}", child.display()))?;
    if canonical_child.parent() != Some(canonical_root.as_path()) {
        bail!(
            "owned skill path {} escapes direct root {}",
            child.display(),
            skills_dir.display()
        );

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Re-run a skills scan so the registry reflects what is actually on disk
  2. Install the skill if it was never present in this root
  3. Use the correct scope so the existing installation is found
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/tui/src/skills/mutation.rs:304 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/739ac01646853496. Report an issue: GitHub.