{"record":{"id":"bbf04c19bccbbe53","repo":"Hmbown/CodeWhale","slug":"skill-name-has-unknown-package-digest-refusin","errorCode":null,"errorMessage":"skill '{name}' has unknown package digest; refusing mutation","messagePattern":"skill '(.+?)' has unknown package digest; refusing mutation","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/tui/src/skills/mutation.rs","lineNumber":502,"sourceCode":"                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\"\n        ),\n    }\n}\n\nfn find_audited_skill(\n    ctx: &MutationContext<'_>,\n    skill_id: &AuditedSkillId,\n) -> Result<(AuditedSkill, PathBuf)> {\n    let snap = scan_with_configured(","sourceCodeStart":484,"sourceCodeEnd":520,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/skills/mutation.rs#L484-L520","documentation":"resolve_owned_skill_by_name found exactly one matching owned skill, but its DigestState is Unknown — the on-disk package could not be hashed to a known digest. Mutations require a verified digest so content can be checked against the audit; without it the operation could act on unverified or corrupted content. The undigestable/unknown-digest skill package is the input at fault.","triggerScenarios":"Thrown at crates/tui/src/skills/mutation.rs:502 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-run the skills scan so the package digest is recomputed and cached","Inspect the skill directory for corruption or unreadable files blocking digest computation","Reinstall the skill to restore a well-formed package"],"exampleFix":null,"handlingStrategy":"validation","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"}