{"record":{"id":"eb6c7d01fca1c357","repo":"tinyhumansai/openhuman","slug":"join-e","errorCode":null,"errorMessage":"join: {e}","messagePattern":"join: \\{e\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/memory/tools/diff.rs","lineNumber":150,"sourceCode":"        let workspace_dir = config.workspace_dir.clone();\n        let source_ids: Vec<(String, String, String)> = sources\n            .iter()\n            .filter(|s| s.enabled)\n            .map(|s| (s.id.clone(), s.label.clone(), s.kind.as_str().to_string()))\n            .collect();\n\n        let counts: Vec<(String, String, String, usize)> =\n            tokio::task::spawn_blocking(move || -> anyhow::Result<_> {\n                let ledger = tinycortex::memory::diff::Ledger::open(&workspace_dir)?;\n                let mut out = Vec::new();\n                for (sid, label, kind) in &source_ids {\n                    let count = ledger.snapshot_count_for_source(sid)?;\n                    out.push((sid.clone(), label.clone(), kind.clone(), count));\n                }\n                Ok(out)\n            })\n            .await\n            .map_err(|e| anyhow::anyhow!(\"join: {e}\"))?\n            .map_err(|e: anyhow::Error| anyhow::anyhow!(\"{e:#}\"))?;\n\n        let mut md = String::from(\"## Memory Sources (snapshot status)\\n\\n\");\n        if counts.is_empty() {\n            md.push_str(\"No enabled memory sources configured.\\n\");\n        } else {\n            for (sid, label, kind, count) in &counts {\n                md.push_str(&format!(\n                    \"- **{label}** ({kind}) — {count} snapshot(s) | source_id: `{sid}`\\n\"\n                ));\n            }\n            md.push_str(\n                \"\\nCall with `source_id` to see what changed since the last sync, \\\n                 or `checkpoint_id` for cross-source diffs.\\n\",\n            );\n        }\n\n        Ok(ToolResult::success(md))","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/memory/tools/diff.rs#L132-L168","documentation":"The spawn_blocking task that opens the diff Ledger over workspace_dir and iterates sources returned an Err (ledger open failure or per-source read failure). The join result is unwrapped and prefixed with join:.","triggerScenarios":"Thrown at src/openhuman/memory/tools/diff.rs:150 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the workspace memory diff ledger files are readable and not locked","Retry — the blocking task can fail under concurrent writes","Inspect the chained error for the offending source"],"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"}