{"record":{"id":"9d33630bd591f47d","repo":"sipeed/picoclaw","slug":"deltachat-get-all-accounts-w","errorCode":null,"errorMessage":"deltachat get_all_accounts: %w","messagePattern":"deltachat get_all_accounts: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/channels/deltachat/deltachat.go","lineNumber":1237,"sourceCode":"\nfunc accountConfigOptionalString(value string) *string {\n\tif value == \"\" {\n\t\treturn nil\n\t}\n\treturn accountConfigString(value)\n}\n\nfunc accountConfigOptionalInt(value int) *string {\n\tif value <= 0 {\n\t\treturn nil\n\t}\n\treturn accountConfigString(strconv.Itoa(value))\n}\n\nfunc (c *DeltaChatChannel) listAccounts(ctx context.Context) ([]dcAccount, error) {\n\traw, err := c.rpc.call(ctx, \"get_all_accounts\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"deltachat get_all_accounts: %w\", err)\n\t}\n\tvar accounts []dcAccount\n\tif err := json.Unmarshal(raw, &accounts); err != nil {\n\t\treturn nil, fmt.Errorf(\"deltachat get_all_accounts decode: %w\", err)\n\t}\n\treturn accounts, nil\n}\n\nfunc (c *DeltaChatChannel) isConfigured(ctx context.Context, accountID int64) (bool, error) {\n\traw, err := c.rpc.call(ctx, \"is_configured\", accountID)\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"deltachat is_configured: %w\", err)\n\t}\n\tvar ok bool\n\tif err := json.Unmarshal(raw, &ok); err != nil {\n\t\treturn false, fmt.Errorf(\"deltachat is_configured decode: %w\", err)\n\t}\n\treturn ok, nil","sourceCodeStart":1219,"sourceCodeEnd":1255,"githubUrl":"https://github.com/sipeed/picoclaw/blob/49183d7e8daed0dba89ddbb6fcb60089401d9680/pkg/channels/deltachat/deltachat.go#L1219-L1255","documentation":"listAccounts' get_all_accounts JSON-RPC call failed at the transport level: server error, closed stdio ('deltachat rpc: connection closed' / 'rpc closed: ...'), or canceled context. It runs at the top of ensureAccount, so this usually means the RPC child is unhealthy.","triggerScenarios":"c.rpc.call(ctx, \"get_all_accounts\") errors because the child died at startup or the ctx is already canceled.","commonSituations":"deltachat-rpc-server exiting immediately (unreadable DC_ACCOUNTS_PATH, bad arch binary starting then crashing), PicoClaw shutting down.","solutions":["Check the server's stderr in PicoClaw debug logs for its exit reason","Verify data_dir exists and is writable by the service user","Restart PicoClaw so startRPC respawns the child"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"accounts, err := c.listAccounts(ctx)\nif err != nil {\n    if strings.Contains(err.Error(), \"rpc closed\") || strings.Contains(err.Error(), \"connection closed\") {\n        // child is dead: restart channel to respawn deltachat-rpc-server\n    }\n    return nil, err\n}","preventionTips":["Ensure DC_ACCOUNTS_PATH/data_dir is writable before channel start","Check server stderr (debug logs) whenever get_all_accounts fails at startup"],"tags":["deltachat","rpc","account","go"],"backgroundTag":null,"analyzedSha":"49183d7e8daed0dba89ddbb6fcb60089401d9680","analyzedAt":"2026-08-15T21:55:41.315Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}