0.136.1

Fixed

  • Atomicity аватарок на partial write failure (ocr review к #162): writeAvatarFiles(kind, id, r) — единый хелпер с двухфазной записью. Фаза 1: все размеры в .tmp с rollback при ошибке (старые аватары не затронуты). Фаза 2: атомарный Rename всех .tmp → финал. Явный file.Close() после io.Copy (не defer в цикле — убирает гонку close/remove). UploadAgentAvatar рефакторён — 60 строк дублированного кода заменены вызовом хелпера.
  • Lock-ordering installMu → s.mu в updater (ocr review к #162): emitProgress больше не берёт s.mu (write lock) на каждом чанке скачивания. Поле lastProgressEmitatomic.Int64 (UnixNano), throttle через atomic.Load/Store. Убирает contention с Status() читателями в download hot-path.
  • AvatarCrop смонтирован всегда (ocr review к #162): <AvatarCrop> перенесён внутрь {#if showProfileModal} — кроппер монтируется только при открытии модалки. Backdrop-click теперь вызывает closeProfileModal() (сбрасывает avatarCtrl = null).