{"record":{"id":"9d0455c90599f87d","repo":"tinyhumansai/openhuman","slug":"scan-task-failed-e","errorCode":null,"errorMessage":"scan task failed: {e}","messagePattern":"scan task failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/tools/impl/filesystem/glob_search.rs","lineNumber":214,"sourceCode":"        // `base` is already canonical (validate_path canonicalizes), so if this\n        // fallback fires the two roots become asymmetric and strip_prefix below\n        // may miss for an in-sandbox hit, rendering it absolute. Harmless: the\n        // absolute path is still readable and the per-hit filter still applies.\n        let action_root = tokio::fs::canonicalize(&path_policy.action_dir)\n            .await\n            .unwrap_or_else(|e| {\n                log::trace!(\n                    \"[tools:glob] action_dir canonicalize fallback: path='{}' error={e}\",\n                    path_policy.action_dir.display()\n                );\n                path_policy.action_dir.clone()\n            });\n\n        let result = tokio::task::spawn_blocking(move || {\n            collect_matches(&base, &action_root, &path_policy, &pattern, max_results)\n        })\n        .await\n        .map_err(|e| anyhow::anyhow!(\"scan task failed: {e}\"))?;\n\n        let (paths, truncated) = result;\n        log::debug!(\n            \"[tools:glob] scan complete: {} match(es) truncated={}\",\n            paths.len(),\n            truncated\n        );\n        let header = if truncated {\n            format!(\"{} match(es) (truncated at {max_results})\", paths.len())\n        } else {\n            format!(\"{} match(es)\", paths.len())\n        };\n\n        let mut body = String::with_capacity(paths.len() * 32 + header.len() + 1);\n        body.push_str(&header);\n        for p in paths {\n            body.push('\\n');\n            body.push_str(&p);","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/tools/impl/filesystem/glob_search.rs#L196-L232","documentation":"The spawned blocking scan task that walks directories matching the glob panicked or was cancelled, and its JoinError is surfaced here. The filesystem walk itself failed mid-scan — not a pattern or argument problem.","triggerScenarios":"Thrown at src/openhuman/tools/impl/filesystem/glob_search.rs:214 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry — join failures are often transient (task cancellation or runtime shutdown)","Narrow the pattern/path to reduce scan depth and I/O pressure","Check core logs for a panic backtrace from the scan task"],"exampleFix":null,"handlingStrategy":"retry","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"}