Автоотчёты: при неудачном обновлении (любой шаг update.sh), внутренней ошибке моста, окончательном отклонении сессии MAX, перезапуске по кругу и аварийном завершении установка отправляет на сервер проекта отчёт фиксированного вида — идентификатор установки, версия, шаг, первая строка ошибки после чистки, свободные диск и память, версии ОС, Docker и git. Без текста сообщений, имён чатов и номера телефона; отключается тем же TELEMETRY=off. Сервер телеметрии принимает отчёты только от уже отмечавшихся установок, с лимитами, группирует по сигнатуре и шлёт в Telegram одно сообщение о новой ошибке не чаще раза в час; сводка — GET /reports. Сообщение о неудаче обновления дополняется строкой про отправленный отчёт.
Кнопки: MESSAGE отправляет текст кнопки боту от имени владельца и показывает его в теме; запрос геолокации и контакта подсказывает отправить их в тему, откуда они уходят обычной пересылкой.
Все восемь согласованных пакетов: зонд удалений больше не стирает сообщения в MAX при бане, перезагрузке и удалении темы; курсор истории двигается только вперёд, в серверном времени и только для догруженных чатов; bot.catch, различение отказа сессии и сетевого сбоя, проверка алфавита токена, обнаружение полуоткрытого соединения; диспетчер ответов в клиенте MAX; повтор при 429 на каждое вложение, нарезка длинных текстов, связки всех частей сообщения; проверка подписи релиза при обновлении через install.sh; пример номера телефона заменён на +79999999999 и замаскирован в /help и логах; уборка дублей и устаревших комментариев.
Код сильно вырос (учёт догрузки, частичная доставка, установщик) — следующие коммиты его упрощают, поведение фиксируют 230 тестов.