Green Chat 0.2.4 — памятка бета-тестера¶
Спасибо, что участвуете в тестировании Green Chat. Эта памятка объясняет,
как подготовиться к бете, что особенно важно проверить в версии 0.2.4 и как
составить полезный баг-репорт.
Версии беты 0.2.x¶
Текущая версия — 0.2.4 (сборка 17 августа 2026). Памятка покрывает все
возможности линейки 0.2.x; полные списки изменений по версиям:
-
0.2.4 (17 августа 2026) — доступность личных
сообщений («коллеге всегда можно написать»), отмена модераторов в публичных
каналах и живое обновление состава, статусы присутствия на втором устройстве,
обнаружение расхождения MLS-эпох, камера на Android, сохранение файлов на
Android, iOS-клиент. Требует миграции 025/026/027 и обновления push relay
до сервера. -
0.2.3 (сборка 4 августа 2026) —
Android-клиент и уведомления на телефон, защита от расхождения MLS-эпох,
мобильные вложения и safe areas, приглашения в публичные каналы, исправления
композера и push relay. Требует миграции 023/024 и настроенный relay. -
0.2.2 (23 июля 2026) — уведомления, звук и
счётчики при свёрнутом или скрытом в tray окне; быстрое переподключение
после сна компьютера; исправления восстановления личных чатов. Серверных
изменений нет. -
0.2.1 (22 июля 2026) — надёжная доставка:
клиент сверяет состояние с сервером и догружает пропущенные сообщения;
восстановление личного чата после logout и повторного входа собеседника;
диагностический логglchat.log. Требует обновлённый сервер. -
0.2.0 (20 июля 2026) — роли и управление
участниками каналов, раздел «Треды», карточки профилей, сохранённые
сообщения, история загрузок, просмотрщик изображений и GIF, звуковые
уведомления, отметка вышедших со всех устройств пользователей.
Что изменилось после вашей прошлой сборки¶
Прошлая сборка, которую получали тестировщики, — 0.2.3 от 4 августа 2026
года. Всё перечисленное ниже для вас новое. Обратите внимание: сюда входят не
только работы 16–17 августа, но и две недели исправлений по вашим репортам от
5–14 августа, которые до сих пор ни в одну сборку не попадали — если вы
сообщали о баге в этот период и он «не чинился», проверять его нужно именно
сейчас.
Личные сообщения¶
- Ошибки
404 no key_packagesпри открытии DM больше не существует — написать
коллеге можно всегда, даже если он ещё ни разу не заходил. - Пока устройство собеседника не подключилось, чат открыт и поле ввода
доступно; сообщения ждут в очереди и уходят сами. Плашка честно об этом
предупреждает, отметка✓✓в этом состоянии не ставится.
Каналы, роли и участники¶
- Модераторов в публичных каналах больше нет: роль там ничего не давала.
Уже выданные роли снимает миграция027. - Owner публичного канала может выйти, не назначая преемника.
- Состав канала и роли обновляются у всех участников сразу, без перезапуска.
- Создание приватной группы не срывается из-за одного недобавленного участника.
Присутствие, доставка и MLS¶
- Статусы собеседников перестают «залипать» серыми и наконец сходятся на
втором устройстве. - Телефон в фоне честно показывается как «отошёл», затем «офлайн»; свой статус
при пропаже сети больше не остаётся «онлайн». - Открытый чат и открытая панель треда сами показывают сообщения, поднятые
фоновой сверкой, — без переключения канала и перезапуска. - Расхождение MLS-эпох обнаруживается в трёх новых ситуациях, включая самую
опасную: устройство молча не получает сообщения, а счётчик непрочитанных
честно показывает ноль.
Интерфейс и мобильные клиенты¶
- Автопрокрутка в панели треда (свой ответ больше не уходит под нижний край).
- Понятные сообщения об ошибке при действии без сети.
- Android: сохранение присланного файла, съёмка фото прямо из поля ввода,
новая иконка, убрана серая полоса справа от списка чатов. - Появился клиент для iOS (отдельная сборка, ставится по приглашению).
Обновление с 0.2.3 требует серверных миграций 025_last_resort_keypackages.sql,
026_dm_peer_pending.sql, 027_public_channel_no_moderators.sql и обновления
push relay раньше сервера.
Что проверить в первую очередь в 0.2.4¶
Это короткий список для тех, кто уже тестировал сборку 0.2.3 от 4 августа.
Полный набор сценариев — ниже, в разделе «Что особенно важно проверить».
-
Написать коллеге, который ещё ни разу не заходил. Заведите или
попросите завести новый аккаунт и, не открывая его, напишите ему в DM.
Чат должен открыться, поле ввода — работать, а над ним должна появиться
плашка «hasn't joined this conversation yet». Затем войдите этим аккаунтом:
отправленные сообщения должны дойти сами, без повторной отправки.
Любая техническая ошибка вместо диалога — важный баг. -
Публичный канал без модераторов. Убедитесь, что бейдж MODERATOR исчез,
выдать роль в публичном канале нельзя, а owner может выйти из канала, не
назначая преемника. -
Живое обновление состава. С одного устройства добавьте участника или
выдайте роль в приватном канале — у остальных список участников должен
обновиться без перезапуска приложения. -
Создание приватной группы с «трудным» участником. Соберите группу, где
один из приглашаемых давно не заходил. Канал должен создаться, форма —
закрыться, недостающие участники — подтянуться сами. -
Статус собеседника на втором устройстве. Привяжите второе устройство
(лучше телефон) и сразу, не дожидаясь, пока оно «прогреется», посмотрите
на статусы. Затем попросите собеседника отключить и включить сеть. Серая
точка у человека, от которого при этом приходят сообщения, — важный баг. -
Сообщение в открытый чат при плохой связи. Держите чат открытым,
ненадолго оборвите сеть у отправителя и верните её. Сообщение должно
появиться в самом открытом чате, а не только в счётчике и попапе. -
Ответ в треде. Откройте тред и отправьте ответ — он должен быть виден
сразу, без ручной прокрутки вниз. Отдельно проверьте, что чтение старой
истории треда не прерывается при приходе чужих ответов. -
Действие без сети. Отключите сеть и попробуйте, например, добавить
участника. Сообщение об ошибке должно быть человеческим и предупреждать,
что результат нужно проверить, а не показывать сырую техническую строку. -
Android: сохранение файла и камера. Сохраните присланный файл через
системный диалог — он должен сохраниться без ошибкиsave path. Снимите
фото кнопкой 📷 в поле ввода и отправьте; снимок не должен появиться в
галерее телефона. -
Долгая проверка на фоне (важнее всего). Просто поработайте день на всех
своих устройствах. Главный класс багов этого выпуска — «сообщения тихо
перестали приходить, при этом приложение выглядит нормально и счётчик
показывает ноль». Если вы обнаружили переписку, где вы явно пропустили
сообщения, — это репорт с приоритетом High, даже если вы не можете
воспроизвести.
Перед началом тестирования¶
- Установите версию 0.2.4 на все свои устройства. Старые клиенты
несовместимы с новой синхронизацией участников каналов и могут работать
некорректно. Исправления MLS этого выпуска работают между устройствами
только тогда, когда обновились все участники разговора. - Проверьте номер версии в Settings → Profile.
- По возможности подготовьте два тестовых аккаунта и два устройства для
одного из аккаунтов. Это позволит проверить доставку, роли и
мультиустройство. - Не используйте единственный рабочий аккаунт для сценариев с выходом из
системы: logout безвозвратно удаляет историю на текущем устройстве. - Бета-версия может содержать ошибки. Не отправляйте через неё данные,
потеря которых будет критичной.
Как устроено хранение сообщений¶
Green Chat — корпоративный мессенджер со сквозным шифрованием MLS. Сервер
хранит сообщения и файлы в зашифрованном виде и не располагает ключами для
их чтения.
Из этого следуют важные ограничения:
- история расшифровывается и хранится на устройствах пользователя;
- сервер и служба поддержки не могут прочитать переписку или восстановить
уничтоженные ключи; - выход из аккаунта очищает локальную историю и ключи на этом устройстве;
- если выйти со всех устройств, прежнюю историю восстановить будет нельзя;
- для поиска ошибки особенно важны точное время события, участники, канал и
последовательность действий.
Что особенно важно проверить в бете 0.2.x¶
1. Обычные сообщения и восстановление соединения (изменено в 0.2.1–0.2.4)¶
- Отправьте сообщения в канал и личный чат.
- Проверьте доставку текста, эмодзи, форматирования и ответов в треде.
- Полностью отключите сеть на одном из устройств на несколько минут, затем
включите её обратно. - Убедитесь, что клиент подключился самостоятельно и получил сообщения,
отправленные во время офлайна. - Проверьте, что статус online/offline обновляется без повторного открытия
канала.
Сообщение со статусом sent, которое после восстановления соединения так и
не появилось у получателя, считается важным багом.
Для проверки защиты 0.2.3 одновременно отправляйте сообщения и меняйте состав
одного канала с двух устройств. Постоянная ошибка расшифровки, бесконечная
синхронизация или невозможность продолжить отправку после переподключения —
важный баг.
Отдельно проверьте новое в 0.2.4: держите чат открытым, пока сообщение
догружается фоновой сверкой (например, оборвав и вернув сеть у отправителя).
Сообщение должно появиться в самом открытом чате и в открытой панели треда, а
не только в счётчике и всплывающем уведомлении.
Самый опасный класс багов этого выпуска — тихая остановка доставки:
приложение выглядит рабочим, ошибок нет, счётчик непрочитанных показывает ноль,
а сообщения при этом не приходят. Если вы заметили, что пропустили сообщения в
какой-то переписке, заводите репорт с приоритетом High даже без сценария
воспроизведения — укажите канал, обе стороны и примерное время, когда доставка
ещё работала. Группа, надолго застрявшая на баннере «Restoring secure
access…», — тот же класс проблемы.
2. Треды (новое в 0.2.0)¶
- Создайте несколько тредов в разных каналах.
- Откройте раздел Threads и проверьте сортировку по последней активности.
- Переключите фильтры All и Unread.
- Нажмите на тред в списке и убедитесь, что открылись правильный канал и
исходное сообщение. - Ответьте с
@mention, добавьте вложение или перетащите файл в область
ответа. -
Новое в 0.2.4: отправьте ответ в открытом треде — он должен сразу
оказаться в поле зрения, без ручной прокрутки вниз. Затем прокрутите тред
к старым ответам и попросите другого тестера ответить: чужой ответ не
должен перебивать чтение и утаскивать вас вниз. - При наличии второго устройства проверьте синхронизацию прочитанности
тредов.
3. Роли и участники каналов (новое в 0.2.0, изменено в 0.2.4)¶
Для полноценной проверки нужны минимум три аккаунта: владелец, модератор и
обычный участник.
Важное изменение 0.2.4: модераторов в публичных каналах больше нет. Роль
там ничего не давала — исключать участников в публичном канале запрещено, а
приглашать может любой. Проверьте отдельно:
- в публичном канале бейджа MODERATOR нет ни у кого, даже если роль выдавалась
раньше, и выдать её заново нельзя; - owner публичного канала может выйти, не назначая преемника: владение
переходит самому раннему участнику автоматически; - в приватном канале роль moderator работает как прежде.
Ещё одно изменение 0.2.4 — живое обновление: выдача роли или добавление
участника с одного устройства должны быть видны остальным сразу, без
перезапуска приложения. Список участников, который сходится только после
релоада, — баг.
- Создайте приватный канал и пригласите двух участников.
- Убедитесь, что создатель отмечен как owner.
- Назначьте одного участника модератором и затем снимите роль.
- Проверьте, что owner может приглашать и исключать участников.
- Проверьте, что moderator может управлять обычными участниками, но не
владельцем или другим модератором. - Исключите обычного участника: канал должен сразу исчезнуть у него из
интерфейса, а новые сообщения не должны быть доступны. - Повторно пригласите участника и убедитесь, что устаревшее событие удаления
не убирает канал снова. - Обычным участником публичного канала пригласите нового пользователя через
Add member. Приглашённый должен получить канал без доступа к сообщениям,
отправленным до его вступления.
Дополнительно можно проверить выход из канала:
- обычный участник и модератор могут выйти самостоятельно;
- в приватном канале owner с другими участниками должен сначала назначить
модератора, и при выходе владение переходит именно ему; - в публичном канале (изменено в 0.2.4) owner выходит без назначения:
владение переходит самому раннему активному участнику; - из DM выйти нельзя, но его можно скрыть через Remove for me;
- в публичный канал может приглашать любой участник, но исключение участника
недоступно, поскольку он может вступить обратно самостоятельно.
4. Профили (новое в 0.2.0)¶
- Заполните аватар, должность, описание и рабочий телефон.
- Откройте карточку профиля из сообщения и панели участников.
- Проверьте копирование email и телефона.
- Измените аватар или данные профиля на одном устройстве и убедитесь, что
изменения появились у другого пользователя без перезапуска приложения.
Поля профиля видны всем пользователям организации — это справочная информация,
а не приватная часть переписки.
5. Поиск и действия с сообщениями¶
- Найдите старое сообщение через поиск и перейдите к нему.
- Убедитесь, что чат прокрутился к правильному сообщению и выделил его.
- Проверьте доступные контекстные действия: ответ, редактирование, сохранение,
закрепление и удаление там, где они разрешены. - Отредактируйте длинное сообщение и ответ в треде: поле ввода должно
увеличиваться вместе с текстом. - Попробуйте превысить допустимую длину сообщения. Клиент должен показать
понятное ограничение, а не зависнуть или молча потерять текст.
Поиск работает по локально доступной истории устройства. Отсутствие сообщения,
которого никогда не было на этом устройстве, само по себе не является багом.
6. Файлы, изображения и GIF (расширено в 0.2.0, изменено в 0.2.4)¶
- выберите файл через кнопку вложения и убедитесь, что он сначала появился в
области подготовки к отправке; - удалите подготовленный файл, не отправляя сообщение;
- перетащите файлы в основной чат и отдельно в открытый тред;
- вставьте изображение из буфера обмена;
- отправьте несколько файлов и проверьте, что они остались в исходном чате,
даже если во время загрузки переключиться на другой канал; - откройте изображение во встроенном просмотрщике;
- проверьте воспроизведение GIF и отсутствие чрезмерной нагрузки интерфейса;
- удалите собственное сообщение с вложением и убедитесь, что файл больше не
доступен из чата; - скачайте файл и проверьте его содержимое после расшифровки.
- на Android выберите документ или изображение системным picker и отправьте
его сначала в чат, затем в открытый тред. -
новое в 0.2.4, Android: сохраните присланный файл через системный
диалог выбора папки и откройте его штатным приложением. Раньше это
заканчивалось ошибкойsave path: …; -
новое в 0.2.4, Android: снимите фото кнопкой 📷 в поле ввода и отправьте
его. Снимок не должен появиться в галерее телефона, а отмена съёмки не должна
оставлять пустое вложение; -
новое в 0.2.4, Windows: после выхода компьютера из сна откройте
изображение во встроенном просмотрщике. Раздвоенная картинка или мигающие
полосы прокрутки — баг.
Ошибки загрузки, повреждённый скачанный файл, вложение в неправильном канале
или зависшая подготовка файла считаются багами.
7. Сохранённые сообщения и загрузки (новое в 0.2.0)¶
- Сохраните сообщения из разных каналов через контекстное меню.
- Откройте раздел Saved, перейдите из него к исходному сообщению и удалите
закладку. - При наличии второго устройства проверьте, что список сохранённых сообщений
синхронизировался. - Скачайте несколько файлов и откройте раздел Downloads.
- Проверьте действия Open file, Show in folder и
Remove from history.
Сохранённые сообщения синхронизируются между устройствами и видны только
владельцу аккаунта. История загрузок хранится только на конкретном устройстве.
Удаление записи из Downloads не удаляет сам файл с диска. Файлы, скачанные до
установки 0.2.0, в историю автоматически не добавляются.
8. Уведомления и звук (изменено в 0.2.2, 0.2.3 и 0.2.4)¶
- Перед проверкой убедитесь, что в Settings → Notifications выключен
Pause all notifications: включённый тумблер намеренно отключает попапы
и звук, при этом сообщения и счётчики продолжают приходить. Кнопка
Send test проверяет только доставку до операционной системы и работает
даже при включённой паузе. - В Settings → Notifications нажмите Send test.
- Оставьте окно приложения без фокуса и попросите другого тестера отправить
DM — должен появиться системный попап и прозвучать звук. - Полностью сверните окно или скройте его в tray и попросите отправить ещё
один DM: попап и звук должны прийти, не открывая окно, а после открытия
счётчики и сами сообщения должны уже быть на месте без ручного обновления. - Проверьте
@mentionв канале. Обычное сообщение без упоминания по умолчанию
не показывает попап. - Отключите звук в настройках и убедитесь, что новые сообщения приходят без
звукового сигнала. - Проверьте DND, mute канала и quiet hours.
- Полностью закройте приложение через tray → Quit, отправьте на аккаунт
DM и проверьте email-уведомление, если SMTP включён на сервере.
Попапы показывает запущенное приложение. После полного выхода через Quit
desktop-клиент не может показать системное уведомление; в этом случае для DM
может прийти только email.
На Android 13+ разрешите уведомления при первом запуске. Сверните приложение,
отправьте DM с другого аккаунта и проверьте push, догрузку сообщения и переход
по тапу. Push требует Google Play services и не приходит после принудительной
остановки приложения через системные настройки.
На macOS в 0.2.4 уведомления перешли на системный механизм: попап должен
приходить от имени Green Chat с правильной иконкой, а само приложение —
появиться в списке «Системные настройки → Уведомления». Попап от имени
Script Editor, отсутствие приложения в этом списке или молчание при
разрешённых уведомлениях ОС — баг.
9. Несколько устройств (изменено в 0.2.4)¶
- Войдите на второе устройство по паролю или привяжите его по QR-коду.
- Создайте приватный канал и пригласите пользователя с несколькими активными
устройствами. - Убедитесь, что канал, его название и новые сообщения появились на всех
устройствах приглашённого. - Проверьте синхронизацию прочитанности, черновиков, сохранённых сообщений и
скрытых чатов. - Измените аватар и убедитесь, что он обновился на других клиентах.
- Закройте одно устройство, продолжите работу на втором, затем верните первое
в сеть и проверьте восстановление состояния. -
Новое в 0.2.4 — статусы на свежепривязанном устройстве. Сразу после
привязки второго устройства, не дожидаясь пока оно «прогреется», посмотрите
на точки присутствия собеседников и попросите кого-нибудь отключить и
включить сеть. Раньше новое устройство не получало обновлений присутствия,
пока восстановление членства не дойдёт до каждого общего канала: сообщения
приходили, а точка оставалась серой сколь угодно долго. Серый статус у
человека, от которого прямо сейчас приходят сообщения, — баг.
10. Android 0.2.4¶
- Установите universal APK на Android 7 или новее и проверьте, что приложение
называется Green Chat и показывает новую иконку. - Проверьте вход по паролю, привязку по QR и ручной ввод кода.
- Откройте клавиатуру в чате и треде: поле ввода и нижние кнопки должны
оставаться видимыми. - На устройстве с вырезом или жестовой навигацией проверьте верхнюю навигацию,
боковые панели, Threads и Devices. Список чатов должен занимать всю ширину
экрана — серой полосы справа быть не должно. - Выберите документ и изображение системным picker, отправьте их в чат и тред,
затем скачайте и откройте на втором устройстве. -
Новое в 0.2.4: сохраните присланный файл через системный диалог выбора
папки. Ошибкаsave path: …— баг. В истории загрузок на Android действия
Open file и Show in folder намеренно скрыты: система не даёт клиенту
пути к сохранённому документу. -
Новое в 0.2.4: снимите фото кнопкой 📷 в поле ввода и отправьте его.
Проверьте отдельно отмену съёмки и отказ в разрешении на камеру — оба случая
должны давать понятное сообщение, а не пустое вложение или зависание. На
устройстве без камеры кнопки быть не должно. - Сверните приложение, получите push и откройте сообщение по тапу без ручного
обновления. - Заблокируйте экран телефона и попросите собеседника посмотреть ваш статус:
через некоторое время вы должны стать «отошёл», затем «офлайн», а не
оставаться «онлайн».
Удаление Android-приложения удаляет локальную историю и ключи этого устройства.
Не переустанавливайте его во время сценария, если на аккаунте нет другого
активного устройства.
11. Выход со всех устройств (новое в 0.2.0)¶
Этот сценарий выполняйте только на специально созданном тестовом аккаунте.
Перед выходом убедитесь, что клиент подключён к серверу.
- Выйдите из аккаунта на последнем активном устройстве и подтвердите
предупреждение об удалении истории. - У другого пользователя аккаунт должен получить отметку Logged out в
списке DM, профиле, панели участников и выборе пользователя. - В существующем DM история должна остаться читаемой, но поле отправки должно
замениться предупреждением. - Создание нового DM с вышедшим пользователем должно быть заблокировано. Это
не то же самое, что новый коллега, который ещё ни разу не заходил (§12):
вышедший потерял ключи безвозвратно и писать ему действительно нельзя, а
новому — можно всегда. - Отправьте в канал сообщение с его персональным
@mention: сообщение
должно отправиться остальным участникам, а автор должен увидеть
предупреждение о недоставке упомянутому пользователю. - Снова войдите этим аккаунтом. Отметка Logged out должна исчезнуть у других
пользователей.
Повторный вход создаёт новое активное устройство, но не возвращает историю,
уничтоженную при logout.
12. Письмо коллеге, который ещё не заходил (новое в 0.2.4)¶
Главное изменение выпуска. До 0.2.4 попытка написать новому сотруднику
заканчивалась красной ошибкой 404 no key_packages — диалог не открывался
вообще, и написать было нельзя, пока коллега не напишет первым.
Для проверки нужен аккаунт, в который ещё ни разу не входили ни на одном
устройстве. Попросите администратора завести его и не открывайте.
- Найдите этого человека в списке пользователей и откройте с ним DM. Диалог
должен открыться, поле ввода — быть доступным. - Над полем ввода должна появиться плашка «Имя hasn't joined this
conversation yet — your messages will be sent automatically once they sign
in». - Отправьте несколько сообщений. Они должны приниматься, а отметка доставки
рядом с ними — оставаться честной:✓✓в этом состоянии не ставится. - Войдите этим аккаунтом на любом устройстве.
- Отправленные ранее сообщения должны дойти сами, без повторной отправки с
вашей стороны, а плашка — исчезнуть.
Дополнительно стоит проверить сценарий «человек в отпуске»: аккаунт, который
давно не выходил в сеть, но раньше работал. Написать ему тоже должно быть
можно.
Любая техническая ошибка вместо диалога, навсегда застрявшая плашка после входа
собеседника или потерянные сообщения из очереди — важный баг с приоритетом
High.
Что обязательно считать багом¶
- Падение, зависание или бесконечная загрузка приложения.
- Потеря уже отправленного сообщения или его появление в неправильном чате.
- Ошибка расшифровки, нечитаемый текст или повреждённый файл.
- Получение доступа к чужому каналу, профилю или данным без разрешения.
- Возможность обычного участника выполнить действие owner/moderator.
- Доступ исключённого участника к новым сообщениям приватного канала.
- Расхождение каналов, ролей, сохранённых сообщений или прочитанности между
устройствами, которое не исправляется после переподключения. - Отсутствие DM или
@mention-уведомления при выполненных условиях доставки. - Неправильный адресат, канал или тред у вложения.
-
Тихо прекратившаяся доставка: сообщения перестали приходить, при этом
приложение выглядит рабочим, ошибок нет, а счётчик непрочитанных показывает
ноль. Обнаруживается обычно постфактум — «оказалось, мне писали». - Группа, надолго застрявшая на баннере «Restoring secure access…».
- Техническая ошибка вместо открытого диалога при попытке написать коллеге.
- Неработающая кнопка, обрезанный интерфейс или нечитаемый текст, особенно в
тёмной теме.
Проблемы безопасности, потерю данных и воспроизводимые падения отмечайте
приоритетом High.
Известные ограничения беты¶
-
Вход обычно доступен только по приглашению; вкладки создания свободного
аккаунта может не быть. -
Автоматического обновления нет — новую версию нужно устанавливать вручную.
-
Windows может показать SmartScreen с предупреждением о неизвестном
издателе. -
Начиная с 0.2.4 релизные macOS-сборки подписаны Developer ID — Gatekeeper
не должен их блокировать. Если вам досталась неподписанная сборка и она
заблокирована, после переноса приложения в/Applicationsвыполните:xattr -cr "/Applications/Green Chat.app" -
Атрибуция попапов от имени Script Editor на macOS исправлена в 0.2.4 для
собранного приложения. Она остаётся только при запуске из исходников через
pnpm tauri dev— этому режиму нечего предъявить системе как приложение. -
На части серверов отправка файлов и email-уведомления могут быть отключены.
-
Числовой бейдж учитывает DM и упоминания; обычное непрочитанное сообщение в
канале отображается точкой. -
Сообщение
SPKI pin mismatchпосле плановой смены серверного ключа требует
повторного входа. Клиент намеренно не принимает новый ключ молча. -
Android APK 0.2.4 остаётся debug-сборкой: релизного ключа подписи у беты нет,
в Play она не публикуется, ставится вручную и может вызвать предупреждение
Play Protect о неизвестном разработчике. -
Фоновые Android-уведомления требуют Google Play services и настроенный push
relay. На HMS/чистом AOSP и после Force stop сообщения появятся только после
ручного открытия приложения. -
Сообщения, ждущие в очереди коллеге, который ещё не вошёл (§12), хранятся
на отправляющем устройстве. Logout на нём до входа получателя эту очередь
уничтожает. -
Резервный ключ приглашения, который делает DM доступными всегда, немного
ослабляет forward secrecy первого приглашающего конверта — до первого
изменения в группе. Содержимое сообщений это не затрагивает; разбор принятой
цены — в ADR-0028. -
iOS-сборка распространяется отдельно и требует приглашения в TestFlight;
минимальная версия — iOS 15.0.
Если поведение не перечислено здесь и выглядит неправильным, лучше отправить
репорт.
Полный changelog всех версий 0.2.x¶
Ниже release notes приведены полностью, от текущей версии к самой ранней.
Отдельные файлы по ссылкам в начале памятки содержат тот же текст.
Green Chat 0.2.4 — Beta Update¶
Дата сборки: 17 августа 2026 года.
Предыдущая сборка, которую получали тестировщики, — 0.2.3 от 4 августа 2026
года. В 0.2.4 вошли не только работы по iOS от 16–17 августа, но и две недели
исправлений по бета-репортам (5–14 августа), которые до сих пор ни в одну
сборку не попадали.
Личные сообщения: «коллеге всегда можно написать»¶
Бета-репорт 5 августа: новый пользователь открывал DM с коллегой и вместо
диалога получал красный текст 404 no key_packages — написать было нельзя
вообще. Работало только в обратную сторону, если коллега писал первым.
-
Экран с этой ошибкой больше не существует. DM открывается всегда, поле
ввода доступно всегда. - Если устройство собеседника ещё ни разу не подключалось, над полем ввода
появляется плашка «hasn't joined this conversation yet», а сообщения ждут в
локальной очереди и уходят сами, как только собеседник войдёт. Отметка✓✓
в этом состоянии не ставится. - Устройство заливает ключи для приглашений сразу при регистрации, привязке по
QR и входе по паролю, а пополняет их при каждом подключении и раз в 10 минут
вместо часа. - У каждого устройства появился постоянный резервный ключ приглашения, поэтому
«пул закончился» перестаёт быть тупиком даже у человека в отпуске. - Неудачные попытки приглашения больше не сжигают ключи навсегда.
Подробности — ADR-0028.
Требуются миграции 025_last_resort_keypackages.sql и 026_dm_peer_pending.sql.
Роли, состав каналов и создание группы¶
-
Модераторов в публичных каналах больше нет — роль там ничего не давала.
Уже выданные роли снимает миграция027_public_channel_no_moderators.sql. - Owner публичного канала может выйти, не назначая преемника: владение
переходит самому раннему активному участнику. - Список участников обновляется сразу, без перезапуска приложения.
- Создание приватной группы не срывается целиком из-за одного участника,
которого не удалось добавить. - Метки «logged out» и «hasn't signed in yet» разведены.
Статус присутствия¶
- Телефон с заблокированным экраном больше не показывается как «онлайн»:
в фоне — «отошёл», через 45 секунд — «офлайн». Побочный эффект — экономия
батареи. - Статус собеседника перестаёт «залипать» серым после потери связи или фона.
- Свой статус при пропаже сети больше не остаётся «онлайн»; ручной статус при
этом не сбрасывается. -
Статусы наконец сходятся на втором устройстве: свежепривязанный телефон
раньше не получал обновлений присутствия вообще, пока восстановление членства
не дойдёт до каждого общего канала.
Восстановление MLS и расхождение эпох¶
- Форк эпох обнаруживается после расхождения номеров эпох и на историческом
пути чтения — устройство само запрашивает замену листа вместо вечного
«Failed to load / Retry». - Нерасшифровываемый коммит следующей эпохи и сообщение из эпохи впереди
локальной теперь тоже считаются доказательством форка. Это закрывает
сценарий, при котором устройство молча не получало сообщения, а счётчик
непрочитанных честно показывал ноль. - Устройство выбирается из ситуации, когда замена листа построена на ключе,
которого у него уже нет. - После замены листа устройство не зацикливается на сообщениях, отправленных
до его переприглашения: они помечаются недоступными по дизайну. - Ремонтирующее устройство пересылает имя приватной группы и после
замены-ремонта. - Группа в состоянии восстановления показывает баннер «Restoring secure
access…» вместо красной крипто-ошибки; отправка на это время блокируется.
Desktop и Android — по бета-репортам¶
-
Открытая переписка обновляется сама: раньше фоновая сверка поднимала
сообщение и показывала попап, а в самом открытом чате его не было до
переключения канала. -
Автопрокрутка в треде (репорт №48): свой отправленный ответ больше не
уходит под нижний край, чтение истории при этом не прерывается. - Понятные ошибки без сети (репорт №49) вместо сырых технических строк.
-
Сохранение присланного файла на Android (репорт №57): ошибки
save path: …больше нет. -
Просмотрщик изображений после выхода из сна на Windows больше не мигает
двумя раскладками. - Убрана серая полоса справа от списка чатов (№46), обновлена иконка
приложения на Android (№45).
Камера на Android¶
Кнопка 📷 в поле ввода снимает фото и сразу прикладывает его к сообщению
(пожелание №56). Снимок не попадает в галерею телефона. Кнопка появляется
только на устройствах с камерой.
iOS-клиент (новое)¶
- Первая сборка на устройство и симулятор: вход, каналы, DM, треды, реакции,
файлы — весь функционал десктопа в мобильной оболочке. - Секреты в Keychain, данные в App-Group-контейнере.
- Камера и системный пикер фотографий.
- Push-уведомления с расшифрованным текстом: Notification Service Extension
поднимает MLS-состояние в память, подписанно забирает новые сообщения с
вашего сервера и показывает «отправитель / канал / текст» плюс точный бейдж;
ничего не сохраняет. Центральный push relay по-прежнему не видит ни
идентификаторов беседы, ни шифртекста. При любой неудаче баннер остаётся
generic «New message» — это штатный fallback. - Устранена причина падений у всех TestFlight-тестировщиков при сворачивании
приложения; размер пакета уменьшен с 186 МБ до 18,6 МБ; минимальная версия —
iOS 15.0.
macOS¶
- Системные уведомления перешли на штатный механизм: правильные имя и иконка,
приложение появляется в «Системные настройки → Уведомления», отказ и ошибки
доставки видны в диагностике Send test. Атрибуция от имени
Script Editor осталась только для запуска из исходников. - Релизные сборки подписываются Developer ID с hardened runtime.
- Иконка приложения приведена к нативной форме macOS.
Мобильный интерфейс¶
- Список чатов занимает всю ширину экрана.
- Просмотрщик изображений и попапы не наезжают на статус-бар и home-индикатор.
- Реакция на сообщение с картинкой не «мигает» превью.
- Корень треда, отправленный до подключения устройства, помечается «Sent before
this device joined» вместо сырой строки.
Деплой¶
-
Сервер и push relay обязательны к обновлению. Протокол relay получил поле
kind(ADR-0027 §1); агрегатный snapshot присутствияGET /v1/presence
чинит зависшие статусы. -
Порядок строгий: сначала
glchat-push, потомglchat-server. Старый
relay отклоняет запросы нового сервера — пока relay не обновлён, пуши не
работают ни на одной платформе. - Новые миграции:
025_last_resort_keypackages.sql,
026_dm_peer_pending.sql,027_public_channel_no_moderators.sql. - Клиенты обновить везде: исправления MLS работают между устройствами только
при обновлении всех участников.
Границы приватности не менялись.
Green Chat 0.2.3 — Beta Update¶
Дата первой Android-сборки: 30 июля 2026 года. Последняя выпущенная сборка
0.2.3: 4 августа 2026 года.
Версия 0.2.3 добавляет мобильную сборку (Android) и уведомления на телефон.
В актуальную сборку также вошли исправления Android, защиты от расхождения
MLS-эпох, управления публичными каналами, desktop-композера и push relay.
Android-сборка экспериментальная: это debug-APK, он не подписан релизным
ключом, не публикуется в Play и ставится вручную.
Изменения актуальной сборки от 4 августа¶
Надёжность шифрования и доставки¶
- Клиент больше не применяет локальный MLS Commit до подтверждения сервера.
Это предотвращает расхождение криптографических веток при одновременных
изменениях состава группы. - Добавлено автоматическое восстановление устройства, уже попавшего в такую
ветку: при ошибке расшифровки текущей эпохи здоровый участник заменяет его
MLS-листину, а клиент принимает replacement Welcome и продолжает доставку. - Расшифрованная локальная история при восстановлении сохраняется. Pending
MLS-состояние и исходящий запрос сохраняются атомарно, поэтому потерянный
HTTP-ответ или перезапуск не создают второй отличный Commit. - Серверу требуется миграция
024_membership_recovery.sql.
Android¶
- Интерфейс учитывает вырезы экрана, status bar, навигационную панель и
виртуальную клавиатуру. - Выбор файла использует нативный Android picker; документы и изображения
можно прикреплять к обычным сообщениям и ответам в тредах. - В launcher и системных настройках отображается имя Green Chat, системные
push-строки приведены к английской локализации. - Перед упаковкой удаляется старый universal APK/AAB, чтобы прерванная
инкрементальная сборка не раздувала новый пакет.
Каналы и интерфейс¶
- Любой активный участник публичного канала может пригласить нового
пользователя через Add member. Исключение участников публичного канала
по-прежнему запрещено. - Иконки действий в desktop-композере приведены к единому стилю.
- Emoji picker больше не обрезается границами поля ввода.
Push relay и эксплуатация¶
- Relay корректно распознаёт реальный ответ FCM
UNREGISTEREDи удаляет
недействительные Firebase installation IDs. - Bootstrap dev push-конфигурации останавливается при расхождении секрета в
tenants.jsonи переменной окружения. - Локальный chat server больше не зависит по healthcheck от push relay и может
работать без фоновых мобильных уведомлений.
Android-клиент¶
- Приложение собрано из того же кода, что и desktop (Tauri 2 mobile): те же
MLS-шифрование, те же экраны, та же логика доставки. Отдельного мобильного
клиента с собственной криптографией не появилось. - Приватный ключ устройства и ключ локальной базы хранятся в AndroidKeyStore
(аппаратно, если устройство поддерживает); удаление приложения удаляет и их. - Линковка устройства сканированием QR-кода. Если камера недоступна — работает
ручной ввод кода. - Интерфейс перестроен под телефон: список чатов и переписка — один стек с
кнопкой «назад», панели тредов, участников и сохранённых открываются на весь
экран, учитываются вырезы экрана и виртуальная клавиатура.
Уведомления на телефон¶
- Приходят через Firebase Cloud Messaging. Содержимое сообщения в push не
передаётся — приходит только сигнал «есть новое», текст «New message»
формирует само приложение на устройстве. - Push будит приложение и запускает догрузку, поэтому при открытии всё уже на
месте. - Уведомление приходит только на устройства без активного соединения — если
телефон онлайн, сообщение и так придёт по WebSocket. - На Android 13+ при первом запуске приложение спросит разрешение на
уведомления. Отказ отключает попапы, сообщения продолжают приходить. - Требуются Google Play services. На устройствах без них (HMS, чистый AOSP)
фоновых уведомлений не будет — ограничение транспорта, не клиента. - Push не приходит, если приложение принудительно остановлено через
«Настройки → Приложения → Остановить»: система блокирует доставку до
следующего запуска вручную.
Уведомления не заменяют доставку: если push потерялся, сообщения всё равно
догружаются при открытии приложения.
Сервер¶
Требуется обновление сервера и миграции 023_push_installations.sql и
024_membership_recovery.sql.
Дополнительно администратору нужно настроить push relay — без него мобильный
клиент работает полностью, но фоновых уведомлений не будет
(см. docs/push-relay-deployment.md и шаг 4b
бета-чеклиста).
Границы приватности не изменились: сервер по-прежнему не видит текст
сообщений и ключи. Появился один новый элемент — центральный push relay
получает идентификатор установки приложения (не аккаунт и не сообщение) и
время отправки; подробности и принятые риски описаны в
ADR-0026.
Обновление¶
- Администратор обновляет сервер и применяет миграции 023 и 024.
- Desktop: установите 0.2.3 на все устройства.
- Android: установите APK, войдите или привяжите устройство по QR.
Что особенно важно проверить на телефоне:
- приходит ли уведомление, когда приложение свёрнуто, а не открыто;
- открываются ли после тапа именно новые сообщения — без ручного обновления;
- работает ли одновременно телефон и десктоп на одном аккаунте (счётчики
непрочитанных не должны расходиться); - привязка устройства по QR-коду;
- отправка и открытие вложений с телефона.
Green Chat Desktop 0.2.2 — Beta Update¶
Дата выпуска: 23 июля 2026 года.
Версия 0.2.2 закрывает бета-репорт «клиент в фоне на Windows молчит и не
обновляется»: свёрнутое или скрытое в tray окно не получало ни системного
уведомления, ни счётчика непрочитанных, а интерфейс показывал новые сообщения
только после ручного обновления страницы (Ctrl+R).
Обновляется только desktop-клиент — серверных изменений в этом выпуске
нет (см. раздел «Сервер»).
Доставка и уведомления при свёрнутом окне¶
- Фоновая сверка с сервером перенесена из интерфейсного слоя в нативный
Rust-процесс и выполняется каждые 10 секунд. Windows может приостанавливать
таймеры и сам JS-контекст WebView2 у скрытого окна — теперь это не
останавливает ни доставку сообщений, ни уведомления. - Системное уведомление для сообщения, пришедшего в свёрнутое/фоновое окно,
создаётся непосредственно нативным процессом, до и независимо от
интерфейсного слоя. Открывать окно, чтобы получить попап, не требуется.
Настройки Pause all notifications, DND, mute, quiet hours и режим
уведомлений канала учитываются так же, как раньше. - Возврат окна из фона, minimize или tray запускает немедленную сверку —
счётчики и новые сообщения появляются сами, ручной Reload больше не нужен. - Потерянный единичный WebSocket-кадр или half-open соединение больше не
оставляют клиент без счётчика, звука и попапа: любое расхождение с сервером
устраняется ближайшей 10-секундной сверкой. - После выхода компьютера из сна клиент больше не ждёт до 90 секунд, считая
старый WebSocket подключённым: resume-watchdog обнаруживает паузу системных
часов и переподключается за несколько секунд, сразу забирая пропущенные
сообщения и восстанавливая presence. - Сводное уведомление «N new messages» о сообщениях, восстановленных фоновой
сверкой, показывается даже если окно уже получило фокус (например, сразу
после открытия крышки ноутбука) и не дублируется при открытии окна после
нативного уведомления. - Если звук сообщений включён, уведомления сопровождаются нативным системным
звуком; серия подряд идущих сообщений даёт один звук, а не очередь сигналов. - Определение «окно в фокусе» для подавления попапов использует состояние
самого интерфейса, а не системный сигнал окна — на Windows системный сигнал
недостоверен и мог как показывать попапы поверх активного окна, так и
глушить их у скрытого.
Личные сообщения¶
- Если KeyPackage нового устройства ещё загружается, повторная попытка
восстановления membership выполняется через несколько секунд с постепенным
увеличением интервала. Чат больше не зависает в состоянииre-syncing
из-за двухминутного ожидания, которое при каждом перезапуске начиналось
заново. - Исправлена ложная блокировка отправки после password login или привязки
устройства: старые клиенты создавали пустую MLS BasicCredential, поэтому
два реальных листа ошибочно считались одним пользователем. Готовность
личного чата теперь проверяется по фактическому MLS roster, а новые
устройства сохраняют credential с серверным username.
Сервер¶
Серверный код в 0.2.2 не менялся. Требования совпадают с 0.2.1: сервер должен
быть обновлён до серверной версии выпуска 0.2.1 (endpoints состояния
синхронизации и миграция 022_membership_repair_claims.sql). Со старым
сервером клиент продолжает работать в режиме прежней полной догрузки, но
10-секундная сверка и восстановление membership недоступны.
Как и раньше, содержимое сообщений, ключи и настройки уведомлений не
передаются серверу в открытом виде; текст системных уведомлений формируется
локально и никогда не покидает устройство.
Обновление¶
Установите Green Chat Desktop 0.2.2 на все свои устройства.
Особенно важно повторно проверить:
- сообщения и
@mentionв свёрнутое или скрытое в tray окно: системный
попап и звук должны прийти без открытия окна, а после открытия счётчики и
сообщения должны быть уже на месте — без Ctrl+R; - перед проверкой уведомлений убедитесь, что в Settings → Notifications
выключен Pause all notifications — включённый тумблер отключает попапы
и звук намеренно, при этом сообщения и счётчики продолжают приходить; - получение сообщений после сна/пробуждения компьютера;
- личный чат после logout и повторного входа одного из участников;
- одновременную работу двух устройств одного аккаунта.
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.
Особенно важно повторно проверить:
- получение сообщений после временного отключения сети;
- непрочитанные, звук и системный попап после фоновой догрузки;
- личный чат после logout и повторного входа одного из участников;
- одновременную работу двух устройств одного аккаунта;
- наличие
glchat.logпосле перезапуска desktop-приложения.
glchat Desktop 0.2.0 — Beta Update¶
Изменения с 9 по 20 июля 2026 года.
Новые возможности¶
- Добавлены роли владельца и модератора канала, управление участниками, выход из канала и локальное скрытие чатов.
- Появились карточки профилей с аватаром, должностью, описанием и контактами.
- Добавлен единый раздел «Треды» со всеми обсуждениями и фильтром непрочитанных.
- Сообщения теперь можно сохранять в личные закладки с синхронизацией между устройствами.
- Добавлена локальная история загрузок: файл можно открыть, показать в папке или убрать из списка.
- Изображения открываются во встроенном просмотрщике, добавлена безопасная анимация GIF.
- Изображения из буфера обмена можно вставлять прямо в сообщение.
- Добавлены звуковые уведомления о новых сообщениях и настройка звука.
- Пользователи, вышедшие со всех устройств, теперь отмечаются в интерфейсе. Перед отправкой им личного сообщения или упоминания показывается предупреждение.
Улучшения интерфейса¶
- Добавлены контекстные действия для сообщений.
- Улучшены редакторы сообщений и ответов в тредах.
- Добавлены упоминания пользователей в ответах треда.
- Улучшена работа с вложениями: предварительная подготовка, drag-and-drop в треды и удаление отправленных файлов.
- Поиск теперь прокручивает чат до найденного сообщения и ограничивает слишком тяжёлые запросы.
- Улучшены индикаторы присутствия, подсчёт участников и расположение боковых панелей.
- После отправки сообщения чат автоматически прокручивается к нему.
- Исправлено восстановление окна приложения из системного трея.
Исправления и стабильность¶
- Исправлена синхронизация каналов, участников и метаданных между несколькими устройствами.
- Восстановлена доставка уведомлений после длительного офлайна.
- Статус пользователя обновляется сразу после подключения.
- Исправлен учёт непрочитанных сообщений при переключении фокуса окна.
- Исключённые каналы сразу удаляются из интерфейса, а устаревшие события больше не удаляют канал после повторного вступления.
- Исправлены отображение закреплённых файлов и привязка вложений к исходному чату.
- Добавлена корректная обработка максимальной длины сообщений.
- Аватары профилей теперь обновляются в реальном времени.
- Улучшено восстановление личных чатов после выхода всех участников со всех устройств.
- При выходе устройство отзывается на сервере, чтобы не оставлять неактивные устройства и ключи.
Сервер и эксплуатация¶
- Добавлены Prometheus-метрики для HTTP, WebSocket, PostgreSQL, Redis и Go runtime.
- Подготовлены базовые правила мониторинга и алертов.
- Улучшена конфигурация TLS для файлового хранилища.
Итого: 40 коммитов и 178 изменённых файлов в ветке main.
Как оставить баг-репорт¶
Трекер:
https://bug.green-lab.space/projects/greenchat/issues/new. Регистрация не
нужна, репорт можно отправить анонимно.
Что указать¶
Краткое название: что сломалось и где
Шаги:
1. …
2. …
3. …
Ожидал: …
Получил: …
Окружение:
- Green Chat 0.2.4 (или версия из Settings → Profile)
- ОС и версия
- один или несколько аккаунтов/устройств
- название канала или DM
- точное время события и часовой пояс
Воспроизводится: всегда / иногда / один раз
Дополнительно: скриншот или короткое видео
Для проблем синхронизации укажите ОС и версию клиента на каждой стороне,
а также какое устройство было офлайн.
Трекер публичный. Не прикладывайте пароли, invite-коды, ключи, приватные
логи или скриншоты с конфиденциальной перепиской. Перед отправкой замажьте
лишние данные.
Приоритет¶
| Приоритет | Когда использовать |
|---|---|
Normal |
Большинство ошибок интерфейса и поведения |
High |
Падение, потеря данных, недоставка сообщений, нарушение прав или безопасности |
Urgent / Immediate
|
Не выбирайте без отдельной просьбы команды |
Быстрая диагностика уведомлений¶
- Нажмите Settings → Notifications → Send test.
- Если тест пришёл, проверьте Pause all notifications, DND, mute,
quiet hours и фокус окна: Send test обходит эти настройки, а обычные
уведомления — нет. - Для канала используйте персональный
@mention; обычное сообщение может не
создавать попап. - Если приложение было закрыто через tray → Quit, системного попапа быть не
должно. - Если Send test не работает при разрешённых уведомлениях ОС, создайте
баг-репорт и обязательно укажите операционную систему.
Updated by Redmine Admin 17 days ago · 8 revisions