Wiki » History » Version 7
Redmine Admin, 08/04/2026 10:04 PM
| 1 | 6 | Redmine Admin | # Green Chat 0.2.3 — памятка бета-тестера |
|---|---|---|---|
| 2 | 1 | Redmine Admin | |
| 3 | 5 | Redmine Admin | Спасибо, что участвуете в тестировании Green Chat. Эта памятка объясняет, |
| 4 | 6 | Redmine Admin | как подготовиться к бете, что особенно важно проверить в версии 0.2.3 и как |
| 5 | 5 | Redmine Admin | составить полезный баг-репорт. |
| 6 | 1 | Redmine Admin | |
| 7 | 5 | Redmine Admin | ## Версии беты 0.2.x |
| 8 | 1 | Redmine Admin | |
| 9 | 6 | Redmine Admin | Текущая версия — **0.2.3**. Памятка покрывает все возможности линейки 0.2.x; |
| 10 | 1 | Redmine Admin | полные списки изменений по версиям: |
| 11 | |||
| 12 | 7 | Redmine Admin | - **0.2.3** (актуальная сборка 4 августа 2026) — |
| 13 | 6 | Redmine Admin | Android-клиент и уведомления на телефон, защита от расхождения MLS-эпох, |
| 14 | мобильные вложения и safe areas, приглашения в публичные каналы, исправления |
||
| 15 | композера и push relay. Требует миграции 023/024 и настроенный relay. |
||
| 16 | 7 | Redmine Admin | - **0.2.2** (23 июля 2026) — уведомления, звук и |
| 17 | 5 | Redmine Admin | счётчики при свёрнутом или скрытом в tray окне; быстрое переподключение |
| 18 | после сна компьютера; исправления восстановления личных чатов. Серверных |
||
| 19 | изменений нет. |
||
| 20 | 7 | Redmine Admin | - **0.2.1** (22 июля 2026) — надёжная доставка: |
| 21 | 5 | Redmine Admin | клиент сверяет состояние с сервером и догружает пропущенные сообщения; |
| 22 | восстановление личного чата после logout и повторного входа собеседника; |
||
| 23 | диагностический лог `glchat.log`. Требует обновлённый сервер. |
||
| 24 | 7 | Redmine Admin | - **0.2.0** (20 июля 2026) — роли и управление |
| 25 | 5 | Redmine Admin | участниками каналов, раздел «Треды», карточки профилей, сохранённые |
| 26 | 1 | Redmine Admin | сообщения, история загрузок, просмотрщик изображений и GIF, звуковые |
| 27 | уведомления, отметка вышедших со всех устройств пользователей. |
||
| 28 | |||
| 29 | 6 | Redmine Admin | ## Что изменилось после релиза 0.2.2 |
| 30 | |||
| 31 | ### Android-клиент и мобильные уведомления |
||
| 32 | |||
| 33 | - Появился первый Android-клиент, собранный из общего с desktop кода Tauri 2: |
||
| 34 | те же экраны, локальная база и MLS-шифрование. |
||
| 35 | - Ключ устройства и ключ локальной базы хранятся через AndroidKeyStore. |
||
| 36 | - Устройство можно привязать сканированием QR-кода или ручным вводом кода. |
||
| 37 | - Интерфейс адаптирован под один экран телефона, системные safe areas и |
||
| 38 | виртуальную клавиатуру. |
||
| 39 | - Нативный Android picker позволяет прикреплять документы и изображения к |
||
| 40 | сообщению или ответу в треде. |
||
| 41 | - Firebase Cloud Messaging будит свёрнутое приложение сигналом без текста |
||
| 42 | сообщения. Клиент сам догружает и расшифровывает сообщение; push relay не |
||
| 43 | получает содержимое переписки или идентификатор аккаунта. |
||
| 44 | |||
| 45 | ### Надёжность MLS и доставки |
||
| 46 | |||
| 47 | - Клиент применяет изменения MLS-группы только после подтверждения сервера, |
||
| 48 | что предотвращает расхождение криптографических веток при гонке Commit. |
||
| 49 | - Если устройство уже не может расшифровать сообщение текущей эпохи, оно |
||
| 50 | запрашивает безопасную замену своей MLS-листины и автоматически возвращается |
||
| 51 | в группу через replacement Welcome. Расшифрованная локальная история |
||
| 52 | сохраняется. |
||
| 53 | - Сервер получил durable-запросы восстановления membership и миграцию |
||
| 54 | `024_membership_recovery.sql`. |
||
| 55 | - Push relay удаляет недействительные FCM installation IDs, валидирует |
||
| 56 | согласованность секретов при bootstrap, а запуск chat server больше не |
||
| 57 | блокируется недоступным relay. |
||
| 58 | |||
| 59 | ### Каналы и интерфейс |
||
| 60 | |||
| 61 | - Любой участник публичного канала может пригласить нового пользователя через |
||
| 62 | **Add member**; исключение участников публичного канала остаётся запрещено. |
||
| 63 | - На Android исправлены имя приложения и системные push-строки. |
||
| 64 | - Сборка APK очищает старые пакеты перед упаковкой, исключая раздутые |
||
| 65 | инкрементальные артефакты. |
||
| 66 | - Иконки desktop-композера приведены к единому стилю, а emoji picker больше не |
||
| 67 | обрезается у границ окна. |
||
| 68 | |||
| 69 | Обновление с 0.2.2 требует серверных изменений актуальной версии 0.2.3: |
||
| 70 | миграций `023_push_installations.sql`, `024_membership_recovery.sql` и |
||
| 71 | настроенного push relay для фоновых Android-уведомлений. |
||
| 72 | |||
| 73 | 1 | Redmine Admin | ## Перед началом тестирования |
| 74 | 5 | Redmine Admin | |
| 75 | 6 | Redmine Admin | 1. Установите версию **0.2.3 на все свои устройства**. Старые клиенты |
| 76 | 5 | Redmine Admin | несовместимы с новой синхронизацией участников каналов и могут работать |
| 77 | некорректно. |
||
| 78 | 2. Проверьте номер версии в **Settings → Profile**. |
||
| 79 | 3. По возможности подготовьте два тестовых аккаунта и два устройства для |
||
| 80 | одного из аккаунтов. Это позволит проверить доставку, роли и |
||
| 81 | мультиустройство. |
||
| 82 | 4. Не используйте единственный рабочий аккаунт для сценариев с выходом из |
||
| 83 | системы: logout безвозвратно удаляет историю на текущем устройстве. |
||
| 84 | 5. Бета-версия может содержать ошибки. Не отправляйте через неё данные, |
||
| 85 | 1 | Redmine Admin | потеря которых будет критичной. |
| 86 | 5 | Redmine Admin | |
| 87 | 1 | Redmine Admin | ## Как устроено хранение сообщений |
| 88 | 5 | Redmine Admin | |
| 89 | Green Chat — корпоративный мессенджер со сквозным шифрованием MLS. Сервер |
||
| 90 | хранит сообщения и файлы в зашифрованном виде и не располагает ключами для |
||
| 91 | 1 | Redmine Admin | их чтения. |
| 92 | 5 | Redmine Admin | |
| 93 | 1 | Redmine Admin | Из этого следуют важные ограничения: |
| 94 | 5 | Redmine Admin | |
| 95 | - история расшифровывается и хранится на устройствах пользователя; |
||
| 96 | - сервер и служба поддержки не могут прочитать переписку или восстановить |
||
| 97 | уничтоженные ключи; |
||
| 98 | - выход из аккаунта очищает локальную историю и ключи на этом устройстве; |
||
| 99 | - если выйти со всех устройств, прежнюю историю восстановить будет нельзя; |
||
| 100 | 1 | Redmine Admin | - для поиска ошибки особенно важны точное время события, участники, канал и |
| 101 | 5 | Redmine Admin | последовательность действий. |
| 102 | 1 | Redmine Admin | |
| 103 | 5 | Redmine Admin | ## Что особенно важно проверить в бете 0.2.x |
| 104 | 1 | Redmine Admin | |
| 105 | 6 | Redmine Admin | ### 1. Обычные сообщения и восстановление соединения (изменено в 0.2.1, 0.2.2 и 0.2.3) |
| 106 | 5 | Redmine Admin | |
| 107 | - Отправьте сообщения в канал и личный чат. |
||
| 108 | - Проверьте доставку текста, эмодзи, форматирования и ответов в треде. |
||
| 109 | - Полностью отключите сеть на одном из устройств на несколько минут, затем |
||
| 110 | включите её обратно. |
||
| 111 | - Убедитесь, что клиент подключился самостоятельно и получил сообщения, |
||
| 112 | отправленные во время офлайна. |
||
| 113 | 1 | Redmine Admin | - Проверьте, что статус online/offline обновляется без повторного открытия |
| 114 | канала. |
||
| 115 | |||
| 116 | Сообщение со статусом `sent`, которое после восстановления соединения так и |
||
| 117 | не появилось у получателя, считается важным багом. |
||
| 118 | |||
| 119 | 6 | Redmine Admin | Для проверки защиты 0.2.3 одновременно отправляйте сообщения и меняйте состав |
| 120 | одного канала с двух устройств. Постоянная ошибка расшифровки, бесконечная |
||
| 121 | синхронизация или невозможность продолжить отправку после переподключения — |
||
| 122 | важный баг. |
||
| 123 | |||
| 124 | 5 | Redmine Admin | ### 2. Треды (новое в 0.2.0) |
| 125 | |||
| 126 | - Создайте несколько тредов в разных каналах. |
||
| 127 | - Откройте раздел **Threads** и проверьте сортировку по последней активности. |
||
| 128 | - Переключите фильтры **All** и **Unread**. |
||
| 129 | - Нажмите на тред в списке и убедитесь, что открылись правильный канал и |
||
| 130 | исходное сообщение. |
||
| 131 | - Ответьте с `@mention`, добавьте вложение или перетащите файл в область |
||
| 132 | ответа. |
||
| 133 | 1 | Redmine Admin | - При наличии второго устройства проверьте синхронизацию прочитанности |
| 134 | 5 | Redmine Admin | тредов. |
| 135 | 1 | Redmine Admin | |
| 136 | 5 | Redmine Admin | ### 3. Роли и участники каналов (новое в 0.2.0) |
| 137 | |||
| 138 | 1 | Redmine Admin | Для полноценной проверки нужны минимум три аккаунта: владелец, модератор и |
| 139 | 5 | Redmine Admin | обычный участник. |
| 140 | |||
| 141 | 1. Создайте приватный канал и пригласите двух участников. |
||
| 142 | 2. Убедитесь, что создатель отмечен как owner. |
||
| 143 | 3. Назначьте одного участника модератором и затем снимите роль. |
||
| 144 | 4. Проверьте, что owner может приглашать и исключать участников. |
||
| 145 | 5. Проверьте, что moderator может управлять обычными участниками, но не |
||
| 146 | 1 | Redmine Admin | владельцем или другим модератором. |
| 147 | 6. Исключите обычного участника: канал должен сразу исчезнуть у него из |
||
| 148 | интерфейса, а новые сообщения не должны быть доступны. |
||
| 149 | 5 | Redmine Admin | 7. Повторно пригласите участника и убедитесь, что устаревшее событие удаления |
| 150 | не убирает канал снова. |
||
| 151 | 6 | Redmine Admin | 8. Обычным участником публичного канала пригласите нового пользователя через |
| 152 | **Add member**. Приглашённый должен получить канал без доступа к сообщениям, |
||
| 153 | отправленным до его вступления. |
||
| 154 | 1 | Redmine Admin | |
| 155 | Дополнительно можно проверить выход из канала: |
||
| 156 | |||
| 157 | 5 | Redmine Admin | - обычный участник и модератор могут выйти самостоятельно; |
| 158 | - owner с другими участниками должен сначала назначить модератора; |
||
| 159 | - при выходе owner владение автоматически переходит назначенному модератору; |
||
| 160 | - из DM выйти нельзя, но его можно скрыть через **Remove for me**; |
||
| 161 | 6 | Redmine Admin | - в публичный канал может приглашать любой участник, но исключение участника |
| 162 | недоступно, поскольку он может вступить обратно самостоятельно. |
||
| 163 | 5 | Redmine Admin | |
| 164 | 1 | Redmine Admin | ### 4. Профили (новое в 0.2.0) |
| 165 | 5 | Redmine Admin | |
| 166 | - Заполните аватар, должность, описание и рабочий телефон. |
||
| 167 | - Откройте карточку профиля из сообщения и панели участников. |
||
| 168 | - Проверьте копирование email и телефона. |
||
| 169 | - Измените аватар или данные профиля на одном устройстве и убедитесь, что |
||
| 170 | 1 | Redmine Admin | изменения появились у другого пользователя без перезапуска приложения. |
| 171 | 5 | Redmine Admin | |
| 172 | Поля профиля видны всем пользователям организации — это справочная информация, |
||
| 173 | 1 | Redmine Admin | а не приватная часть переписки. |
| 174 | 5 | Redmine Admin | |
| 175 | 1 | Redmine Admin | ### 5. Поиск и действия с сообщениями |
| 176 | 5 | Redmine Admin | |
| 177 | - Найдите старое сообщение через поиск и перейдите к нему. |
||
| 178 | - Убедитесь, что чат прокрутился к правильному сообщению и выделил его. |
||
| 179 | - Проверьте доступные контекстные действия: ответ, редактирование, сохранение, |
||
| 180 | закрепление и удаление там, где они разрешены. |
||
| 181 | - Отредактируйте длинное сообщение и ответ в треде: поле ввода должно |
||
| 182 | увеличиваться вместе с текстом. |
||
| 183 | - Попробуйте превысить допустимую длину сообщения. Клиент должен показать |
||
| 184 | 1 | Redmine Admin | понятное ограничение, а не зависнуть или молча потерять текст. |
| 185 | 5 | Redmine Admin | |
| 186 | Поиск работает по локально доступной истории устройства. Отсутствие сообщения, |
||
| 187 | 1 | Redmine Admin | которого никогда не было на этом устройстве, само по себе не является багом. |
| 188 | 5 | Redmine Admin | |
| 189 | 1 | Redmine Admin | ### 6. Файлы, изображения и GIF (расширено в 0.2.0) |
| 190 | 5 | Redmine Admin | |
| 191 | - выберите файл через кнопку вложения и убедитесь, что он сначала появился в |
||
| 192 | области подготовки к отправке; |
||
| 193 | - удалите подготовленный файл, не отправляя сообщение; |
||
| 194 | - перетащите файлы в основной чат и отдельно в открытый тред; |
||
| 195 | - вставьте изображение из буфера обмена; |
||
| 196 | 1 | Redmine Admin | - отправьте несколько файлов и проверьте, что они остались в исходном чате, |
| 197 | даже если во время загрузки переключиться на другой канал; |
||
| 198 | 5 | Redmine Admin | - откройте изображение во встроенном просмотрщике; |
| 199 | - проверьте воспроизведение GIF и отсутствие чрезмерной нагрузки интерфейса; |
||
| 200 | - удалите собственное сообщение с вложением и убедитесь, что файл больше не |
||
| 201 | доступен из чата; |
||
| 202 | - скачайте файл и проверьте его содержимое после расшифровки. |
||
| 203 | 6 | Redmine Admin | - на Android выберите документ или изображение системным picker и отправьте |
| 204 | его сначала в чат, затем в открытый тред. |
||
| 205 | 5 | Redmine Admin | |
| 206 | 3 | Redmine Admin | Ошибки загрузки, повреждённый скачанный файл, вложение в неправильном канале |
| 207 | 5 | Redmine Admin | или зависшая подготовка файла считаются багами. |
| 208 | 3 | Redmine Admin | |
| 209 | 5 | Redmine Admin | ### 7. Сохранённые сообщения и загрузки (новое в 0.2.0) |
| 210 | |||
| 211 | - Сохраните сообщения из разных каналов через контекстное меню. |
||
| 212 | - Откройте раздел **Saved**, перейдите из него к исходному сообщению и удалите |
||
| 213 | закладку. |
||
| 214 | - При наличии второго устройства проверьте, что список сохранённых сообщений |
||
| 215 | синхронизировался. |
||
| 216 | - Скачайте несколько файлов и откройте раздел **Downloads**. |
||
| 217 | 1 | Redmine Admin | - Проверьте действия **Open file**, **Show in folder** и |
| 218 | 3 | Redmine Admin | **Remove from history**. |
| 219 | 5 | Redmine Admin | |
| 220 | Сохранённые сообщения синхронизируются между устройствами и видны только |
||
| 221 | владельцу аккаунта. История загрузок хранится только на конкретном устройстве. |
||
| 222 | Удаление записи из Downloads не удаляет сам файл с диска. Файлы, скачанные до |
||
| 223 | 3 | Redmine Admin | установки 0.2.0, в историю автоматически не добавляются. |
| 224 | 5 | Redmine Admin | |
| 225 | 6 | Redmine Admin | ### 8. Уведомления и звук (изменено в 0.2.2 и 0.2.3) |
| 226 | 5 | Redmine Admin | |
| 227 | - Перед проверкой убедитесь, что в **Settings → Notifications** выключен |
||
| 228 | **Pause all notifications**: включённый тумблер намеренно отключает попапы |
||
| 229 | и звук, при этом сообщения и счётчики продолжают приходить. Кнопка |
||
| 230 | **Send test** проверяет только доставку до операционной системы и работает |
||
| 231 | даже при включённой паузе. |
||
| 232 | - В **Settings → Notifications** нажмите **Send test**. |
||
| 233 | - Оставьте окно приложения без фокуса и попросите другого тестера отправить |
||
| 234 | DM — должен появиться системный попап и прозвучать звук. |
||
| 235 | - Полностью сверните окно или скройте его в tray и попросите отправить ещё |
||
| 236 | один DM: попап и звук должны прийти, не открывая окно, а после открытия |
||
| 237 | счётчики и сами сообщения должны уже быть на месте без ручного обновления. |
||
| 238 | - Проверьте `@mention` в канале. Обычное сообщение без упоминания по умолчанию |
||
| 239 | не показывает попап. |
||
| 240 | - Отключите звук в настройках и убедитесь, что новые сообщения приходят без |
||
| 241 | звукового сигнала. |
||
| 242 | 1 | Redmine Admin | - Проверьте DND, mute канала и quiet hours. |
| 243 | - Полностью закройте приложение через tray → **Quit**, отправьте на аккаунт |
||
| 244 | DM и проверьте email-уведомление, если SMTP включён на сервере. |
||
| 245 | |||
| 246 | Попапы показывает запущенное приложение. После полного выхода через **Quit** |
||
| 247 | 5 | Redmine Admin | desktop-клиент не может показать системное уведомление; в этом случае для DM |
| 248 | может прийти только email. |
||
| 249 | 4 | Redmine Admin | |
| 250 | 6 | Redmine Admin | На Android 13+ разрешите уведомления при первом запуске. Сверните приложение, |
| 251 | отправьте DM с другого аккаунта и проверьте push, догрузку сообщения и переход |
||
| 252 | по тапу. Push требует Google Play services и не приходит после принудительной |
||
| 253 | остановки приложения через системные настройки. |
||
| 254 | |||
| 255 | 1 | Redmine Admin | ### 9. Несколько устройств |
| 256 | 5 | Redmine Admin | |
| 257 | - Войдите на второе устройство по паролю или привяжите его по QR-коду. |
||
| 258 | - Создайте приватный канал и пригласите пользователя с несколькими активными |
||
| 259 | 1 | Redmine Admin | устройствами. |
| 260 | 5 | Redmine Admin | - Убедитесь, что канал, его название и новые сообщения появились на всех |
| 261 | 1 | Redmine Admin | устройствах приглашённого. |
| 262 | - Проверьте синхронизацию прочитанности, черновиков, сохранённых сообщений и |
||
| 263 | скрытых чатов. |
||
| 264 | - Измените аватар и убедитесь, что он обновился на других клиентах. |
||
| 265 | - Закройте одно устройство, продолжите работу на втором, затем верните первое |
||
| 266 | в сеть и проверьте восстановление состояния. |
||
| 267 | |||
| 268 | 6 | Redmine Admin | ### 10. Android 0.2.3 |
| 269 | 1 | Redmine Admin | |
| 270 | 6 | Redmine Admin | - Установите universal APK на Android 7 или новее и проверьте, что приложение |
| 271 | называется **Green Chat**. |
||
| 272 | - Проверьте вход по паролю, привязку по QR и ручной ввод кода. |
||
| 273 | - Откройте клавиатуру в чате и треде: поле ввода и нижние кнопки должны |
||
| 274 | оставаться видимыми. |
||
| 275 | - На устройстве с вырезом или жестовой навигацией проверьте верхнюю навигацию, |
||
| 276 | боковые панели, Threads и Devices. |
||
| 277 | - Выберите документ и изображение системным picker, отправьте их в чат и тред, |
||
| 278 | затем скачайте и откройте на втором устройстве. |
||
| 279 | - Сверните приложение, получите push и откройте сообщение по тапу без ручного |
||
| 280 | обновления. |
||
| 281 | |||
| 282 | Удаление Android-приложения удаляет локальную историю и ключи этого устройства. |
||
| 283 | Не переустанавливайте его во время сценария, если на аккаунте нет другого |
||
| 284 | активного устройства. |
||
| 285 | |||
| 286 | ### 11. Выход со всех устройств (новое в 0.2.0) |
||
| 287 | |||
| 288 | 5 | Redmine Admin | Этот сценарий выполняйте только на специально созданном тестовом аккаунте. |
| 289 | 4 | Redmine Admin | Перед выходом убедитесь, что клиент подключён к серверу. |
| 290 | 5 | Redmine Admin | |
| 291 | 1. Выйдите из аккаунта на последнем активном устройстве и подтвердите |
||
| 292 | предупреждение об удалении истории. |
||
| 293 | 2. У другого пользователя аккаунт должен получить отметку **Logged out** в |
||
| 294 | списке DM, профиле, панели участников и выборе пользователя. |
||
| 295 | 3. В существующем DM история должна остаться читаемой, но поле отправки должно |
||
| 296 | замениться предупреждением. |
||
| 297 | 4. Создание нового DM с вышедшим пользователем должно быть заблокировано. |
||
| 298 | 5. Отправьте в канал сообщение с его персональным `@mention`: сообщение |
||
| 299 | должно отправиться остальным участникам, а автор должен увидеть |
||
| 300 | предупреждение о недоставке упомянутому пользователю. |
||
| 301 | 6. Снова войдите этим аккаунтом. Отметка Logged out должна исчезнуть у других |
||
| 302 | 4 | Redmine Admin | пользователей. |
| 303 | 5 | Redmine Admin | |
| 304 | Повторный вход создаёт новое активное устройство, но не возвращает историю, |
||
| 305 | 4 | Redmine Admin | уничтоженную при logout. |
| 306 | 5 | Redmine Admin | |
| 307 | ## Что обязательно считать багом |
||
| 308 | |||
| 309 | - Падение, зависание или бесконечная загрузка приложения. |
||
| 310 | - Потеря уже отправленного сообщения или его появление в неправильном чате. |
||
| 311 | - Ошибка расшифровки, нечитаемый текст или повреждённый файл. |
||
| 312 | - Получение доступа к чужому каналу, профилю или данным без разрешения. |
||
| 313 | - Возможность обычного участника выполнить действие owner/moderator. |
||
| 314 | - Доступ исключённого участника к новым сообщениям приватного канала. |
||
| 315 | - Расхождение каналов, ролей, сохранённых сообщений или прочитанности между |
||
| 316 | устройствами, которое не исправляется после переподключения. |
||
| 317 | - Отсутствие DM или `@mention`-уведомления при выполненных условиях доставки. |
||
| 318 | - Неправильный адресат, канал или тред у вложения. |
||
| 319 | - Неработающая кнопка, обрезанный интерфейс или нечитаемый текст, особенно в |
||
| 320 | тёмной теме. |
||
| 321 | |||
| 322 | Проблемы безопасности, потерю данных и воспроизводимые падения отмечайте |
||
| 323 | приоритетом **High**. |
||
| 324 | |||
| 325 | ## Известные ограничения беты |
||
| 326 | |||
| 327 | - Вход обычно доступен только по приглашению; вкладки создания свободного |
||
| 328 | аккаунта может не быть. |
||
| 329 | - Автоматического обновления нет — новую версию нужно устанавливать вручную. |
||
| 330 | - Windows может показать SmartScreen с предупреждением о неизвестном |
||
| 331 | издателе. |
||
| 332 | - Неподписанная macOS-сборка может быть заблокирована Gatekeeper. После |
||
| 333 | переноса приложения в `/Applications` выполните: |
||
| 334 | |||
| 335 | ```sh |
||
| 336 | xattr -cr "/Applications/Green Chat.app" |
||
| 337 | 1 | Redmine Admin | ``` |
| 338 | |||
| 339 | - На macOS системные попапы бета-сборки могут отображаться от имени |
||
| 340 | **Script Editor**. |
||
| 341 | - На части серверов отправка файлов и email-уведомления могут быть отключены. |
||
| 342 | 5 | Redmine Admin | - Числовой бейдж учитывает DM и упоминания; обычное непрочитанное сообщение в |
| 343 | канале отображается точкой. |
||
| 344 | - Сообщение `SPKI pin mismatch` после плановой смены серверного ключа требует |
||
| 345 | повторного входа. Клиент намеренно не принимает новый ключ молча. |
||
| 346 | 6 | Redmine Admin | - Android APK 0.2.3 является debug-сборкой, устанавливается вручную и может |
| 347 | вызвать предупреждение Play Protect о неизвестном разработчике. |
||
| 348 | - Фоновые Android-уведомления требуют Google Play services и настроенный push |
||
| 349 | relay. На HMS/чистом AOSP и после Force stop сообщения появятся только после |
||
| 350 | ручного открытия приложения. |
||
| 351 | 1 | Redmine Admin | |
| 352 | Если поведение не перечислено здесь и выглядит неправильным, лучше отправить |
||
| 353 | репорт. |
||
| 354 | |||
| 355 | 6 | Redmine Admin | ## Полный changelog всех версий 0.2.x |
| 356 | |||
| 357 | Ниже release notes приведены полностью, от текущей версии к самой ранней. |
||
| 358 | Отдельные файлы по ссылкам в начале памятки содержат тот же текст. |
||
| 359 | |||
| 360 | ### Green Chat 0.2.3 — Beta Update |
||
| 361 | |||
| 362 | Дата первой Android-сборки: **30 июля 2026 года**. Актуальная сборка: |
||
| 363 | **4 августа 2026 года**. |
||
| 364 | |||
| 365 | Версия 0.2.3 добавляет **мобильную сборку (Android)** и уведомления на телефон. |
||
| 366 | В актуальную сборку также вошли исправления Android, защиты от расхождения |
||
| 367 | MLS-эпох, управления публичными каналами, desktop-композера и push relay. |
||
| 368 | |||
| 369 | Android-сборка **экспериментальная**: это debug-APK, он не подписан релизным |
||
| 370 | ключом, не публикуется в Play и ставится вручную. |
||
| 371 | |||
| 372 | #### Изменения актуальной сборки от 4 августа |
||
| 373 | |||
| 374 | ##### Надёжность шифрования и доставки |
||
| 375 | |||
| 376 | - Клиент больше не применяет локальный MLS Commit до подтверждения сервера. |
||
| 377 | Это предотвращает расхождение криптографических веток при одновременных |
||
| 378 | изменениях состава группы. |
||
| 379 | - Добавлено автоматическое восстановление устройства, уже попавшего в такую |
||
| 380 | ветку: при ошибке расшифровки текущей эпохи здоровый участник заменяет его |
||
| 381 | MLS-листину, а клиент принимает replacement Welcome и продолжает доставку. |
||
| 382 | - Расшифрованная локальная история при восстановлении сохраняется. Pending |
||
| 383 | MLS-состояние и исходящий запрос сохраняются атомарно, поэтому потерянный |
||
| 384 | HTTP-ответ или перезапуск не создают второй отличный Commit. |
||
| 385 | - Серверу требуется миграция `024_membership_recovery.sql`. |
||
| 386 | |||
| 387 | ##### Android |
||
| 388 | |||
| 389 | - Интерфейс учитывает вырезы экрана, status bar, навигационную панель и |
||
| 390 | виртуальную клавиатуру. |
||
| 391 | - Выбор файла использует нативный Android picker; документы и изображения |
||
| 392 | можно прикреплять к обычным сообщениям и ответам в тредах. |
||
| 393 | - В launcher и системных настройках отображается имя **Green Chat**, системные |
||
| 394 | push-строки приведены к английской локализации. |
||
| 395 | - Перед упаковкой удаляется старый universal APK/AAB, чтобы прерванная |
||
| 396 | инкрементальная сборка не раздувала новый пакет. |
||
| 397 | |||
| 398 | ##### Каналы и интерфейс |
||
| 399 | |||
| 400 | - Любой активный участник публичного канала может пригласить нового |
||
| 401 | пользователя через **Add member**. Исключение участников публичного канала |
||
| 402 | по-прежнему запрещено. |
||
| 403 | - Иконки действий в desktop-композере приведены к единому стилю. |
||
| 404 | - Emoji picker больше не обрезается границами поля ввода. |
||
| 405 | |||
| 406 | ##### Push relay и эксплуатация |
||
| 407 | |||
| 408 | - Relay корректно распознаёт реальный ответ FCM `UNREGISTERED` и удаляет |
||
| 409 | недействительные Firebase installation IDs. |
||
| 410 | - Bootstrap dev push-конфигурации останавливается при расхождении секрета в |
||
| 411 | `tenants.json` и переменной окружения. |
||
| 412 | - Локальный chat server больше не зависит по healthcheck от push relay и может |
||
| 413 | работать без фоновых мобильных уведомлений. |
||
| 414 | |||
| 415 | #### Android-клиент |
||
| 416 | |||
| 417 | - Приложение собрано из **того же кода**, что и desktop (Tauri 2 mobile): те же |
||
| 418 | MLS-шифрование, те же экраны, та же логика доставки. Отдельного мобильного |
||
| 419 | клиента с собственной криптографией не появилось. |
||
| 420 | - Приватный ключ устройства и ключ локальной базы хранятся в **AndroidKeyStore** |
||
| 421 | (аппаратно, если устройство поддерживает); удаление приложения удаляет и их. |
||
| 422 | - Линковка устройства сканированием QR-кода. Если камера недоступна — работает |
||
| 423 | ручной ввод кода. |
||
| 424 | - Интерфейс перестроен под телефон: список чатов и переписка — один стек с |
||
| 425 | кнопкой «назад», панели тредов, участников и сохранённых открываются на весь |
||
| 426 | экран, учитываются вырезы экрана и виртуальная клавиатура. |
||
| 427 | |||
| 428 | #### Уведомления на телефон |
||
| 429 | |||
| 430 | - Приходят через Firebase Cloud Messaging. **Содержимое сообщения в push не |
||
| 431 | передаётся** — приходит только сигнал «есть новое», текст «New message» |
||
| 432 | формирует само приложение на устройстве. |
||
| 433 | - Push будит приложение и запускает догрузку, поэтому при открытии всё уже на |
||
| 434 | месте. |
||
| 435 | - Уведомление приходит **только на устройства без активного соединения** — если |
||
| 436 | телефон онлайн, сообщение и так придёт по WebSocket. |
||
| 437 | - На Android 13+ при первом запуске приложение спросит разрешение на |
||
| 438 | уведомления. Отказ отключает попапы, сообщения продолжают приходить. |
||
| 439 | - Требуются **Google Play services**. На устройствах без них (HMS, чистый AOSP) |
||
| 440 | фоновых уведомлений не будет — ограничение транспорта, не клиента. |
||
| 441 | - Push не приходит, если приложение принудительно остановлено через |
||
| 442 | «Настройки → Приложения → Остановить»: система блокирует доставку до |
||
| 443 | следующего запуска вручную. |
||
| 444 | |||
| 445 | Уведомления **не заменяют** доставку: если push потерялся, сообщения всё равно |
||
| 446 | догружаются при открытии приложения. |
||
| 447 | |||
| 448 | #### Сервер |
||
| 449 | |||
| 450 | Требуется **обновление сервера** и миграции `023_push_installations.sql` и |
||
| 451 | `024_membership_recovery.sql`. |
||
| 452 | Дополнительно администратору нужно настроить push relay — без него мобильный |
||
| 453 | клиент работает полностью, но фоновых уведомлений не будет |
||
| 454 | (см. [docs/push-relay-deployment.md](push-relay-deployment.md) и шаг 4b |
||
| 455 | [бета-чеклиста](beta-checklist.md)). |
||
| 456 | |||
| 457 | Границы приватности не изменились: сервер по-прежнему не видит текст |
||
| 458 | сообщений и ключи. Появился один новый элемент — центральный push relay |
||
| 459 | получает идентификатор установки приложения (не аккаунт и не сообщение) и |
||
| 460 | время отправки; подробности и принятые риски описаны в |
||
| 461 | [ADR-0026](ADR-0026-central-push-relay.md). |
||
| 462 | |||
| 463 | #### Обновление |
||
| 464 | |||
| 465 | 1. Администратор обновляет сервер и применяет миграции 023 и 024. |
||
| 466 | 2. Desktop: установите **0.2.3** на все устройства. |
||
| 467 | 3. Android: установите APK, войдите или привяжите устройство по QR. |
||
| 468 | |||
| 469 | Что особенно важно проверить на телефоне: |
||
| 470 | |||
| 471 | 1. приходит ли уведомление, когда приложение **свёрнуто**, а не открыто; |
||
| 472 | 2. открываются ли после тапа именно новые сообщения — без ручного обновления; |
||
| 473 | 3. работает ли одновременно телефон и десктоп на одном аккаунте (счётчики |
||
| 474 | непрочитанных не должны расходиться); |
||
| 475 | 4. привязка устройства по QR-коду; |
||
| 476 | 5. отправка и открытие вложений с телефона. |
||
| 477 | |||
| 478 | --- |
||
| 479 | |||
| 480 | ### Green Chat Desktop 0.2.2 — Beta Update |
||
| 481 | |||
| 482 | Дата выпуска: **23 июля 2026 года**. |
||
| 483 | |||
| 484 | Версия 0.2.2 закрывает бета-репорт «клиент в фоне на Windows молчит и не |
||
| 485 | обновляется»: свёрнутое или скрытое в tray окно не получало ни системного |
||
| 486 | уведомления, ни счётчика непрочитанных, а интерфейс показывал новые сообщения |
||
| 487 | только после ручного обновления страницы (Ctrl+R). |
||
| 488 | |||
| 489 | Обновляется **только desktop-клиент** — серверных изменений в этом выпуске |
||
| 490 | нет (см. раздел «Сервер»). |
||
| 491 | |||
| 492 | #### Доставка и уведомления при свёрнутом окне |
||
| 493 | |||
| 494 | - Фоновая сверка с сервером перенесена из интерфейсного слоя в нативный |
||
| 495 | Rust-процесс и выполняется каждые 10 секунд. Windows может приостанавливать |
||
| 496 | таймеры и сам JS-контекст WebView2 у скрытого окна — теперь это не |
||
| 497 | останавливает ни доставку сообщений, ни уведомления. |
||
| 498 | - Системное уведомление для сообщения, пришедшего в свёрнутое/фоновое окно, |
||
| 499 | создаётся непосредственно нативным процессом, до и независимо от |
||
| 500 | интерфейсного слоя. Открывать окно, чтобы получить попап, не требуется. |
||
| 501 | Настройки Pause all notifications, DND, mute, quiet hours и режим |
||
| 502 | уведомлений канала учитываются так же, как раньше. |
||
| 503 | - Возврат окна из фона, minimize или tray запускает немедленную сверку — |
||
| 504 | счётчики и новые сообщения появляются сами, ручной Reload больше не нужен. |
||
| 505 | - Потерянный единичный WebSocket-кадр или half-open соединение больше не |
||
| 506 | оставляют клиент без счётчика, звука и попапа: любое расхождение с сервером |
||
| 507 | устраняется ближайшей 10-секундной сверкой. |
||
| 508 | - После выхода компьютера из сна клиент больше не ждёт до 90 секунд, считая |
||
| 509 | старый WebSocket подключённым: resume-watchdog обнаруживает паузу системных |
||
| 510 | часов и переподключается за несколько секунд, сразу забирая пропущенные |
||
| 511 | сообщения и восстанавливая presence. |
||
| 512 | - Сводное уведомление «N new messages» о сообщениях, восстановленных фоновой |
||
| 513 | сверкой, показывается даже если окно уже получило фокус (например, сразу |
||
| 514 | после открытия крышки ноутбука) и не дублируется при открытии окна после |
||
| 515 | нативного уведомления. |
||
| 516 | - Если звук сообщений включён, уведомления сопровождаются нативным системным |
||
| 517 | звуком; серия подряд идущих сообщений даёт один звук, а не очередь сигналов. |
||
| 518 | - Определение «окно в фокусе» для подавления попапов использует состояние |
||
| 519 | самого интерфейса, а не системный сигнал окна — на Windows системный сигнал |
||
| 520 | недостоверен и мог как показывать попапы поверх активного окна, так и |
||
| 521 | глушить их у скрытого. |
||
| 522 | |||
| 523 | #### Личные сообщения |
||
| 524 | |||
| 525 | - Если KeyPackage нового устройства ещё загружается, повторная попытка |
||
| 526 | восстановления membership выполняется через несколько секунд с постепенным |
||
| 527 | увеличением интервала. Чат больше не зависает в состоянии `re-syncing` |
||
| 528 | из-за двухминутного ожидания, которое при каждом перезапуске начиналось |
||
| 529 | заново. |
||
| 530 | - Исправлена ложная блокировка отправки после password login или привязки |
||
| 531 | устройства: старые клиенты создавали пустую MLS BasicCredential, поэтому |
||
| 532 | два реальных листа ошибочно считались одним пользователем. Готовность |
||
| 533 | личного чата теперь проверяется по фактическому MLS roster, а новые |
||
| 534 | устройства сохраняют credential с серверным username. |
||
| 535 | |||
| 536 | #### Сервер |
||
| 537 | |||
| 538 | Серверный код в 0.2.2 не менялся. Требования совпадают с 0.2.1: сервер должен |
||
| 539 | быть обновлён до серверной версии выпуска 0.2.1 (endpoints состояния |
||
| 540 | синхронизации и миграция `022_membership_repair_claims.sql`). Со старым |
||
| 541 | сервером клиент продолжает работать в режиме прежней полной догрузки, но |
||
| 542 | 10-секундная сверка и восстановление membership недоступны. |
||
| 543 | |||
| 544 | Как и раньше, содержимое сообщений, ключи и настройки уведомлений не |
||
| 545 | передаются серверу в открытом виде; текст системных уведомлений формируется |
||
| 546 | локально и никогда не покидает устройство. |
||
| 547 | |||
| 548 | #### Обновление |
||
| 549 | |||
| 550 | Установите **Green Chat Desktop 0.2.2 на все свои устройства**. |
||
| 551 | |||
| 552 | Особенно важно повторно проверить: |
||
| 553 | |||
| 554 | 1. сообщения и `@mention` в **свёрнутое или скрытое в tray** окно: системный |
||
| 555 | попап и звук должны прийти без открытия окна, а после открытия счётчики и |
||
| 556 | сообщения должны быть уже на месте — без Ctrl+R; |
||
| 557 | 2. перед проверкой уведомлений убедитесь, что в **Settings → Notifications** |
||
| 558 | выключен **Pause all notifications** — включённый тумблер отключает попапы |
||
| 559 | и звук намеренно, при этом сообщения и счётчики продолжают приходить; |
||
| 560 | 3. получение сообщений после сна/пробуждения компьютера; |
||
| 561 | 4. личный чат после logout и повторного входа одного из участников; |
||
| 562 | 5. одновременную работу двух устройств одного аккаунта. |
||
| 563 | |||
| 564 | --- |
||
| 565 | |||
| 566 | ### Green Chat Desktop 0.2.1 — Beta Update |
||
| 567 | |||
| 568 | Дата выпуска: **22 июля 2026 года**. |
||
| 569 | |||
| 570 | Версия 0.2.1 исправляет проблемы доставки сообщений и уведомлений, |
||
| 571 | обнаруженные во время бета-тестирования 0.2.0. |
||
| 572 | |||
| 573 | #### Главное |
||
| 574 | |||
| 575 | - Доставка больше не зависит только от WebSocket-событий. Клиент сверяет |
||
| 576 | локальное состояние с сервером после подключения, при ошибке live-доставки |
||
| 577 | и каждые две минуты, пока соединение активно. |
||
| 578 | - Пропущенные во время офлайна сообщения автоматически догружаются в |
||
| 579 | правильном порядке вместе с необходимыми MLS-коммитами. |
||
| 580 | - Счётчики непрочитанных, список тредов и сохранённые сообщения обновляются |
||
| 581 | после каждой сверки с сервером. |
||
| 582 | - Для сообщений, полученных через фоновую сверку, показывается одно сводное |
||
| 583 | уведомление вместо серии попапов. Настройки DND, mute, quiet hours и режим |
||
| 584 | уведомлений канала продолжают учитываться. |
||
| 585 | |||
| 586 | #### Исправление личных сообщений после повторного входа |
||
| 587 | |||
| 588 | - Исправлена ситуация, когда после logout и повторного входа личный чат |
||
| 589 | оставался доступен, но новые сообщения фактически шифровались без устройства |
||
| 590 | собеседника. |
||
| 591 | - Клиент автоматически обнаруживает отсутствующее устройство участника и |
||
| 592 | повторно добавляет его в MLS-группу личного чата. |
||
| 593 | - Одновременное восстановление несколькими устройствами защищено коротким |
||
| 594 | серверным lease: проигравший клиент останавливается до изменения локальной |
||
| 595 | MLS-эпохи. |
||
| 596 | - Пока устройство собеседника ещё не восстановлено в личном чате, поле ввода |
||
| 597 | заменяется сообщением о синхронизации, а отправка временно блокируется. |
||
| 598 | Отметка `✓✓` в этом состоянии заменяется честным предупреждением |
||
| 599 | `not delivered`. |
||
| 600 | - После успешного восстановления чат разблокируется по долговременному |
||
| 601 | состоянию клиента, даже если соответствующее WebSocket-событие потерялось. |
||
| 602 | |||
| 603 | #### Надёжность и диагностика |
||
| 604 | |||
| 605 | - Ошибка обработки live-сообщения теперь запускает ускоренную сверку с |
||
| 606 | сервером вместо ожидания следующего переподключения. |
||
| 607 | - Исправлена потеря полной проверки групп, если переподключение совпало по |
||
| 608 | времени с уже выполняющейся фоновой сверкой. |
||
| 609 | - Отложенные reconcile-задачи корректно отменяются при logout. |
||
| 610 | - Desktop-клиент пишет диагностический лог в `glchat.log` в каталоге данных |
||
| 611 | приложения. |
||
| 612 | - Добавлена ротация лога при достижении 5 MiB с сохранением одной предыдущей |
||
| 613 | копии `glchat.log.old`, включая повторную ротацию на Windows. |
||
| 614 | |||
| 615 | #### Сервер |
||
| 616 | |||
| 617 | - Добавлены авторизованные endpoints состояния синхронизации: хвосты сообщений |
||
| 618 | по группам и отсутствующие membership-листы. |
||
| 619 | - Добавлен одноразовый lease-token для безопасного восстановления membership. |
||
| 620 | - Добавлена метрика Prometheus для количества обнаруженных membership gaps. |
||
| 621 | - Добавлена миграция `022_membership_repair_claims.sql`. |
||
| 622 | |||
| 623 | Содержимое сообщений, ключи и настройки уведомлений по-прежнему не передаются |
||
| 624 | серверу в открытом виде. Новые endpoints работают только с уже известными |
||
| 625 | серверу метаданными групп, устройств и последовательностей сообщений. |
||
| 626 | |||
| 627 | #### Обновление |
||
| 628 | |||
| 629 | Для проверки исправлений установите **Green Chat Desktop 0.2.1 на все свои |
||
| 630 | устройства**. Сервер также должен быть обновлён и иметь применённую миграцию |
||
| 631 | `022_membership_repair_claims.sql`. |
||
| 632 | |||
| 633 | Особенно важно повторно проверить: |
||
| 634 | |||
| 635 | 1. получение сообщений после временного отключения сети; |
||
| 636 | 2. непрочитанные, звук и системный попап после фоновой догрузки; |
||
| 637 | 3. личный чат после logout и повторного входа одного из участников; |
||
| 638 | 4. одновременную работу двух устройств одного аккаунта; |
||
| 639 | 5. наличие `glchat.log` после перезапуска desktop-приложения. |
||
| 640 | |||
| 641 | --- |
||
| 642 | |||
| 643 | ### glchat Desktop 0.2.0 — Beta Update |
||
| 644 | |||
| 645 | Изменения с 9 по 20 июля 2026 года. |
||
| 646 | |||
| 647 | #### Новые возможности |
||
| 648 | |||
| 649 | - Добавлены роли владельца и модератора канала, управление участниками, выход из канала и локальное скрытие чатов. |
||
| 650 | - Появились карточки профилей с аватаром, должностью, описанием и контактами. |
||
| 651 | - Добавлен единый раздел «Треды» со всеми обсуждениями и фильтром непрочитанных. |
||
| 652 | - Сообщения теперь можно сохранять в личные закладки с синхронизацией между устройствами. |
||
| 653 | - Добавлена локальная история загрузок: файл можно открыть, показать в папке или убрать из списка. |
||
| 654 | - Изображения открываются во встроенном просмотрщике, добавлена безопасная анимация GIF. |
||
| 655 | - Изображения из буфера обмена можно вставлять прямо в сообщение. |
||
| 656 | - Добавлены звуковые уведомления о новых сообщениях и настройка звука. |
||
| 657 | - Пользователи, вышедшие со всех устройств, теперь отмечаются в интерфейсе. Перед отправкой им личного сообщения или упоминания показывается предупреждение. |
||
| 658 | |||
| 659 | #### Улучшения интерфейса |
||
| 660 | |||
| 661 | - Добавлены контекстные действия для сообщений. |
||
| 662 | - Улучшены редакторы сообщений и ответов в тредах. |
||
| 663 | - Добавлены упоминания пользователей в ответах треда. |
||
| 664 | - Улучшена работа с вложениями: предварительная подготовка, drag-and-drop в треды и удаление отправленных файлов. |
||
| 665 | - Поиск теперь прокручивает чат до найденного сообщения и ограничивает слишком тяжёлые запросы. |
||
| 666 | - Улучшены индикаторы присутствия, подсчёт участников и расположение боковых панелей. |
||
| 667 | - После отправки сообщения чат автоматически прокручивается к нему. |
||
| 668 | - Исправлено восстановление окна приложения из системного трея. |
||
| 669 | |||
| 670 | #### Исправления и стабильность |
||
| 671 | |||
| 672 | - Исправлена синхронизация каналов, участников и метаданных между несколькими устройствами. |
||
| 673 | - Восстановлена доставка уведомлений после длительного офлайна. |
||
| 674 | - Статус пользователя обновляется сразу после подключения. |
||
| 675 | - Исправлен учёт непрочитанных сообщений при переключении фокуса окна. |
||
| 676 | - Исключённые каналы сразу удаляются из интерфейса, а устаревшие события больше не удаляют канал после повторного вступления. |
||
| 677 | - Исправлены отображение закреплённых файлов и привязка вложений к исходному чату. |
||
| 678 | - Добавлена корректная обработка максимальной длины сообщений. |
||
| 679 | - Аватары профилей теперь обновляются в реальном времени. |
||
| 680 | - Улучшено восстановление личных чатов после выхода всех участников со всех устройств. |
||
| 681 | - При выходе устройство отзывается на сервере, чтобы не оставлять неактивные устройства и ключи. |
||
| 682 | |||
| 683 | #### Сервер и эксплуатация |
||
| 684 | |||
| 685 | - Добавлены Prometheus-метрики для HTTP, WebSocket, PostgreSQL, Redis и Go runtime. |
||
| 686 | - Подготовлены базовые правила мониторинга и алертов. |
||
| 687 | - Улучшена конфигурация TLS для файлового хранилища. |
||
| 688 | |||
| 689 | Итого: **40 коммитов и 178 изменённых файлов** в ветке `main`. |
||
| 690 | |||
| 691 | 5 | Redmine Admin | ## Как оставить баг-репорт |
| 692 | |||
| 693 | Трекер: |
||
| 694 | <https://bug.green-lab.space/projects/greenchat/issues/new>. Регистрация не |
||
| 695 | нужна, репорт можно отправить анонимно. |
||
| 696 | |||
| 697 | ### Что указать |
||
| 698 | |||
| 699 | ```text |
||
| 700 | Краткое название: что сломалось и где |
||
| 701 | 1 | Redmine Admin | |
| 702 | 5 | Redmine Admin | Шаги: |
| 703 | 1. … |
||
| 704 | 2. … |
||
| 705 | 3. … |
||
| 706 | |||
| 707 | Ожидал: … |
||
| 708 | Получил: … |
||
| 709 | |||
| 710 | Окружение: |
||
| 711 | 6 | Redmine Admin | - Green Chat 0.2.3 (или версия из Settings → Profile) |
| 712 | 5 | Redmine Admin | - ОС и версия |
| 713 | - один или несколько аккаунтов/устройств |
||
| 714 | - название канала или DM |
||
| 715 | - точное время события и часовой пояс |
||
| 716 | |||
| 717 | Воспроизводится: всегда / иногда / один раз |
||
| 718 | Дополнительно: скриншот или короткое видео |
||
| 719 | ``` |
||
| 720 | |||
| 721 | Для проблем синхронизации укажите ОС и версию клиента **на каждой стороне**, |
||
| 722 | а также какое устройство было офлайн. |
||
| 723 | |||
| 724 | Трекер публичный. Не прикладывайте пароли, invite-коды, ключи, приватные |
||
| 725 | логи или скриншоты с конфиденциальной перепиской. Перед отправкой замажьте |
||
| 726 | лишние данные. |
||
| 727 | |||
| 728 | ### Приоритет |
||
| 729 | |||
| 730 | | Приоритет | Когда использовать | |
||
| 731 | |---|---| |
||
| 732 | | `Normal` | Большинство ошибок интерфейса и поведения | |
||
| 733 | | `High` | Падение, потеря данных, недоставка сообщений, нарушение прав или безопасности | |
||
| 734 | | `Urgent` / `Immediate` | Не выбирайте без отдельной просьбы команды | |
||
| 735 | |||
| 736 | ## Быстрая диагностика уведомлений |
||
| 737 | |||
| 738 | 1. Нажмите **Settings → Notifications → Send test**. |
||
| 739 | 2. Если тест пришёл, проверьте **Pause all notifications**, DND, mute, |
||
| 740 | quiet hours и фокус окна: Send test обходит эти настройки, а обычные |
||
| 741 | уведомления — нет. |
||
| 742 | 3. Для канала используйте персональный `@mention`; обычное сообщение может не |
||
| 743 | создавать попап. |
||
| 744 | 4. Если приложение было закрыто через tray → Quit, системного попапа быть не |
||
| 745 | должно. |
||
| 746 | 5. Если Send test не работает при разрешённых уведомлениях ОС, создайте |
||
| 747 | баг-репорт и обязательно укажите операционную систему. |