Project

General

Profile

Wiki » History » Version 3

Redmine Admin, 07/22/2026 08:21 PM

1 2 Redmine Admin
# Green Chat 0.2.0 — памятка бета-тестера
2 1 Redmine Admin
3 2 Redmine Admin
Спасибо, что участвуете в тестировании Green Chat. Эта памятка объясняет,
4
как подготовиться к бете, что особенно важно проверить в версии 0.2.0 и как
5
составить полезный баг-репорт.
6 1 Redmine Admin
7 3 Redmine Admin
# Green Chat Desktop 0.2.1 — Beta Update
8
9
Дата выпуска: **22 июля 2026 года**.
10
11
Версия 0.2.1 исправляет проблемы доставки сообщений и уведомлений,
12
обнаруженные во время бета-тестирования 0.2.0.
13
14
## Главное
15
16
- Доставка больше не зависит только от WebSocket-событий. Клиент сверяет
17
  локальное состояние с сервером после подключения, при ошибке live-доставки
18
  и каждые две минуты, пока соединение активно.
19
- Пропущенные во время офлайна сообщения автоматически догружаются в
20
  правильном порядке вместе с необходимыми MLS-коммитами.
21
- Счётчики непрочитанных, список тредов и сохранённые сообщения обновляются
22
  после каждой сверки с сервером.
23
- Для сообщений, полученных через фоновую сверку, показывается одно сводное
24
  уведомление вместо серии попапов. Настройки DND, mute, quiet hours и режим
25
  уведомлений канала продолжают учитываться.
26
27
## Исправление личных сообщений после повторного входа
28
29
- Исправлена ситуация, когда после logout и повторного входа личный чат
30
  оставался доступен, но новые сообщения фактически шифровались без устройства
31
  собеседника.
32
- Клиент автоматически обнаруживает отсутствующее устройство участника и
33
  повторно добавляет его в MLS-группу личного чата.
34
- Одновременное восстановление несколькими устройствами защищено коротким
35
  серверным lease: проигравший клиент останавливается до изменения локальной
36
  MLS-эпохи.
37
- Пока устройство собеседника ещё не восстановлено в личном чате, поле ввода
38
  заменяется сообщением о синхронизации, а отправка временно блокируется.
39
  Отметка `✓✓` в этом состоянии заменяется честным предупреждением
40
  `not delivered`.
41
- После успешного восстановления чат разблокируется по долговременному
42
  состоянию клиента, даже если соответствующее WebSocket-событие потерялось.
43
44
## Надёжность и диагностика
45
46
- Ошибка обработки live-сообщения теперь запускает ускоренную сверку с
47
  сервером вместо ожидания следующего переподключения.
48
- Исправлена потеря полной проверки групп, если переподключение совпало по
49
  времени с уже выполняющейся фоновой сверкой.
50
- Отложенные reconcile-задачи корректно отменяются при logout.
51
- Desktop-клиент пишет диагностический лог в `glchat.log` в каталоге данных
52
  приложения.
53
- Добавлена ротация лога при достижении 5 MiB с сохранением одной предыдущей
54
  копии `glchat.log.old`, включая повторную ротацию на Windows.
55
56
## Сервер
57
58
- Добавлены авторизованные endpoints состояния синхронизации: хвосты сообщений
59
  по группам и отсутствующие membership-листы.
60
- Добавлен одноразовый lease-token для безопасного восстановления membership.
61
- Добавлена метрика Prometheus для количества обнаруженных membership gaps.
62
- Добавлена миграция `022_membership_repair_claims.sql`.
63
64
Содержимое сообщений, ключи и настройки уведомлений по-прежнему не передаются
65
серверу в открытом виде. Новые endpoints работают только с уже известными
66
серверу метаданными групп, устройств и последовательностей сообщений.
67
68
## Обновление
69
70
Для проверки исправлений установите **Green Chat Desktop 0.2.1 на все свои
71
устройства**. Сервер также должен быть обновлён и иметь применённую миграцию
72
`022_membership_repair_claims.sql`.
73
74
Особенно важно повторно проверить:
75
76
1. получение сообщений после временного отключения сети;
77
2. непрочитанные, звук и системный попап после фоновой догрузки;
78
3. личный чат после logout и повторного входа одного из участников;
79
4. одновременную работу двух устройств одного аккаунта;
80
5. наличие `glchat.log` после перезапуска desktop-приложения.
81
82
83
84 2 Redmine Admin
Полный список изменений находится в
85
[changelog версии 0.2.0](beta-changelog-0.2.0.md).
86 1 Redmine Admin
87 2 Redmine Admin
## Перед началом тестирования
88 1 Redmine Admin
89 2 Redmine Admin
1. Установите версию **0.2.0 на все свои устройства**. Старые клиенты
90
   несовместимы с новой синхронизацией участников каналов и могут работать
91
   некорректно.
92
2. Проверьте номер версии в **Settings → Profile**.
93
3. По возможности подготовьте два тестовых аккаунта и два устройства для
94
   одного из аккаунтов. Это позволит проверить доставку, роли и
95
   мультиустройство.
96
4. Не используйте единственный рабочий аккаунт для сценариев с выходом из
97
   системы: logout безвозвратно удаляет историю на текущем устройстве.
98
5. Бета-версия может содержать ошибки. Не отправляйте через неё данные,
99
   потеря которых будет критичной.
100 1 Redmine Admin
101 2 Redmine Admin
## Как устроено хранение сообщений
102 1 Redmine Admin
103 2 Redmine Admin
Green Chat — корпоративный мессенджер со сквозным шифрованием MLS. Сервер
104
хранит сообщения и файлы в зашифрованном виде и не располагает ключами для
105
их чтения.
106 1 Redmine Admin
107 2 Redmine Admin
Из этого следуют важные ограничения:
108 1 Redmine Admin
109 2 Redmine Admin
- история расшифровывается и хранится на устройствах пользователя;
110
- сервер и служба поддержки не могут прочитать переписку или восстановить
111
  уничтоженные ключи;
112
- выход из аккаунта очищает локальную историю и ключи на этом устройстве;
113
- если выйти со всех устройств, прежнюю историю восстановить будет нельзя;
114
- для поиска ошибки особенно важны точное время события, участники, канал и
115
  последовательность действий.
116 1 Redmine Admin
117 2 Redmine Admin
## Что особенно важно проверить в версии 0.2.0
118 1 Redmine Admin
119 2 Redmine Admin
### 1. Обычные сообщения и восстановление соединения
120 1 Redmine Admin
121 2 Redmine Admin
- Отправьте сообщения в канал и личный чат.
122
- Проверьте доставку текста, эмодзи, форматирования и ответов в треде.
123
- Полностью отключите сеть на одном из устройств на несколько минут, затем
124
  включите её обратно.
125
- Убедитесь, что клиент подключился самостоятельно и получил сообщения,
126
  отправленные во время офлайна.
127
- Проверьте, что статус online/offline обновляется без повторного открытия
128
  канала.
129 1 Redmine Admin
130 2 Redmine Admin
Сообщение со статусом `sent`, которое после восстановления соединения так и
131
не появилось у получателя, считается важным багом.
132 1 Redmine Admin
133 2 Redmine Admin
### 2. Треды
134 1 Redmine Admin
135 2 Redmine Admin
- Создайте несколько тредов в разных каналах.
136
- Откройте раздел **Threads** и проверьте сортировку по последней активности.
137
- Переключите фильтры **All** и **Unread**.
138
- Нажмите на тред в списке и убедитесь, что открылись правильный канал и
139
  исходное сообщение.
140
- Ответьте с `@mention`, добавьте вложение или перетащите файл в область
141
  ответа.
142
- При наличии второго устройства проверьте синхронизацию прочитанности
143
  тредов.
144 1 Redmine Admin
145 2 Redmine Admin
### 3. Роли и участники каналов
146 1 Redmine Admin
147 2 Redmine Admin
Для полноценной проверки нужны минимум три аккаунта: владелец, модератор и
148
обычный участник.
149 1 Redmine Admin
150 2 Redmine Admin
1. Создайте приватный канал и пригласите двух участников.
151
2. Убедитесь, что создатель отмечен как owner.
152
3. Назначьте одного участника модератором и затем снимите роль.
153
4. Проверьте, что owner может приглашать и исключать участников.
154
5. Проверьте, что moderator может управлять обычными участниками, но не
155
   владельцем или другим модератором.
156
6. Исключите обычного участника: канал должен сразу исчезнуть у него из
157
   интерфейса, а новые сообщения не должны быть доступны.
158
7. Повторно пригласите участника и убедитесь, что устаревшее событие удаления
159
   не убирает канал снова.
160 1 Redmine Admin
161 2 Redmine Admin
Дополнительно можно проверить выход из канала:
162 1 Redmine Admin
163 2 Redmine Admin
- обычный участник и модератор могут выйти самостоятельно;
164
- owner с другими участниками должен сначала назначить модератора;
165
- при выходе owner владение автоматически переходит назначенному модератору;
166
- из DM выйти нельзя, но его можно скрыть через **Remove for me**;
167
- для публичного канала исключение участника недоступно, поскольку он может
168
  вступить обратно самостоятельно.
169
170
### 4. Профили
171
172
- Заполните аватар, должность, описание и рабочий телефон.
173
- Откройте карточку профиля из сообщения и панели участников.
174
- Проверьте копирование email и телефона.
175
- Измените аватар или данные профиля на одном устройстве и убедитесь, что
176
  изменения появились у другого пользователя без перезапуска приложения.
177
178
Поля профиля видны всем пользователям организации — это справочная информация,
179
а не приватная часть переписки.
180
181
### 5. Поиск и действия с сообщениями
182
183
- Найдите старое сообщение через поиск и перейдите к нему.
184
- Убедитесь, что чат прокрутился к правильному сообщению и выделил его.
185
- Проверьте доступные контекстные действия: ответ, редактирование, сохранение,
186
  закрепление и удаление там, где они разрешены.
187
- Отредактируйте длинное сообщение и ответ в треде: поле ввода должно
188
  увеличиваться вместе с текстом.
189
- Попробуйте превысить допустимую длину сообщения. Клиент должен показать
190
  понятное ограничение, а не зависнуть или молча потерять текст.
191
192
Поиск работает по локально доступной истории устройства. Отсутствие сообщения,
193
которого никогда не было на этом устройстве, само по себе не является багом.
194
195
### 6. Файлы, изображения и GIF
196
197
- выберите файл через кнопку вложения и убедитесь, что он сначала появился в
198
  области подготовки к отправке;
199
- удалите подготовленный файл, не отправляя сообщение;
200
- перетащите файлы в основной чат и отдельно в открытый тред;
201
- вставьте изображение из буфера обмена;
202
- отправьте несколько файлов и проверьте, что они остались в исходном чате,
203
  даже если во время загрузки переключиться на другой канал;
204
- откройте изображение во встроенном просмотрщике;
205
- проверьте воспроизведение GIF и отсутствие чрезмерной нагрузки интерфейса;
206
- удалите собственное сообщение с вложением и убедитесь, что файл больше не
207
  доступен из чата;
208
- скачайте файл и проверьте его содержимое после расшифровки.
209
210
Ошибки загрузки, повреждённый скачанный файл, вложение в неправильном канале
211
или зависшая подготовка файла считаются багами.
212
213
### 7. Сохранённые сообщения и загрузки
214
215
- Сохраните сообщения из разных каналов через контекстное меню.
216
- Откройте раздел **Saved**, перейдите из него к исходному сообщению и удалите
217
  закладку.
218
- При наличии второго устройства проверьте, что список сохранённых сообщений
219
  синхронизировался.
220
- Скачайте несколько файлов и откройте раздел **Downloads**.
221
- Проверьте действия **Open file**, **Show in folder** и
222
  **Remove from history**.
223
224
Сохранённые сообщения синхронизируются между устройствами и видны только
225
владельцу аккаунта. История загрузок хранится только на конкретном устройстве.
226
Удаление записи из Downloads не удаляет сам файл с диска. Файлы, скачанные до
227
установки 0.2.0, в историю автоматически не добавляются.
228
229
### 8. Уведомления и звук
230
231
- В **Settings → Notifications** нажмите **Send test**.
232
- Оставьте окно приложения без фокуса и попросите другого тестера отправить
233
  DM — должен появиться системный попап и прозвучать звук.
234
- Проверьте `@mention` в канале. Обычное сообщение без упоминания по умолчанию
235
  не показывает попап.
236
- Отключите звук в настройках и убедитесь, что новые сообщения приходят без
237
  звукового сигнала.
238
- Проверьте DND, mute канала и quiet hours.
239
- Полностью закройте приложение через tray → **Quit**, отправьте на аккаунт
240
  DM и проверьте email-уведомление, если SMTP включён на сервере.
241
242
Попапы показывает запущенное приложение. После полного выхода через **Quit**
243
desktop-клиент не может показать системное уведомление; в этом случае для DM
244
может прийти только email.
245
246
### 9. Несколько устройств
247
248
- Войдите на второе устройство по паролю или привяжите его по QR-коду.
249
- Создайте приватный канал и пригласите пользователя с несколькими активными
250
  устройствами.
251
- Убедитесь, что канал, его название и новые сообщения появились на всех
252
  устройствах приглашённого.
253
- Проверьте синхронизацию прочитанности, черновиков, сохранённых сообщений и
254
  скрытых чатов.
255
- Измените аватар и убедитесь, что он обновился на других клиентах.
256
- Закройте одно устройство, продолжите работу на втором, затем верните первое
257
  в сеть и проверьте восстановление состояния.
258
259
### 10. Выход со всех устройств
260
261
Этот сценарий выполняйте только на специально созданном тестовом аккаунте.
262
Перед выходом убедитесь, что клиент подключён к серверу.
263
264
1. Выйдите из аккаунта на последнем активном устройстве и подтвердите
265
   предупреждение об удалении истории.
266
2. У другого пользователя аккаунт должен получить отметку **Logged out** в
267
   списке DM, профиле, панели участников и выборе пользователя.
268
3. В существующем DM история должна остаться читаемой, но поле отправки должно
269
   замениться предупреждением.
270
4. Создание нового DM с вышедшим пользователем должно быть заблокировано.
271
5. Отправьте в канал сообщение с его персональным `@mention`: сообщение
272
   должно отправиться остальным участникам, а автор должен увидеть
273
   предупреждение о недоставке упомянутому пользователю.
274
6. Снова войдите этим аккаунтом. Отметка Logged out должна исчезнуть у других
275
   пользователей.
276
277
Повторный вход создаёт новое активное устройство, но не возвращает историю,
278
уничтоженную при logout.
279
280
## Что обязательно считать багом
281
282
- Падение, зависание или бесконечная загрузка приложения.
283
- Потеря уже отправленного сообщения или его появление в неправильном чате.
284
- Ошибка расшифровки, нечитаемый текст или повреждённый файл.
285
- Получение доступа к чужому каналу, профилю или данным без разрешения.
286
- Возможность обычного участника выполнить действие owner/moderator.
287
- Доступ исключённого участника к новым сообщениям приватного канала.
288
- Расхождение каналов, ролей, сохранённых сообщений или прочитанности между
289
  устройствами, которое не исправляется после переподключения.
290
- Отсутствие DM или `@mention`-уведомления при выполненных условиях доставки.
291
- Неправильный адресат, канал или тред у вложения.
292
- Неработающая кнопка, обрезанный интерфейс или нечитаемый текст, особенно в
293
  тёмной теме.
294
295
Проблемы безопасности, потерю данных и воспроизводимые падения отмечайте
296
приоритетом **High**.
297
298
## Известные ограничения беты
299
300
- Вход обычно доступен только по приглашению; вкладки создания свободного
301
  аккаунта может не быть.
302
- Автоматического обновления нет — новую версию нужно устанавливать вручную.
303
- Windows может показать SmartScreen с предупреждением о неизвестном
304
  издателе.
305
- Неподписанная macOS-сборка может быть заблокирована Gatekeeper. После
306
  переноса приложения в `/Applications` выполните:
307
308
  ```sh
309
  xattr -cr "/Applications/Green Chat.app"
310
  ```
311
312
- На macOS системные попапы бета-сборки могут отображаться от имени
313
  **Script Editor**.
314
- На части серверов отправка файлов и email-уведомления могут быть отключены.
315
- Числовой бейдж учитывает DM и упоминания; обычное непрочитанное сообщение в
316
  канале отображается точкой.
317
- Сообщение `SPKI pin mismatch` после плановой смены серверного ключа требует
318
  повторного входа. Клиент намеренно не принимает новый ключ молча.
319
320
Если поведение не перечислено здесь и выглядит неправильным, лучше отправить
321
репорт.
322
323
## Как оставить баг-репорт
324
325
Трекер:
326
<https://bug.green-lab.space/projects/greenchat/issues/new>. Регистрация не
327
нужна, репорт можно отправить анонимно.
328
329
### Что указать
330
331 1 Redmine Admin
```text
332 2 Redmine Admin
Краткое название: что сломалось и где
333
334 1 Redmine Admin
Шаги:
335
1. …
336
2. …
337
3. …
338
339
Ожидал: …
340
Получил: …
341
342 2 Redmine Admin
Окружение:
343
- Green Chat 0.2.0
344
- ОС и версия
345
- один или несколько аккаунтов/устройств
346
- название канала или DM
347
- точное время события и часовой пояс
348 1 Redmine Admin
349 2 Redmine Admin
Воспроизводится: всегда / иногда / один раз
350
Дополнительно: скриншот или короткое видео
351 1 Redmine Admin
```
352
353 2 Redmine Admin
Для проблем синхронизации укажите ОС и версию клиента **на каждой стороне**,
354
а также какое устройство было офлайн.
355 1 Redmine Admin
356 2 Redmine Admin
Трекер публичный. Не прикладывайте пароли, invite-коды, ключи, приватные
357
логи или скриншоты с конфиденциальной перепиской. Перед отправкой замажьте
358
лишние данные.
359 1 Redmine Admin
360 2 Redmine Admin
### Приоритет
361 1 Redmine Admin
362 2 Redmine Admin
| Приоритет | Когда использовать |
363
|---|---|
364
| `Normal` | Большинство ошибок интерфейса и поведения |
365
| `High` | Падение, потеря данных, недоставка сообщений, нарушение прав или безопасности |
366
| `Urgent` / `Immediate` | Не выбирайте без отдельной просьбы команды |
367 1 Redmine Admin
368 2 Redmine Admin
## Быстрая диагностика уведомлений
369 1 Redmine Admin
370 2 Redmine Admin
1. Нажмите **Settings → Notifications → Send test**.
371
2. Если тест пришёл, проверьте DND, mute, quiet hours и фокус окна.
372
3. Для канала используйте персональный `@mention`; обычное сообщение может не
373
   создавать попап.
374
4. Если приложение было закрыто через tray → Quit, системного попапа быть не
375
   должно.
376
5. Если Send test не работает при разрешённых уведомлениях ОС, создайте
377
   баг-репорт и обязательно укажите операционную систему.
378 1 Redmine Admin
379
380 2 Redmine Admin
# glchat Desktop 0.2.0 — Beta Update
381 1 Redmine Admin
382 2 Redmine Admin
Изменения с 9 по 20 июля 2026 года.
383
384
## Новые возможности
385
386
- Добавлены роли владельца и модератора канала, управление участниками, выход из канала и локальное скрытие чатов.
387
- Появились карточки профилей с аватаром, должностью, описанием и контактами.
388
- Добавлен единый раздел «Треды» со всеми обсуждениями и фильтром непрочитанных.
389
- Сообщения теперь можно сохранять в личные закладки с синхронизацией между устройствами.
390
- Добавлена локальная история загрузок: файл можно открыть, показать в папке или убрать из списка.
391
- Изображения открываются во встроенном просмотрщике, добавлена безопасная анимация GIF.
392
- Изображения из буфера обмена можно вставлять прямо в сообщение.
393
- Добавлены звуковые уведомления о новых сообщениях и настройка звука.
394
- Пользователи, вышедшие со всех устройств, теперь отмечаются в интерфейсе. Перед отправкой им личного сообщения или упоминания показывается предупреждение.
395
396
## Улучшения интерфейса
397
398
- Добавлены контекстные действия для сообщений.
399
- Улучшены редакторы сообщений и ответов в тредах.
400
- Добавлены упоминания пользователей в ответах треда.
401
- Улучшена работа с вложениями: предварительная подготовка, drag-and-drop в треды и удаление отправленных файлов.
402
- Поиск теперь прокручивает чат до найденного сообщения и ограничивает слишком тяжёлые запросы.
403
- Улучшены индикаторы присутствия, подсчёт участников и расположение боковых панелей.
404
- После отправки сообщения чат автоматически прокручивается к нему.
405
- Исправлено восстановление окна приложения из системного трея.
406
407
## Исправления и стабильность
408
409
- Исправлена синхронизация каналов, участников и метаданных между несколькими устройствами.
410
- Восстановлена доставка уведомлений после длительного офлайна.
411
- Статус пользователя обновляется сразу после подключения.
412
- Исправлен учёт непрочитанных сообщений при переключении фокуса окна.
413
- Исключённые каналы сразу удаляются из интерфейса, а устаревшие события больше не удаляют канал после повторного вступления.
414
- Исправлены отображение закреплённых файлов и привязка вложений к исходному чату.
415
- Добавлена корректная обработка максимальной длины сообщений.
416
- Аватары профилей теперь обновляются в реальном времени.
417
- Улучшено восстановление личных чатов после выхода всех участников со всех устройств.
418
- При выходе устройство отзывается на сервере, чтобы не оставлять неактивные устройства и ключи.
419
420
## Сервер и эксплуатация
421
422
- Добавлены Prometheus-метрики для HTTP, WebSocket, PostgreSQL, Redis и Go runtime.
423
- Подготовлены базовые правила мониторинга и алертов.
424
- Улучшена конфигурация TLS для файлового хранилища.
425
426
Итого: **40 коммитов и 178 изменённых файлов** в ветке `main`.