{"record":{"id":"5df505992bd2629d","repo":"Hmbown/CodeWhale","slug":"skill-name-exists-only-in-a-compatible-externa","errorCode":null,"errorMessage":"skill '{name}' exists only in a compatible external root; import it with /skills (refusing to write external harness directories)","messagePattern":"skill '(.+?)' exists only in a compatible external root; import it with /skills \\(refusing to write external harness directories\\)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/skills/mutation.rs","lineNumber":493,"sourceCode":"        };\n        matches.retain(|s| s.root.kind == want);\n    }\n\n    match matches.as_slice() {\n        [] => {\n            // If the name only exists externally, tell the user to import.\n            let compatible = scan_with_configured(\n                ctx.workspace,\n                ctx.home,\n                ctx.configured_skills_dir,\n                SkillAuditMode::Compatible,\n                None,\n            );\n            if compatible.skills.iter().any(|s| {\n                s.id.canonical_name == canonical\n                    && s.source_kind == SkillSourceKind::CompatibleExternal\n            }) {\n                bail!(\n                    \"skill '{name}' exists only in a compatible external root; \\\n                     import it with /skills (refusing to write external harness directories)\"\n                );\n            }\n            bail!(\"skill '{name}' not found in CodeWhale-owned project/global roots\");\n        }\n        [only] => {\n            let DigestState::Known(digest) = &only.digest else {\n                bail!(\"skill '{name}' has unknown package digest; refusing mutation\");\n            };\n            Ok(ResolvedOwnedSkill {\n                id: only.id.clone(),\n                digest: digest.clone(),\n            })\n        }\n        _ => bail!(\n            \"skill '{name}' exists in both project and global CodeWhale roots; \\\n             specify --project or --global\"","sourceCodeStart":475,"sourceCodeEnd":511,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/skills/mutation.rs#L475-L511","documentation":"resolve_owned_skill_by_name found no match in CodeWhale-owned project/global roots, then ran a Compatible-mode scan and discovered the name exists only in a compatible external (harness-managed) root. Because CodeWhale refuses to write into external harness directories, the mutation is refused with guidance to import the skill into an owned root first. The external-only skill name is the input at fault.","triggerScenarios":"Thrown at crates/tui/src/skills/mutation.rs:493 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Import the skill into a CodeWhale-owned root with /skills, then retry the mutation","Operate on the external skill with the external harness's own tooling","Verify the intended scope if the skill also exists in an owned root under a different name"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}