Wiki » History » Revision 3
Revision 2 (Redmine Admin, 07/21/2026 08:58 PM) → Revision 3/8 (Redmine Admin, 07/22/2026 08:21 PM)
# Green Chat 0.2.0 — памятка бета-тестера Спасибо, что участвуете в тестировании Green Chat. Эта памятка объясняет, как подготовиться к бете, что особенно важно проверить в версии 0.2.0 и как составить полезный баг-репорт. # 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-приложения. Полный список изменений находится в [changelog версии 0.2.0](beta-changelog-0.2.0.md). ## Перед началом тестирования 1. Установите версию **0.2.0 на все свои устройства**. Старые клиенты несовместимы с новой синхронизацией участников каналов и могут работать некорректно. 2. Проверьте номер версии в **Settings → Profile**. 3. По возможности подготовьте два тестовых аккаунта и два устройства для одного из аккаунтов. Это позволит проверить доставку, роли и мультиустройство. 4. Не используйте единственный рабочий аккаунт для сценариев с выходом из системы: logout безвозвратно удаляет историю на текущем устройстве. 5. Бета-версия может содержать ошибки. Не отправляйте через неё данные, потеря которых будет критичной. ## Как устроено хранение сообщений Green Chat — корпоративный мессенджер со сквозным шифрованием MLS. Сервер хранит сообщения и файлы в зашифрованном виде и не располагает ключами для их чтения. Из этого следуют важные ограничения: - история расшифровывается и хранится на устройствах пользователя; - сервер и служба поддержки не могут прочитать переписку или восстановить уничтоженные ключи; - выход из аккаунта очищает локальную историю и ключи на этом устройстве; - если выйти со всех устройств, прежнюю историю восстановить будет нельзя; - для поиска ошибки особенно важны точное время события, участники, канал и последовательность действий. ## Что особенно важно проверить в версии 0.2.0 ### 1. Обычные сообщения и восстановление соединения - Отправьте сообщения в канал и личный чат. - Проверьте доставку текста, эмодзи, форматирования и ответов в треде. - Полностью отключите сеть на одном из устройств на несколько минут, затем включите её обратно. - Убедитесь, что клиент подключился самостоятельно и получил сообщения, отправленные во время офлайна. - Проверьте, что статус online/offline обновляется без повторного открытия канала. Сообщение со статусом `sent`, которое после восстановления соединения так и не появилось у получателя, считается важным багом. ### 2. Треды - Создайте несколько тредов в разных каналах. - Откройте раздел **Threads** и проверьте сортировку по последней активности. - Переключите фильтры **All** и **Unread**. - Нажмите на тред в списке и убедитесь, что открылись правильный канал и исходное сообщение. - Ответьте с `@mention`, добавьте вложение или перетащите файл в область ответа. - При наличии второго устройства проверьте синхронизацию прочитанности тредов. ### 3. Роли и участники каналов Для полноценной проверки нужны минимум три аккаунта: владелец, модератор и обычный участник. 1. Создайте приватный канал и пригласите двух участников. 2. Убедитесь, что создатель отмечен как owner. 3. Назначьте одного участника модератором и затем снимите роль. 4. Проверьте, что owner может приглашать и исключать участников. 5. Проверьте, что moderator может управлять обычными участниками, но не владельцем или другим модератором. 6. Исключите обычного участника: канал должен сразу исчезнуть у него из интерфейса, а новые сообщения не должны быть доступны. 7. Повторно пригласите участника и убедитесь, что устаревшее событие удаления не убирает канал снова. Дополнительно можно проверить выход из канала: - обычный участник и модератор могут выйти самостоятельно; - owner с другими участниками должен сначала назначить модератора; - при выходе owner владение автоматически переходит назначенному модератору; - из DM выйти нельзя, но его можно скрыть через **Remove for me**; - для публичного канала исключение участника недоступно, поскольку он может вступить обратно самостоятельно. ### 4. Профили - Заполните аватар, должность, описание и рабочий телефон. - Откройте карточку профиля из сообщения и панели участников. - Проверьте копирование email и телефона. - Измените аватар или данные профиля на одном устройстве и убедитесь, что изменения появились у другого пользователя без перезапуска приложения. Поля профиля видны всем пользователям организации — это справочная информация, а не приватная часть переписки. ### 5. Поиск и действия с сообщениями - Найдите старое сообщение через поиск и перейдите к нему. - Убедитесь, что чат прокрутился к правильному сообщению и выделил его. - Проверьте доступные контекстные действия: ответ, редактирование, сохранение, закрепление и удаление там, где они разрешены. - Отредактируйте длинное сообщение и ответ в треде: поле ввода должно увеличиваться вместе с текстом. - Попробуйте превысить допустимую длину сообщения. Клиент должен показать понятное ограничение, а не зависнуть или молча потерять текст. Поиск работает по локально доступной истории устройства. Отсутствие сообщения, которого никогда не было на этом устройстве, само по себе не является багом. ### 6. Файлы, изображения и GIF - выберите файл через кнопку вложения и убедитесь, что он сначала появился в области подготовки к отправке; - удалите подготовленный файл, не отправляя сообщение; - перетащите файлы в основной чат и отдельно в открытый тред; - вставьте изображение из буфера обмена; - отправьте несколько файлов и проверьте, что они остались в исходном чате, даже если во время загрузки переключиться на другой канал; - откройте изображение во встроенном просмотрщике; - проверьте воспроизведение GIF и отсутствие чрезмерной нагрузки интерфейса; - удалите собственное сообщение с вложением и убедитесь, что файл больше не доступен из чата; - скачайте файл и проверьте его содержимое после расшифровки. Ошибки загрузки, повреждённый скачанный файл, вложение в неправильном канале или зависшая подготовка файла считаются багами. ### 7. Сохранённые сообщения и загрузки - Сохраните сообщения из разных каналов через контекстное меню. - Откройте раздел **Saved**, перейдите из него к исходному сообщению и удалите закладку. - При наличии второго устройства проверьте, что список сохранённых сообщений синхронизировался. - Скачайте несколько файлов и откройте раздел **Downloads**. - Проверьте действия **Open file**, **Show in folder** и **Remove from history**. Сохранённые сообщения синхронизируются между устройствами и видны только владельцу аккаунта. История загрузок хранится только на конкретном устройстве. Удаление записи из Downloads не удаляет сам файл с диска. Файлы, скачанные до установки 0.2.0, в историю автоматически не добавляются. ### 8. Уведомления и звук - В **Settings → Notifications** нажмите **Send test**. - Оставьте окно приложения без фокуса и попросите другого тестера отправить DM — должен появиться системный попап и прозвучать звук. - Проверьте `@mention` в канале. Обычное сообщение без упоминания по умолчанию не показывает попап. - Отключите звук в настройках и убедитесь, что новые сообщения приходят без звукового сигнала. - Проверьте DND, mute канала и quiet hours. - Полностью закройте приложение через tray → **Quit**, отправьте на аккаунт DM и проверьте email-уведомление, если SMTP включён на сервере. Попапы показывает запущенное приложение. После полного выхода через **Quit** desktop-клиент не может показать системное уведомление; в этом случае для DM может прийти только email. ### 9. Несколько устройств - Войдите на второе устройство по паролю или привяжите его по QR-коду. - Создайте приватный канал и пригласите пользователя с несколькими активными устройствами. - Убедитесь, что канал, его название и новые сообщения появились на всех устройствах приглашённого. - Проверьте синхронизацию прочитанности, черновиков, сохранённых сообщений и скрытых чатов. - Измените аватар и убедитесь, что он обновился на других клиентах. - Закройте одно устройство, продолжите работу на втором, затем верните первое в сеть и проверьте восстановление состояния. ### 10. Выход со всех устройств Этот сценарий выполняйте только на специально созданном тестовом аккаунте. Перед выходом убедитесь, что клиент подключён к серверу. 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` выполните: ```sh xattr -cr "/Applications/Green Chat.app" ``` - На macOS системные попапы бета-сборки могут отображаться от имени **Script Editor**. - На части серверов отправка файлов и email-уведомления могут быть отключены. - Числовой бейдж учитывает DM и упоминания; обычное непрочитанное сообщение в канале отображается точкой. - Сообщение `SPKI pin mismatch` после плановой смены серверного ключа требует повторного входа. Клиент намеренно не принимает новый ключ молча. Если поведение не перечислено здесь и выглядит неправильным, лучше отправить репорт. ## Как оставить баг-репорт Трекер: <https://bug.green-lab.space/projects/greenchat/issues/new>. Регистрация не нужна, репорт можно отправить анонимно. ### Что указать ```text Краткое название: что сломалось и где Шаги: 1. … 2. … 3. … Ожидал: … Получил: … Окружение: - Green Chat 0.2.0 - ОС и версия - один или несколько аккаунтов/устройств - название канала или DM - точное время события и часовой пояс Воспроизводится: всегда / иногда / один раз Дополнительно: скриншот или короткое видео ``` Для проблем синхронизации укажите ОС и версию клиента **на каждой стороне**, а также какое устройство было офлайн. Трекер публичный. Не прикладывайте пароли, invite-коды, ключи, приватные логи или скриншоты с конфиденциальной перепиской. Перед отправкой замажьте лишние данные. ### Приоритет | Приоритет | Когда использовать | |---|---| | `Normal` | Большинство ошибок интерфейса и поведения | | `High` | Падение, потеря данных, недоставка сообщений, нарушение прав или безопасности | | `Urgent` / `Immediate` | Не выбирайте без отдельной просьбы команды | ## Быстрая диагностика уведомлений 1. Нажмите **Settings → Notifications → Send test**. 2. Если тест пришёл, проверьте DND, mute, quiet hours и фокус окна. 3. Для канала используйте персональный `@mention`; обычное сообщение может не создавать попап. 4. Если приложение было закрыто через tray → Quit, системного попапа быть не должно. 5. Если Send test не работает при разрешённых уведомлениях ОС, создайте баг-репорт и обязательно укажите операционную систему. # 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`.