Wiki » History » Version 4
Redmine Admin, 07/22/2026 09:53 PM
| 1 | 3 | Redmine Admin | # Green Chat Desktop 0.2.1 — Beta Update |
|---|---|---|---|
| 2 | |||
| 3 | Дата выпуска: **22 июля 2026 года**. |
||
| 4 | |||
| 5 | Версия 0.2.1 исправляет проблемы доставки сообщений и уведомлений, |
||
| 6 | обнаруженные во время бета-тестирования 0.2.0. |
||
| 7 | |||
| 8 | ## Главное |
||
| 9 | |||
| 10 | - Доставка больше не зависит только от WebSocket-событий. Клиент сверяет |
||
| 11 | локальное состояние с сервером после подключения, при ошибке live-доставки |
||
| 12 | 1 | Redmine Admin | и каждые две минуты, пока соединение активно. |
| 13 | - Пропущенные во время офлайна сообщения автоматически догружаются в |
||
| 14 | правильном порядке вместе с необходимыми MLS-коммитами. |
||
| 15 | 3 | Redmine Admin | - Счётчики непрочитанных, список тредов и сохранённые сообщения обновляются |
| 16 | после каждой сверки с сервером. |
||
| 17 | - Для сообщений, полученных через фоновую сверку, показывается одно сводное |
||
| 18 | 4 | Redmine Admin | уведомление вместо серии попапов, даже если окно получило фокус сразу после |
| 19 | выхода ноутбука из сна. Если звук сообщений включён, сводное уведомление |
||
| 20 | сопровождается нативным звуком. Настройки DND, mute, quiet hours и режим |
||
| 21 | 3 | Redmine Admin | уведомлений канала продолжают учитываться. |
| 22 | |||
| 23 | ## Исправление личных сообщений после повторного входа |
||
| 24 | |||
| 25 | - Исправлена ситуация, когда после logout и повторного входа личный чат |
||
| 26 | оставался доступен, но новые сообщения фактически шифровались без устройства |
||
| 27 | собеседника. |
||
| 28 | - Клиент автоматически обнаруживает отсутствующее устройство участника и |
||
| 29 | повторно добавляет его в MLS-группу личного чата. |
||
| 30 | - Одновременное восстановление несколькими устройствами защищено коротким |
||
| 31 | серверным lease: проигравший клиент останавливается до изменения локальной |
||
| 32 | 1 | Redmine Admin | MLS-эпохи. |
| 33 | - Пока устройство собеседника ещё не восстановлено в личном чате, поле ввода |
||
| 34 | заменяется сообщением о синхронизации, а отправка временно блокируется. |
||
| 35 | Отметка `✓✓` в этом состоянии заменяется честным предупреждением |
||
| 36 | `not delivered`. |
||
| 37 | - После успешного восстановления чат разблокируется по долговременному |
||
| 38 | состоянию клиента, даже если соответствующее WebSocket-событие потерялось. |
||
| 39 | 4 | Redmine Admin | - Если KeyPackage нового устройства ещё загружается, повторная попытка теперь |
| 40 | выполняется через несколько секунд с постепенным увеличением интервала. Чат |
||
| 41 | больше не зависает в состоянии `re-syncing` из-за двухминутного ожидания, |
||
| 42 | которое при каждом перезапуске начиналось заново. |
||
| 43 | - Исправлена ложная блокировка отправки после password login или привязки |
||
| 44 | устройства: старые клиенты создавали пустую MLS BasicCredential, поэтому |
||
| 45 | два реальных листа ошибочно считались одним пользователем. Готовность личного |
||
| 46 | чата теперь проверяется по фактическому MLS roster, а новые устройства |
||
| 47 | сохраняют credential с серверным username. |
||
| 48 | - После выхода ноутбука из сна клиент больше не ждёт до 90 секунд, считая старый |
||
| 49 | WebSocket подключённым. Resume watchdog обнаруживает паузу системных часов, |
||
| 50 | переподключается в течение нескольких секунд, сразу забирает пропущенные |
||
| 51 | сообщения и восстанавливает видимый другим устройствам presence. |
||
| 52 | 3 | Redmine Admin | |
| 53 | ## Надёжность и диагностика |
||
| 54 | |||
| 55 | - Ошибка обработки live-сообщения теперь запускает ускоренную сверку с |
||
| 56 | сервером вместо ожидания следующего переподключения. |
||
| 57 | - Исправлена потеря полной проверки групп, если переподключение совпало по |
||
| 58 | времени с уже выполняющейся фоновой сверкой. |
||
| 59 | - Отложенные reconcile-задачи корректно отменяются при logout. |
||
| 60 | - Desktop-клиент пишет диагностический лог в `glchat.log` в каталоге данных |
||
| 61 | приложения. |
||
| 62 | - Добавлена ротация лога при достижении 5 MiB с сохранением одной предыдущей |
||
| 63 | копии `glchat.log.old`, включая повторную ротацию на Windows. |
||
| 64 | |||
| 65 | ## Сервер |
||
| 66 | |||
| 67 | - Добавлены авторизованные endpoints состояния синхронизации: хвосты сообщений |
||
| 68 | по группам и отсутствующие membership-листы. |
||
| 69 | - Добавлен одноразовый lease-token для безопасного восстановления membership. |
||
| 70 | - Добавлена метрика Prometheus для количества обнаруженных membership gaps. |
||
| 71 | - Добавлена миграция `022_membership_repair_claims.sql`. |
||
| 72 | |||
| 73 | Содержимое сообщений, ключи и настройки уведомлений по-прежнему не передаются |
||
| 74 | серверу в открытом виде. Новые endpoints работают только с уже известными |
||
| 75 | серверу метаданными групп, устройств и последовательностей сообщений. |
||
| 76 | |||
| 77 | ## Обновление |
||
| 78 | |||
| 79 | 1 | Redmine Admin | Для проверки исправлений установите **Green Chat Desktop 0.2.1 на все свои |
| 80 | устройства**. Сервер также должен быть обновлён и иметь применённую миграцию |
||
| 81 | `022_membership_repair_claims.sql`. |
||
| 82 | |||
| 83 | Особенно важно повторно проверить: |
||
| 84 | |||
| 85 | 1. получение сообщений после временного отключения сети; |
||
| 86 | 2. непрочитанные, звук и системный попап после фоновой догрузки; |
||
| 87 | 3. личный чат после logout и повторного входа одного из участников; |
||
| 88 | 4. одновременную работу двух устройств одного аккаунта; |
||
| 89 | 5. наличие `glchat.log` после перезапуска desktop-приложения. |
||
| 90 | |||
| 91 | 4 | Redmine Admin | # VERSIONS CHANGE LOG |
| 92 | 1 | Redmine Admin | |
| 93 | 4 | Redmine Admin | ## Green Chat Desktop 0.2.1 — Beta Update |
| 94 | 1 | Redmine Admin | |
| 95 | 4 | Redmine Admin | Дата выпуска: **22 июля 2026 года**. |
| 96 | 1 | Redmine Admin | |
| 97 | 4 | Redmine Admin | Версия 0.2.1 исправляет проблемы доставки сообщений и уведомлений, |
| 98 | обнаруженные во время бета-тестирования 0.2.0. |
||
| 99 | 1 | Redmine Admin | |
| 100 | 4 | Redmine Admin | ## Главное |
| 101 | 1 | Redmine Admin | |
| 102 | 4 | Redmine Admin | - Доставка больше не зависит только от WebSocket-событий. Клиент сверяет |
| 103 | локальное состояние с сервером после подключения, при ошибке live-доставки |
||
| 104 | и каждые две минуты, пока соединение активно. |
||
| 105 | - Пропущенные во время офлайна сообщения автоматически догружаются в |
||
| 106 | правильном порядке вместе с необходимыми MLS-коммитами. |
||
| 107 | - Счётчики непрочитанных, список тредов и сохранённые сообщения обновляются |
||
| 108 | после каждой сверки с сервером. |
||
| 109 | - Для сообщений, полученных через фоновую сверку, показывается одно сводное |
||
| 110 | уведомление вместо серии попапов, даже если окно получило фокус сразу после |
||
| 111 | выхода ноутбука из сна. Если звук сообщений включён, сводное уведомление |
||
| 112 | сопровождается нативным звуком. Настройки DND, mute, quiet hours и режим |
||
| 113 | уведомлений канала продолжают учитываться. |
||
| 114 | 1 | Redmine Admin | |
| 115 | 4 | Redmine Admin | ## Исправление личных сообщений после повторного входа |
| 116 | 1 | Redmine Admin | |
| 117 | 4 | Redmine Admin | - Исправлена ситуация, когда после logout и повторного входа личный чат |
| 118 | оставался доступен, но новые сообщения фактически шифровались без устройства |
||
| 119 | собеседника. |
||
| 120 | - Клиент автоматически обнаруживает отсутствующее устройство участника и |
||
| 121 | повторно добавляет его в MLS-группу личного чата. |
||
| 122 | - Одновременное восстановление несколькими устройствами защищено коротким |
||
| 123 | серверным lease: проигравший клиент останавливается до изменения локальной |
||
| 124 | MLS-эпохи. |
||
| 125 | - Пока устройство собеседника ещё не восстановлено в личном чате, поле ввода |
||
| 126 | заменяется сообщением о синхронизации, а отправка временно блокируется. |
||
| 127 | Отметка `✓✓` в этом состоянии заменяется честным предупреждением |
||
| 128 | `not delivered`. |
||
| 129 | - После успешного восстановления чат разблокируется по долговременному |
||
| 130 | состоянию клиента, даже если соответствующее WebSocket-событие потерялось. |
||
| 131 | - Если KeyPackage нового устройства ещё загружается, повторная попытка теперь |
||
| 132 | выполняется через несколько секунд с постепенным увеличением интервала. Чат |
||
| 133 | больше не зависает в состоянии `re-syncing` из-за двухминутного ожидания, |
||
| 134 | которое при каждом перезапуске начиналось заново. |
||
| 135 | - Исправлена ложная блокировка отправки после password login или привязки |
||
| 136 | устройства: старые клиенты создавали пустую MLS BasicCredential, поэтому |
||
| 137 | два реальных листа ошибочно считались одним пользователем. Готовность личного |
||
| 138 | чата теперь проверяется по фактическому MLS roster, а новые устройства |
||
| 139 | сохраняют credential с серверным username. |
||
| 140 | - После выхода ноутбука из сна клиент больше не ждёт до 90 секунд, считая старый |
||
| 141 | WebSocket подключённым. Resume watchdog обнаруживает паузу системных часов, |
||
| 142 | переподключается в течение нескольких секунд, сразу забирает пропущенные |
||
| 143 | сообщения и восстанавливает видимый другим устройствам presence. |
||
| 144 | 2 | Redmine Admin | |
| 145 | 4 | Redmine Admin | ## Надёжность и диагностика |
| 146 | 2 | Redmine Admin | |
| 147 | 4 | Redmine Admin | - Ошибка обработки live-сообщения теперь запускает ускоренную сверку с |
| 148 | сервером вместо ожидания следующего переподключения. |
||
| 149 | - Исправлена потеря полной проверки групп, если переподключение совпало по |
||
| 150 | времени с уже выполняющейся фоновой сверкой. |
||
| 151 | - Отложенные reconcile-задачи корректно отменяются при logout. |
||
| 152 | - Desktop-клиент пишет диагностический лог в `glchat.log` в каталоге данных |
||
| 153 | приложения. |
||
| 154 | - Добавлена ротация лога при достижении 5 MiB с сохранением одной предыдущей |
||
| 155 | копии `glchat.log.old`, включая повторную ротацию на Windows. |
||
| 156 | 2 | Redmine Admin | |
| 157 | 4 | Redmine Admin | ## Сервер |
| 158 | 2 | Redmine Admin | |
| 159 | 4 | Redmine Admin | - Добавлены авторизованные endpoints состояния синхронизации: хвосты сообщений |
| 160 | по группам и отсутствующие membership-листы. |
||
| 161 | - Добавлен одноразовый lease-token для безопасного восстановления membership. |
||
| 162 | - Добавлена метрика Prometheus для количества обнаруженных membership gaps. |
||
| 163 | - Добавлена миграция `022_membership_repair_claims.sql`. |
||
| 164 | 2 | Redmine Admin | |
| 165 | 4 | Redmine Admin | Содержимое сообщений, ключи и настройки уведомлений по-прежнему не передаются |
| 166 | серверу в открытом виде. Новые endpoints работают только с уже известными |
||
| 167 | серверу метаданными групп, устройств и последовательностей сообщений. |
||
| 168 | 2 | Redmine Admin | |
| 169 | 4 | Redmine Admin | ## Обновление |
| 170 | 2 | Redmine Admin | |
| 171 | 4 | Redmine Admin | Для проверки исправлений установите **Green Chat Desktop 0.2.1 на все свои |
| 172 | устройства**. |
||
| 173 | 2 | Redmine Admin | |
| 174 | 4 | Redmine Admin | Особенно важно повторно проверить: |
| 175 | 2 | Redmine Admin | |
| 176 | 4 | Redmine Admin | 1. получение сообщений после временного отключения сети; |
| 177 | 2. непрочитанные, звук и системный попап после фоновой догрузки; |
||
| 178 | 3. личный чат после logout и повторного входа одного из участников; |
||
| 179 | 4. одновременную работу двух устройств одного аккаунта; |
||
| 180 | 5. наличие `glchat.log` после перезапуска desktop-приложения. |
||
| 181 | 2 | Redmine Admin | |
| 182 | 4 | Redmine Admin | ## glchat Desktop 0.2.0 — Beta Update |
| 183 | 2 | Redmine Admin | |
| 184 | Изменения с 9 по 20 июля 2026 года. |
||
| 185 | |||
| 186 | ## Новые возможности |
||
| 187 | |||
| 188 | - Добавлены роли владельца и модератора канала, управление участниками, выход из канала и локальное скрытие чатов. |
||
| 189 | - Появились карточки профилей с аватаром, должностью, описанием и контактами. |
||
| 190 | - Добавлен единый раздел «Треды» со всеми обсуждениями и фильтром непрочитанных. |
||
| 191 | - Сообщения теперь можно сохранять в личные закладки с синхронизацией между устройствами. |
||
| 192 | - Добавлена локальная история загрузок: файл можно открыть, показать в папке или убрать из списка. |
||
| 193 | - Изображения открываются во встроенном просмотрщике, добавлена безопасная анимация GIF. |
||
| 194 | - Изображения из буфера обмена можно вставлять прямо в сообщение. |
||
| 195 | - Добавлены звуковые уведомления о новых сообщениях и настройка звука. |
||
| 196 | - Пользователи, вышедшие со всех устройств, теперь отмечаются в интерфейсе. Перед отправкой им личного сообщения или упоминания показывается предупреждение. |
||
| 197 | |||
| 198 | ## Улучшения интерфейса |
||
| 199 | |||
| 200 | 1 | Redmine Admin | - Добавлены контекстные действия для сообщений. |
| 201 | - Улучшены редакторы сообщений и ответов в тредах. |
||
| 202 | - Добавлены упоминания пользователей в ответах треда. |
||
| 203 | - Улучшена работа с вложениями: предварительная подготовка, drag-and-drop в треды и удаление отправленных файлов. |
||
| 204 | - Поиск теперь прокручивает чат до найденного сообщения и ограничивает слишком тяжёлые запросы. |
||
| 205 | - Улучшены индикаторы присутствия, подсчёт участников и расположение боковых панелей. |
||
| 206 | - После отправки сообщения чат автоматически прокручивается к нему. |
||
| 207 | - Исправлено восстановление окна приложения из системного трея. |
||
| 208 | |||
| 209 | ## Исправления и стабильность |
||
| 210 | |||
| 211 | - Исправлена синхронизация каналов, участников и метаданных между несколькими устройствами. |
||
| 212 | - Восстановлена доставка уведомлений после длительного офлайна. |
||
| 213 | - Статус пользователя обновляется сразу после подключения. |
||
| 214 | - Исправлен учёт непрочитанных сообщений при переключении фокуса окна. |
||
| 215 | - Исключённые каналы сразу удаляются из интерфейса, а устаревшие события больше не удаляют канал после повторного вступления. |
||
| 216 | - Исправлены отображение закреплённых файлов и привязка вложений к исходному чату. |
||
| 217 | - Добавлена корректная обработка максимальной длины сообщений. |
||
| 218 | - Аватары профилей теперь обновляются в реальном времени. |
||
| 219 | - Улучшено восстановление личных чатов после выхода всех участников со всех устройств. |
||
| 220 | - При выходе устройство отзывается на сервере, чтобы не оставлять неактивные устройства и ключи. |
||
| 221 | |||
| 222 | ## Сервер и эксплуатация |
||
| 223 | |||
| 224 | - Добавлены Prometheus-метрики для HTTP, WebSocket, PostgreSQL, Redis и Go runtime. |
||
| 225 | - Подготовлены базовые правила мониторинга и алертов. |
||
| 226 | - Улучшена конфигурация TLS для файлового хранилища. |
||
| 227 | |||
| 228 | Итого: **40 коммитов и 178 изменённых файлов** в ветке `main`. |