{"record":{"id":"eb08d7500a86041d","repo":"tinyhumansai/openhuman","slug":"flow-memory-remember-e","errorCode":null,"errorMessage":"flow_memory_remember: {e}","messagePattern":"flow_memory_remember: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/flows/memory_tools.rs","lineNumber":520,"sourceCode":"                \"[flows:memory:safety] flow_memory_remember rejected secret-like content flow_id_chars={} key_chars={} content_chars={}\",\n                flow_id.chars().count(),\n                key.chars().count(),\n                content.chars().count()\n            );\n            return Ok(ToolResult::error(\n                \"Refusing to store content that looks like a secret. Remove credentials or tokens and try again.\".to_string(),\n            ));\n        }\n\n        // SECURITY: the namespace is derived internally from `flow_id` —\n        // this tool has no `namespace` parameter, so a flow can only ever\n        // write into its own `flow_<id>` sandbox, never user/global memory\n        // or another flow's namespace.\n        let namespace = flow_namespace(flow_id);\n        let display_key = format!(\"{namespace}/{key}\");\n        let guard = active_memory_guard()\n            .await\n            .map_err(|e| anyhow::anyhow!(\"flow_memory_remember: {e}\"))?;\n        // `store` carries the taint on the contract, so the engine trait's\n        // separate `store_with_taint` door is unnecessary. `ExternalSync` is\n        // the honest request: a flow wrote this, not the user.\n        match guard\n            .store(\n                &namespace,\n                key,\n                content,\n                category,\n                None,\n                MemoryTaint::ExternalSync,\n            )\n            .await\n        {\n            Ok(()) => Ok(ToolResult::success(format!(\n                \"Stored flow memory: {display_key}\"\n            ))),\n            Err(e) => Ok(ToolResult::error(format!(","sourceCodeStart":502,"sourceCodeEnd":538,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/flows/memory_tools.rs#L502-L538","documentation":"The flow_memory_remember tool's underlying memory write failed; wrapped with the tool name. Secret-like content was already rejected earlier as a soft ToolResult::error, so reaching this wrap means a genuine store failure during the namespaced upsert (namespace derived internally from flow_id).","triggerScenarios":"Thrown at src/openhuman/flows/memory_tools.rs:520 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the wrapped memory-store error","Verify the memory provider is available","Retry the remember call after recovery"],"exampleFix":null,"handlingStrategy":"try-catch","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"}