Project

General

Profile

Actions

Wiki » History » Revision 6

« Previous | Revision 6/8 (diff) | Next »
Redmine Admin, 08/04/2026 10:03 PM


Green Chat 0.2.3 — памятка бета-тестера

Спасибо, что участвуете в тестировании Green Chat. Эта памятка объясняет,
как подготовиться к бете, что особенно важно проверить в версии 0.2.3 и как
составить полезный баг-репорт.

Версии беты 0.2.x

Текущая версия — 0.2.3. Памятка покрывает все возможности линейки 0.2.x;
полные списки изменений по версиям:

  • 0.2.3 (актуальная сборка 4 августа 2026) —
    Android-клиент и уведомления на телефон, защита от расхождения MLS-эпох,
    мобильные вложения и safe areas, приглашения в публичные каналы, исправления
    композера и push relay. Требует миграции 023/024 и настроенный relay.
  • 0.2.2 (23 июля 2026) — уведомления, звук и
    счётчики при свёрнутом или скрытом в tray окне; быстрое переподключение
    после сна компьютера; исправления восстановления личных чатов. Серверных
    изменений нет.
  • 0.2.1 (22 июля 2026) — надёжная доставка:
    клиент сверяет состояние с сервером и догружает пропущенные сообщения;
    восстановление личного чата после logout и повторного входа собеседника;
    диагностический лог glchat.log. Требует обновлённый сервер.
  • 0.2.0 (20 июля 2026) — роли и управление
    участниками каналов, раздел «Треды», карточки профилей, сохранённые
    сообщения, история загрузок, просмотрщик изображений и GIF, звуковые
    уведомления, отметка вышедших со всех устройств пользователей.

Что изменилось после релиза 0.2.2

Android-клиент и мобильные уведомления

  • Появился первый Android-клиент, собранный из общего с desktop кода Tauri 2:
    те же экраны, локальная база и MLS-шифрование.
  • Ключ устройства и ключ локальной базы хранятся через AndroidKeyStore.
  • Устройство можно привязать сканированием QR-кода или ручным вводом кода.
  • Интерфейс адаптирован под один экран телефона, системные safe areas и
    виртуальную клавиатуру.
  • Нативный Android picker позволяет прикреплять документы и изображения к
    сообщению или ответу в треде.
  • Firebase Cloud Messaging будит свёрнутое приложение сигналом без текста
    сообщения. Клиент сам догружает и расшифровывает сообщение; push relay не
    получает содержимое переписки или идентификатор аккаунта.

Надёжность MLS и доставки

  • Клиент применяет изменения MLS-группы только после подтверждения сервера,
    что предотвращает расхождение криптографических веток при гонке Commit.
  • Если устройство уже не может расшифровать сообщение текущей эпохи, оно
    запрашивает безопасную замену своей MLS-листины и автоматически возвращается
    в группу через replacement Welcome. Расшифрованная локальная история
    сохраняется.
  • Сервер получил durable-запросы восстановления membership и миграцию
    024_membership_recovery.sql.
  • Push relay удаляет недействительные FCM installation IDs, валидирует
    согласованность секретов при bootstrap, а запуск chat server больше не
    блокируется недоступным relay.

Каналы и интерфейс

  • Любой участник публичного канала может пригласить нового пользователя через
    Add member; исключение участников публичного канала остаётся запрещено.
  • На Android исправлены имя приложения и системные push-строки.
  • Сборка APK очищает старые пакеты перед упаковкой, исключая раздутые
    инкрементальные артефакты.
  • Иконки desktop-композера приведены к единому стилю, а emoji picker больше не
    обрезается у границ окна.

Обновление с 0.2.2 требует серверных изменений актуальной версии 0.2.3:
миграций 023_push_installations.sql, 024_membership_recovery.sql и
настроенного push relay для фоновых Android-уведомлений.

Перед началом тестирования

  1. Установите версию 0.2.3 на все свои устройства. Старые клиенты
    несовместимы с новой синхронизацией участников каналов и могут работать
    некорректно.
  2. Проверьте номер версии в Settings → Profile.
  3. По возможности подготовьте два тестовых аккаунта и два устройства для
    одного из аккаунтов. Это позволит проверить доставку, роли и
    мультиустройство.
  4. Не используйте единственный рабочий аккаунт для сценариев с выходом из
    системы: logout безвозвратно удаляет историю на текущем устройстве.
  5. Бета-версия может содержать ошибки. Не отправляйте через неё данные,
    потеря которых будет критичной.

Как устроено хранение сообщений

Green Chat — корпоративный мессенджер со сквозным шифрованием MLS. Сервер
хранит сообщения и файлы в зашифрованном виде и не располагает ключами для
их чтения.

Из этого следуют важные ограничения:

  • история расшифровывается и хранится на устройствах пользователя;
  • сервер и служба поддержки не могут прочитать переписку или восстановить
    уничтоженные ключи;
  • выход из аккаунта очищает локальную историю и ключи на этом устройстве;
  • если выйти со всех устройств, прежнюю историю восстановить будет нельзя;
  • для поиска ошибки особенно важны точное время события, участники, канал и
    последовательность действий.

Что особенно важно проверить в бете 0.2.x

1. Обычные сообщения и восстановление соединения (изменено в 0.2.1, 0.2.2 и 0.2.3)

  • Отправьте сообщения в канал и личный чат.
  • Проверьте доставку текста, эмодзи, форматирования и ответов в треде.
  • Полностью отключите сеть на одном из устройств на несколько минут, затем
    включите её обратно.
  • Убедитесь, что клиент подключился самостоятельно и получил сообщения,
    отправленные во время офлайна.
  • Проверьте, что статус online/offline обновляется без повторного открытия
    канала.

Сообщение со статусом sent, которое после восстановления соединения так и
не появилось у получателя, считается важным багом.

Для проверки защиты 0.2.3 одновременно отправляйте сообщения и меняйте состав
одного канала с двух устройств. Постоянная ошибка расшифровки, бесконечная
синхронизация или невозможность продолжить отправку после переподключения —
важный баг.

2. Треды (новое в 0.2.0)

  • Создайте несколько тредов в разных каналах.
  • Откройте раздел Threads и проверьте сортировку по последней активности.
  • Переключите фильтры All и Unread.
  • Нажмите на тред в списке и убедитесь, что открылись правильный канал и
    исходное сообщение.
  • Ответьте с @mention, добавьте вложение или перетащите файл в область
    ответа.
  • При наличии второго устройства проверьте синхронизацию прочитанности
    тредов.

3. Роли и участники каналов (новое в 0.2.0)

Для полноценной проверки нужны минимум три аккаунта: владелец, модератор и
обычный участник.

  1. Создайте приватный канал и пригласите двух участников.
  2. Убедитесь, что создатель отмечен как owner.
  3. Назначьте одного участника модератором и затем снимите роль.
  4. Проверьте, что owner может приглашать и исключать участников.
  5. Проверьте, что moderator может управлять обычными участниками, но не
    владельцем или другим модератором.
  6. Исключите обычного участника: канал должен сразу исчезнуть у него из
    интерфейса, а новые сообщения не должны быть доступны.
  7. Повторно пригласите участника и убедитесь, что устаревшее событие удаления
    не убирает канал снова.
  8. Обычным участником публичного канала пригласите нового пользователя через
    Add member. Приглашённый должен получить канал без доступа к сообщениям,
    отправленным до его вступления.

Дополнительно можно проверить выход из канала:

  • обычный участник и модератор могут выйти самостоятельно;
  • owner с другими участниками должен сначала назначить модератора;
  • при выходе owner владение автоматически переходит назначенному модератору;
  • из DM выйти нельзя, но его можно скрыть через Remove for me;
  • в публичный канал может приглашать любой участник, но исключение участника
    недоступно, поскольку он может вступить обратно самостоятельно.

4. Профили (новое в 0.2.0)

  • Заполните аватар, должность, описание и рабочий телефон.
  • Откройте карточку профиля из сообщения и панели участников.
  • Проверьте копирование email и телефона.
  • Измените аватар или данные профиля на одном устройстве и убедитесь, что
    изменения появились у другого пользователя без перезапуска приложения.

Поля профиля видны всем пользователям организации — это справочная информация,
а не приватная часть переписки.

5. Поиск и действия с сообщениями

  • Найдите старое сообщение через поиск и перейдите к нему.
  • Убедитесь, что чат прокрутился к правильному сообщению и выделил его.
  • Проверьте доступные контекстные действия: ответ, редактирование, сохранение,
    закрепление и удаление там, где они разрешены.
  • Отредактируйте длинное сообщение и ответ в треде: поле ввода должно
    увеличиваться вместе с текстом.
  • Попробуйте превысить допустимую длину сообщения. Клиент должен показать
    понятное ограничение, а не зависнуть или молча потерять текст.

Поиск работает по локально доступной истории устройства. Отсутствие сообщения,
которого никогда не было на этом устройстве, само по себе не является багом.

6. Файлы, изображения и GIF (расширено в 0.2.0)

  • выберите файл через кнопку вложения и убедитесь, что он сначала появился в
    области подготовки к отправке;
  • удалите подготовленный файл, не отправляя сообщение;
  • перетащите файлы в основной чат и отдельно в открытый тред;
  • вставьте изображение из буфера обмена;
  • отправьте несколько файлов и проверьте, что они остались в исходном чате,
    даже если во время загрузки переключиться на другой канал;
  • откройте изображение во встроенном просмотрщике;
  • проверьте воспроизведение GIF и отсутствие чрезмерной нагрузки интерфейса;
  • удалите собственное сообщение с вложением и убедитесь, что файл больше не
    доступен из чата;
  • скачайте файл и проверьте его содержимое после расшифровки.
  • на Android выберите документ или изображение системным picker и отправьте
    его сначала в чат, затем в открытый тред.

Ошибки загрузки, повреждённый скачанный файл, вложение в неправильном канале
или зависшая подготовка файла считаются багами.

7. Сохранённые сообщения и загрузки (новое в 0.2.0)

  • Сохраните сообщения из разных каналов через контекстное меню.
  • Откройте раздел Saved, перейдите из него к исходному сообщению и удалите
    закладку.
  • При наличии второго устройства проверьте, что список сохранённых сообщений
    синхронизировался.
  • Скачайте несколько файлов и откройте раздел Downloads.
  • Проверьте действия Open file, Show in folder и
    Remove from history.

Сохранённые сообщения синхронизируются между устройствами и видны только
владельцу аккаунта. История загрузок хранится только на конкретном устройстве.
Удаление записи из Downloads не удаляет сам файл с диска. Файлы, скачанные до
установки 0.2.0, в историю автоматически не добавляются.

8. Уведомления и звук (изменено в 0.2.2 и 0.2.3)

  • Перед проверкой убедитесь, что в Settings → Notifications выключен
    Pause all notifications: включённый тумблер намеренно отключает попапы
    и звук, при этом сообщения и счётчики продолжают приходить. Кнопка
    Send test проверяет только доставку до операционной системы и работает
    даже при включённой паузе.
  • В Settings → Notifications нажмите Send test.
  • Оставьте окно приложения без фокуса и попросите другого тестера отправить
    DM — должен появиться системный попап и прозвучать звук.
  • Полностью сверните окно или скройте его в tray и попросите отправить ещё
    один DM: попап и звук должны прийти, не открывая окно, а после открытия
    счётчики и сами сообщения должны уже быть на месте без ручного обновления.
  • Проверьте @mention в канале. Обычное сообщение без упоминания по умолчанию
    не показывает попап.
  • Отключите звук в настройках и убедитесь, что новые сообщения приходят без
    звукового сигнала.
  • Проверьте DND, mute канала и quiet hours.
  • Полностью закройте приложение через tray → Quit, отправьте на аккаунт
    DM и проверьте email-уведомление, если SMTP включён на сервере.

Попапы показывает запущенное приложение. После полного выхода через Quit
desktop-клиент не может показать системное уведомление; в этом случае для DM
может прийти только email.

На Android 13+ разрешите уведомления при первом запуске. Сверните приложение,
отправьте DM с другого аккаунта и проверьте push, догрузку сообщения и переход
по тапу. Push требует Google Play services и не приходит после принудительной
остановки приложения через системные настройки.

9. Несколько устройств

  • Войдите на второе устройство по паролю или привяжите его по QR-коду.
  • Создайте приватный канал и пригласите пользователя с несколькими активными
    устройствами.
  • Убедитесь, что канал, его название и новые сообщения появились на всех
    устройствах приглашённого.
  • Проверьте синхронизацию прочитанности, черновиков, сохранённых сообщений и
    скрытых чатов.
  • Измените аватар и убедитесь, что он обновился на других клиентах.
  • Закройте одно устройство, продолжите работу на втором, затем верните первое
    в сеть и проверьте восстановление состояния.

10. Android 0.2.3

  • Установите universal APK на Android 7 или новее и проверьте, что приложение
    называется Green Chat.
  • Проверьте вход по паролю, привязку по QR и ручной ввод кода.
  • Откройте клавиатуру в чате и треде: поле ввода и нижние кнопки должны
    оставаться видимыми.
  • На устройстве с вырезом или жестовой навигацией проверьте верхнюю навигацию,
    боковые панели, Threads и Devices.
  • Выберите документ и изображение системным picker, отправьте их в чат и тред,
    затем скачайте и откройте на втором устройстве.
  • Сверните приложение, получите push и откройте сообщение по тапу без ручного
    обновления.

Удаление Android-приложения удаляет локальную историю и ключи этого устройства.
Не переустанавливайте его во время сценария, если на аккаунте нет другого
активного устройства.

11. Выход со всех устройств (новое в 0.2.0)

Этот сценарий выполняйте только на специально созданном тестовом аккаунте.
Перед выходом убедитесь, что клиент подключён к серверу.

  1. Выйдите из аккаунта на последнем активном устройстве и подтвердите
    предупреждение об удалении истории.
  2. У другого пользователя аккаунт должен получить отметку Logged out в
    списке DM, профиле, панели участников и выборе пользователя.
  3. В существующем DM история должна остаться читаемой, но поле отправки должно
    замениться предупреждением.
  4. Создание нового DM с вышедшим пользователем должно быть заблокировано.
  5. Отправьте в канал сообщение с его персональным @mention: сообщение
    должно отправиться остальным участникам, а автор должен увидеть
    предупреждение о недоставке упомянутому пользователю.
  6. Снова войдите этим аккаунтом. Отметка Logged out должна исчезнуть у других
    пользователей.

Повторный вход создаёт новое активное устройство, но не возвращает историю,
уничтоженную при logout.

Что обязательно считать багом

  • Падение, зависание или бесконечная загрузка приложения.
  • Потеря уже отправленного сообщения или его появление в неправильном чате.
  • Ошибка расшифровки, нечитаемый текст или повреждённый файл.
  • Получение доступа к чужому каналу, профилю или данным без разрешения.
  • Возможность обычного участника выполнить действие owner/moderator.
  • Доступ исключённого участника к новым сообщениям приватного канала.
  • Расхождение каналов, ролей, сохранённых сообщений или прочитанности между
    устройствами, которое не исправляется после переподключения.
  • Отсутствие DM или @mention-уведомления при выполненных условиях доставки.
  • Неправильный адресат, канал или тред у вложения.
  • Неработающая кнопка, обрезанный интерфейс или нечитаемый текст, особенно в
    тёмной теме.

Проблемы безопасности, потерю данных и воспроизводимые падения отмечайте
приоритетом High.

Известные ограничения беты

  • Вход обычно доступен только по приглашению; вкладки создания свободного
    аккаунта может не быть.

  • Автоматического обновления нет — новую версию нужно устанавливать вручную.

  • Windows может показать SmartScreen с предупреждением о неизвестном
    издателе.

  • Неподписанная macOS-сборка может быть заблокирована Gatekeeper. После
    переноса приложения в /Applications выполните:

    xattr -cr "/Applications/Green Chat.app"
    
  • На macOS системные попапы бета-сборки могут отображаться от имени
    Script Editor.

  • На части серверов отправка файлов и email-уведомления могут быть отключены.

  • Числовой бейдж учитывает DM и упоминания; обычное непрочитанное сообщение в
    канале отображается точкой.

  • Сообщение SPKI pin mismatch после плановой смены серверного ключа требует
    повторного входа. Клиент намеренно не принимает новый ключ молча.

  • Android APK 0.2.3 является debug-сборкой, устанавливается вручную и может
    вызвать предупреждение Play Protect о неизвестном разработчике.

  • Фоновые Android-уведомления требуют Google Play services и настроенный push
    relay. На HMS/чистом AOSP и после Force stop сообщения появятся только после
    ручного открытия приложения.

Если поведение не перечислено здесь и выглядит неправильным, лучше отправить
репорт.

Полный changelog всех версий 0.2.x

Ниже release notes приведены полностью, от текущей версии к самой ранней.
Отдельные файлы по ссылкам в начале памятки содержат тот же текст.

Green Chat 0.2.3 — Beta Update

Дата первой Android-сборки: 30 июля 2026 года. Актуальная сборка:
4 августа 2026 года.

Версия 0.2.3 добавляет мобильную сборку (Android) и уведомления на телефон.
В актуальную сборку также вошли исправления Android, защиты от расхождения
MLS-эпох, управления публичными каналами, desktop-композера и push relay.

Android-сборка экспериментальная: это debug-APK, он не подписан релизным
ключом, не публикуется в Play и ставится вручную.

Изменения актуальной сборки от 4 августа

Надёжность шифрования и доставки
  • Клиент больше не применяет локальный MLS Commit до подтверждения сервера.
    Это предотвращает расхождение криптографических веток при одновременных
    изменениях состава группы.
  • Добавлено автоматическое восстановление устройства, уже попавшего в такую
    ветку: при ошибке расшифровки текущей эпохи здоровый участник заменяет его
    MLS-листину, а клиент принимает replacement Welcome и продолжает доставку.
  • Расшифрованная локальная история при восстановлении сохраняется. Pending
    MLS-состояние и исходящий запрос сохраняются атомарно, поэтому потерянный
    HTTP-ответ или перезапуск не создают второй отличный Commit.
  • Серверу требуется миграция 024_membership_recovery.sql.
Android
  • Интерфейс учитывает вырезы экрана, status bar, навигационную панель и
    виртуальную клавиатуру.
  • Выбор файла использует нативный Android picker; документы и изображения
    можно прикреплять к обычным сообщениям и ответам в тредах.
  • В launcher и системных настройках отображается имя Green Chat, системные
    push-строки приведены к английской локализации.
  • Перед упаковкой удаляется старый universal APK/AAB, чтобы прерванная
    инкрементальная сборка не раздувала новый пакет.
Каналы и интерфейс
  • Любой активный участник публичного канала может пригласить нового
    пользователя через Add member. Исключение участников публичного канала
    по-прежнему запрещено.
  • Иконки действий в desktop-композере приведены к единому стилю.
  • Emoji picker больше не обрезается границами поля ввода.
Push relay и эксплуатация
  • Relay корректно распознаёт реальный ответ FCM UNREGISTERED и удаляет
    недействительные Firebase installation IDs.
  • Bootstrap dev push-конфигурации останавливается при расхождении секрета в
    tenants.json и переменной окружения.
  • Локальный chat server больше не зависит по healthcheck от push relay и может
    работать без фоновых мобильных уведомлений.

Android-клиент

  • Приложение собрано из того же кода, что и desktop (Tauri 2 mobile): те же
    MLS-шифрование, те же экраны, та же логика доставки. Отдельного мобильного
    клиента с собственной криптографией не появилось.
  • Приватный ключ устройства и ключ локальной базы хранятся в AndroidKeyStore
    (аппаратно, если устройство поддерживает); удаление приложения удаляет и их.
  • Линковка устройства сканированием QR-кода. Если камера недоступна — работает
    ручной ввод кода.
  • Интерфейс перестроен под телефон: список чатов и переписка — один стек с
    кнопкой «назад», панели тредов, участников и сохранённых открываются на весь
    экран, учитываются вырезы экрана и виртуальная клавиатура.

Уведомления на телефон

  • Приходят через Firebase Cloud Messaging. Содержимое сообщения в push не
    передаётся
    — приходит только сигнал «есть новое», текст «New message»
    формирует само приложение на устройстве.
  • Push будит приложение и запускает догрузку, поэтому при открытии всё уже на
    месте.
  • Уведомление приходит только на устройства без активного соединения — если
    телефон онлайн, сообщение и так придёт по WebSocket.
  • На Android 13+ при первом запуске приложение спросит разрешение на
    уведомления. Отказ отключает попапы, сообщения продолжают приходить.
  • Требуются Google Play services. На устройствах без них (HMS, чистый AOSP)
    фоновых уведомлений не будет — ограничение транспорта, не клиента.
  • Push не приходит, если приложение принудительно остановлено через
    «Настройки → Приложения → Остановить»: система блокирует доставку до
    следующего запуска вручную.

Уведомления не заменяют доставку: если push потерялся, сообщения всё равно
догружаются при открытии приложения.

Сервер

Требуется обновление сервера и миграции 023_push_installations.sql и
024_membership_recovery.sql.
Дополнительно администратору нужно настроить push relay — без него мобильный
клиент работает полностью, но фоновых уведомлений не будет
(см. docs/push-relay-deployment.md и шаг 4b
бета-чеклиста).

Границы приватности не изменились: сервер по-прежнему не видит текст
сообщений и ключи. Появился один новый элемент — центральный push relay
получает идентификатор установки приложения (не аккаунт и не сообщение) и
время отправки; подробности и принятые риски описаны в
ADR-0026.

Обновление

  1. Администратор обновляет сервер и применяет миграции 023 и 024.
  2. Desktop: установите 0.2.3 на все устройства.
  3. Android: установите APK, войдите или привяжите устройство по QR.

Что особенно важно проверить на телефоне:

  1. приходит ли уведомление, когда приложение свёрнуто, а не открыто;
  2. открываются ли после тапа именно новые сообщения — без ручного обновления;
  3. работает ли одновременно телефон и десктоп на одном аккаунте (счётчики
    непрочитанных не должны расходиться);
  4. привязка устройства по QR-коду;
  5. отправка и открытие вложений с телефона.

Green Chat Desktop 0.2.2 — Beta Update

Дата выпуска: 23 июля 2026 года.

Версия 0.2.2 закрывает бета-репорт «клиент в фоне на Windows молчит и не
обновляется»: свёрнутое или скрытое в tray окно не получало ни системного
уведомления, ни счётчика непрочитанных, а интерфейс показывал новые сообщения
только после ручного обновления страницы (Ctrl+R).

Обновляется только desktop-клиент — серверных изменений в этом выпуске
нет (см. раздел «Сервер»).

Доставка и уведомления при свёрнутом окне

  • Фоновая сверка с сервером перенесена из интерфейсного слоя в нативный
    Rust-процесс и выполняется каждые 10 секунд. Windows может приостанавливать
    таймеры и сам JS-контекст WebView2 у скрытого окна — теперь это не
    останавливает ни доставку сообщений, ни уведомления.
  • Системное уведомление для сообщения, пришедшего в свёрнутое/фоновое окно,
    создаётся непосредственно нативным процессом, до и независимо от
    интерфейсного слоя. Открывать окно, чтобы получить попап, не требуется.
    Настройки Pause all notifications, DND, mute, quiet hours и режим
    уведомлений канала учитываются так же, как раньше.
  • Возврат окна из фона, minimize или tray запускает немедленную сверку —
    счётчики и новые сообщения появляются сами, ручной Reload больше не нужен.
  • Потерянный единичный WebSocket-кадр или half-open соединение больше не
    оставляют клиент без счётчика, звука и попапа: любое расхождение с сервером
    устраняется ближайшей 10-секундной сверкой.
  • После выхода компьютера из сна клиент больше не ждёт до 90 секунд, считая
    старый WebSocket подключённым: resume-watchdog обнаруживает паузу системных
    часов и переподключается за несколько секунд, сразу забирая пропущенные
    сообщения и восстанавливая presence.
  • Сводное уведомление «N new messages» о сообщениях, восстановленных фоновой
    сверкой, показывается даже если окно уже получило фокус (например, сразу
    после открытия крышки ноутбука) и не дублируется при открытии окна после
    нативного уведомления.
  • Если звук сообщений включён, уведомления сопровождаются нативным системным
    звуком; серия подряд идущих сообщений даёт один звук, а не очередь сигналов.
  • Определение «окно в фокусе» для подавления попапов использует состояние
    самого интерфейса, а не системный сигнал окна — на Windows системный сигнал
    недостоверен и мог как показывать попапы поверх активного окна, так и
    глушить их у скрытого.

Личные сообщения

  • Если KeyPackage нового устройства ещё загружается, повторная попытка
    восстановления membership выполняется через несколько секунд с постепенным
    увеличением интервала. Чат больше не зависает в состоянии re-syncing
    из-за двухминутного ожидания, которое при каждом перезапуске начиналось
    заново.
  • Исправлена ложная блокировка отправки после password login или привязки
    устройства: старые клиенты создавали пустую MLS BasicCredential, поэтому
    два реальных листа ошибочно считались одним пользователем. Готовность
    личного чата теперь проверяется по фактическому MLS roster, а новые
    устройства сохраняют credential с серверным username.

Сервер

Серверный код в 0.2.2 не менялся. Требования совпадают с 0.2.1: сервер должен
быть обновлён до серверной версии выпуска 0.2.1 (endpoints состояния
синхронизации и миграция 022_membership_repair_claims.sql). Со старым
сервером клиент продолжает работать в режиме прежней полной догрузки, но
10-секундная сверка и восстановление membership недоступны.

Как и раньше, содержимое сообщений, ключи и настройки уведомлений не
передаются серверу в открытом виде; текст системных уведомлений формируется
локально и никогда не покидает устройство.

Обновление

Установите Green Chat Desktop 0.2.2 на все свои устройства.

Особенно важно повторно проверить:

  1. сообщения и @mention в свёрнутое или скрытое в tray окно: системный
    попап и звук должны прийти без открытия окна, а после открытия счётчики и
    сообщения должны быть уже на месте — без Ctrl+R;
  2. перед проверкой уведомлений убедитесь, что в Settings → Notifications
    выключен Pause all notifications — включённый тумблер отключает попапы
    и звук намеренно, при этом сообщения и счётчики продолжают приходить;
  3. получение сообщений после сна/пробуждения компьютера;
  4. личный чат после logout и повторного входа одного из участников;
  5. одновременную работу двух устройств одного аккаунта.

Green Chat Desktop 0.2.1 — Beta Update

Дата выпуска: 22 июля 2026 года.

Версия 0.2.1 исправляет проблемы доставки сообщений и уведомлений,
обнаруженные во время бета-тестирования 0.2.0.

Главное

  • Доставка больше не зависит только от WebSocket-событий. Клиент сверяет
    локальное состояние с сервером после подключения, при ошибке live-доставки
    и каждые две минуты, пока соединение активно.
  • Пропущенные во время офлайна сообщения автоматически догружаются в
    правильном порядке вместе с необходимыми MLS-коммитами.
  • Счётчики непрочитанных, список тредов и сохранённые сообщения обновляются
    после каждой сверки с сервером.
  • Для сообщений, полученных через фоновую сверку, показывается одно сводное
    уведомление вместо серии попапов. Настройки DND, mute, quiet hours и режим
    уведомлений канала продолжают учитываться.

Исправление личных сообщений после повторного входа

  • Исправлена ситуация, когда после logout и повторного входа личный чат
    оставался доступен, но новые сообщения фактически шифровались без устройства
    собеседника.
  • Клиент автоматически обнаруживает отсутствующее устройство участника и
    повторно добавляет его в MLS-группу личного чата.
  • Одновременное восстановление несколькими устройствами защищено коротким
    серверным lease: проигравший клиент останавливается до изменения локальной
    MLS-эпохи.
  • Пока устройство собеседника ещё не восстановлено в личном чате, поле ввода
    заменяется сообщением о синхронизации, а отправка временно блокируется.
    Отметка ✓✓ в этом состоянии заменяется честным предупреждением
    not delivered.
  • После успешного восстановления чат разблокируется по долговременному
    состоянию клиента, даже если соответствующее WebSocket-событие потерялось.

Надёжность и диагностика

  • Ошибка обработки live-сообщения теперь запускает ускоренную сверку с
    сервером вместо ожидания следующего переподключения.
  • Исправлена потеря полной проверки групп, если переподключение совпало по
    времени с уже выполняющейся фоновой сверкой.
  • Отложенные reconcile-задачи корректно отменяются при logout.
  • Desktop-клиент пишет диагностический лог в glchat.log в каталоге данных
    приложения.
  • Добавлена ротация лога при достижении 5 MiB с сохранением одной предыдущей
    копии glchat.log.old, включая повторную ротацию на Windows.

Сервер

  • Добавлены авторизованные endpoints состояния синхронизации: хвосты сообщений
    по группам и отсутствующие membership-листы.
  • Добавлен одноразовый lease-token для безопасного восстановления membership.
  • Добавлена метрика Prometheus для количества обнаруженных membership gaps.
  • Добавлена миграция 022_membership_repair_claims.sql.

Содержимое сообщений, ключи и настройки уведомлений по-прежнему не передаются
серверу в открытом виде. Новые endpoints работают только с уже известными
серверу метаданными групп, устройств и последовательностей сообщений.

Обновление

Для проверки исправлений установите Green Chat Desktop 0.2.1 на все свои
устройства
. Сервер также должен быть обновлён и иметь применённую миграцию
022_membership_repair_claims.sql.

Особенно важно повторно проверить:

  1. получение сообщений после временного отключения сети;
  2. непрочитанные, звук и системный попап после фоновой догрузки;
  3. личный чат после logout и повторного входа одного из участников;
  4. одновременную работу двух устройств одного аккаунта;
  5. наличие glchat.log после перезапуска desktop-приложения.

glchat Desktop 0.2.0 — Beta Update

Изменения с 9 по 20 июля 2026 года.

Новые возможности

  • Добавлены роли владельца и модератора канала, управление участниками, выход из канала и локальное скрытие чатов.
  • Появились карточки профилей с аватаром, должностью, описанием и контактами.
  • Добавлен единый раздел «Треды» со всеми обсуждениями и фильтром непрочитанных.
  • Сообщения теперь можно сохранять в личные закладки с синхронизацией между устройствами.
  • Добавлена локальная история загрузок: файл можно открыть, показать в папке или убрать из списка.
  • Изображения открываются во встроенном просмотрщике, добавлена безопасная анимация GIF.
  • Изображения из буфера обмена можно вставлять прямо в сообщение.
  • Добавлены звуковые уведомления о новых сообщениях и настройка звука.
  • Пользователи, вышедшие со всех устройств, теперь отмечаются в интерфейсе. Перед отправкой им личного сообщения или упоминания показывается предупреждение.

Улучшения интерфейса

  • Добавлены контекстные действия для сообщений.
  • Улучшены редакторы сообщений и ответов в тредах.
  • Добавлены упоминания пользователей в ответах треда.
  • Улучшена работа с вложениями: предварительная подготовка, drag-and-drop в треды и удаление отправленных файлов.
  • Поиск теперь прокручивает чат до найденного сообщения и ограничивает слишком тяжёлые запросы.
  • Улучшены индикаторы присутствия, подсчёт участников и расположение боковых панелей.
  • После отправки сообщения чат автоматически прокручивается к нему.
  • Исправлено восстановление окна приложения из системного трея.

Исправления и стабильность

  • Исправлена синхронизация каналов, участников и метаданных между несколькими устройствами.
  • Восстановлена доставка уведомлений после длительного офлайна.
  • Статус пользователя обновляется сразу после подключения.
  • Исправлен учёт непрочитанных сообщений при переключении фокуса окна.
  • Исключённые каналы сразу удаляются из интерфейса, а устаревшие события больше не удаляют канал после повторного вступления.
  • Исправлены отображение закреплённых файлов и привязка вложений к исходному чату.
  • Добавлена корректная обработка максимальной длины сообщений.
  • Аватары профилей теперь обновляются в реальном времени.
  • Улучшено восстановление личных чатов после выхода всех участников со всех устройств.
  • При выходе устройство отзывается на сервере, чтобы не оставлять неактивные устройства и ключи.

Сервер и эксплуатация

  • Добавлены Prometheus-метрики для HTTP, WebSocket, PostgreSQL, Redis и Go runtime.
  • Подготовлены базовые правила мониторинга и алертов.
  • Улучшена конфигурация TLS для файлового хранилища.

Итого: 40 коммитов и 178 изменённых файлов в ветке main.

Как оставить баг-репорт

Трекер:
https://bug.green-lab.space/projects/greenchat/issues/new. Регистрация не
нужна, репорт можно отправить анонимно.

Что указать

Краткое название: что сломалось и где

Шаги:
1. …
2. …
3. …

Ожидал: …
Получил: …

Окружение:
- Green Chat 0.2.3 (или версия из Settings → Profile)
- ОС и версия
- один или несколько аккаунтов/устройств
- название канала или DM
- точное время события и часовой пояс

Воспроизводится: всегда / иногда / один раз
Дополнительно: скриншот или короткое видео

Для проблем синхронизации укажите ОС и версию клиента на каждой стороне,
а также какое устройство было офлайн.

Трекер публичный. Не прикладывайте пароли, invite-коды, ключи, приватные
логи или скриншоты с конфиденциальной перепиской. Перед отправкой замажьте
лишние данные.

Приоритет

Приоритет Когда использовать
Normal Большинство ошибок интерфейса и поведения
High Падение, потеря данных, недоставка сообщений, нарушение прав или безопасности
Urgent / Immediate Не выбирайте без отдельной просьбы команды

Быстрая диагностика уведомлений

  1. Нажмите Settings → Notifications → Send test.
  2. Если тест пришёл, проверьте Pause all notifications, DND, mute,
    quiet hours и фокус окна: Send test обходит эти настройки, а обычные
    уведомления — нет.
  3. Для канала используйте персональный @mention; обычное сообщение может не
    создавать попап.
  4. Если приложение было закрыто через tray → Quit, системного попапа быть не
    должно.
  5. Если Send test не работает при разрешённых уведомлениях ОС, создайте
    баг-репорт и обязательно укажите операционную систему.

Updated by Redmine Admin about 1 month ago · 8 revisions