{"record":{"id":"97753223bee85085","repo":"tinyhumansai/openhuman","slug":"missing-required-argument-name","errorCode":null,"errorMessage":"missing required argument `name`","messagePattern":"missing required argument `name`","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/skills/catalog/tools.rs","lineNumber":282,"sourceCode":"                    \"type\": \"string\",\n                    \"description\": \"Installed skill slug to remove.\"\n                }\n            },\n            \"required\": [\"name\"]\n        })\n    }\n\n    fn permission_level(&self) -> PermissionLevel {\n        PermissionLevel::Write\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        let name = args\n            .get(\"name\")\n            .and_then(|v| v.as_str())\n            .map(str::trim)\n            .filter(|value| !value.is_empty())\n            .ok_or_else(|| anyhow::anyhow!(\"missing required argument `name`\"))?;\n        tracing::debug!(name = %name, \"[tool][skill_registry] uninstall\");\n        let params = crate::openhuman::skills::ops_install::UninstallWorkflowParams {\n            name: name.to_string(),\n        };\n        match crate::openhuman::skills::ops_install::uninstall_workflow(params, None) {\n            Ok(outcome) => Ok(ToolResult::success(serde_json::to_string(&json!({\n                \"name\": outcome.name,\n                \"removed_path\": outcome.removed_path,\n                \"scope\": outcome.scope,\n            }))?)),\n            Err(error) => Ok(ToolResult::error(format!(\n                \"Failed to uninstall skill '{name}': {error}\"\n            ))),\n        }\n    }\n}\n\n#[cfg(test)]","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/skills/catalog/tools.rs#L264-L300","documentation":"The skill-registry remove tool was invoked without a usable `name` argument — the installed-skill slug is missing, not a string, or empty after trimming. Removal needs the slug to locate the installed bundle, so the guard fires before any filesystem change.","triggerScenarios":"Thrown at src/openhuman/skills/catalog/tools.rs:282 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass `name` as the exact installed skill slug","List installed skills first to copy the correct slug"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}