{"record":{"id":"9d44528c0a988bc2","repo":"tinyhumansai/openhuman","slug":"read-workflow-resource-e","errorCode":null,"errorMessage":"read_workflow_resource: {e}","messagePattern":"read_workflow_resource: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/skills/tools.rs","lineNumber":325,"sourceCode":"        log::debug!(\"[tool][workflows] read_resource invoked\");\n        let skill_id = read_workflow_id(&args)?;\n        let profile_local = profile_local_skill_ids(self.profile_skills_root.as_deref());\n        if !skill_allowed_including_profile(&self.skill_allowlist, &profile_local, &skill_id) {\n            log::debug!(\n                \"[profiles] read_workflow_resource blocked by profile allowlist: {skill_id}\"\n            );\n            return Ok(ToolResult::error(format!(\n                \"read_workflow_resource: workflow `{skill_id}` is not available to the active agent profile\"\n            )));\n        }\n        let relative_path = read_required_str(&args, \"relative_path\")?;\n        let content = read_workflow_resource_with_profile(\n            &self.workspace_dir,\n            &skill_id,\n            Path::new(&relative_path),\n            self.profile_skills_root.as_deref(),\n        )\n        .map_err(|e| anyhow::anyhow!(\"read_workflow_resource: {e}\"))?;\n        Ok(ToolResult::success(serde_json::to_string(&json!({\n            \"workflow_id\": skill_id,\n            \"relative_path\": relative_path,\n            \"content\": content,\n        }))?))\n    }\n\n    fn is_concurrency_safe(&self, _args: &serde_json::Value) -> bool {\n        true\n    }\n}\n\n/// List recent skill runs.\npub struct WorkflowRecentRunsTool {\n    workspace_dir: PathBuf,\n    active_profile_id: Option<String>,\n    skill_allowlist: SkillAllowlist,\n    profile_skills_root: Option<PathBuf>,","sourceCodeStart":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/skills/tools.rs#L307-L343","documentation":"Reading a workflow resource file failed inside `read_workflow_resource`. The id and allowlist checks passed; the failure is in the filesystem/resource read layer — missing resource file inside the skill bundle, permission denial, or path resolution against the profile skills root, with `{e}` carrying the underlying IO error.","triggerScenarios":"Thrown at src/openhuman/skills/tools.rs:325 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check `{e}` for the IO cause (missing vs permission)","Verify the resource path exists inside the installed workflow bundle","Reinstall the skill if its bundle is incomplete","Confirm the profile skills root is readable"],"exampleFix":null,"handlingStrategy":"fallback","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-14T00:17:10.932Z"}