{"content":"merge: PR #147 feat(user-avatar-update) — user identity avatar update channel. Adds userIdentity:updateAvatar IPC (P1 allowlist + regenerated ipc-contract.json) with /info/avatar chain sync on the existing identity. Set path: validate data URL, stage locally with avatar_pin_id cleared, republish via shared syncUserIdentityToChain (latest-pin-wins; sync failures non-blocking, covered by the profile-page Retry Sync affordance bound to userIdentity:retryChainSync). Clear path: wipe local avatar, publish the empty text/plain /info/avatar pin only when a pin was previously recorded (Bot Info clear convention, prevents mnemonic import resurrecting the old avatar). Renderer: inline avatar picker on the UserSettings identity card, user-center module-cache invalidation, i18n en/zh. Review: verified sync/retry idempotency chain in source (buildUserInfoSyncSteps candidate rule + resumeUserIdentitySetup includeProfileSteps:true), electron compile clean, 47/47 tests green (ipcContract/ipcRegistry/avatarSource/humanIdentityPinWriter/avatarNormalize) in a scratch worktree. Merged as 7178d533 on main.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}