sipeed/picoclaw · warning

deltachat set profile config: %w

Error message

deltachat set profile config: %w

What it means

applyProfileConfig's batch_set_config carrying displayname and/or selfavatar failed at the RPC level. This is optional cosmetic configuration: the bootstrap path already degrades it to a warning (deltachat.go:1064-1070), but the ensureAccount path (deltachat.go:1020) propagates it and stops the channel.

Source

Thrown at pkg/channels/deltachat/deltachat.go:1142

	cfgMap := map[string]*string{}
	if name := strings.TrimSpace(c.config.DisplayName); name != "" {
		cfgMap["displayname"] = accountConfigString(name)
	}
	if avatar := strings.TrimSpace(c.config.AvatarImage); avatar != "" {
		avatar = expandHome(avatar)
		if !fileExists(avatar) {
			logger.WarnCF("deltachat", "avatar_image not found; leaving current avatar unchanged", map[string]any{
				"avatar_image": avatar,
			})
		} else {
			cfgMap["selfavatar"] = accountConfigString(avatar)
		}
	}
	if len(cfgMap) == 0 {
		return nil
	}
	if _, err := c.rpc.call(ctx, "batch_set_config", accountID, cfgMap); err != nil {
		return fmt.Errorf("deltachat set profile config: %w", err)
	}
	return nil
}

// configureAccount writes the managed account settings and runs the (network-bound)
// provider auto-configuration.
func (c *DeltaChatChannel) configureAccount(ctx context.Context, accountID int64) error {
	if c.config.Password.String() == "" {
		return c.passwordRequiredError("account is not configured")
	}

	cfgMap := accountConfigMap(c.config)
	if _, err := c.rpc.call(ctx, "batch_set_config", accountID, cfgMap); err != nil {
		return fmt.Errorf("deltachat set account config: %w", err)
	}

	logger.InfoCF("deltachat", "Configuring account (validating credentials)", map[string]any{
		"email": c.config.Email,

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Unset or fix display_name / avatar_image settings and retry channel start
  2. Ensure the avatar path is readable by the user running deltachat-rpc-server
  3. Check server stderr logs for the core's rejection reason
Defensive patterns

Strategy: fallback

Validate before calling

// Skip profile keys whose files are not readable by the server user
if cfg.AvatarImage != "" && !fileReadableByServiceUser(cfg.AvatarImage) {
    cfg.AvatarImage = "" // leave avatar unchanged instead of failing
}

Try / catch

if profileErr := c.applyProfileConfig(ctx, accountID); profileErr != nil {
    // cosmetic only: log and continue, as the bootstrap path already does
    logger.WarnCF("deltachat", "profile config skipped", map[string]any{"error": profileErr.Error()})
}

Prevention

When it happens

Trigger: c.rpc.call(ctx, "batch_set_config", accountID, cfgMap) errors while setting displayname or a selfavatar path that passed the fileExists check.

Common situations: Avatar file not readable by the server process (ownership/permissions), server mid-shutdown, avatar rejected by core (oversized/unsupported format).

Related errors


AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15). Data as JSON: /api/errors/d10a066031168626. Report an issue: GitHub.