Skip to content

[Updater] Восстановить и проверить сквозное обновление Telegram-WSP (upstream sync → Android APK) #45

Closed as not planned

Description

@Regstar2

Цель

Восстановить сквозной проверяемый путь обновления Telegram-WSP: обнаружение нового Telegram upstream → воспроизводимая интеграция → проверенная release-сборка → обнаружение и безопасная установка APK на Android. Исправить выявленные сбои без переписывания Telegram networking или ослабления защиты обновлений.

Стадия проекта: публичный MVP. Не требуется создавать отдельный универсальный update framework; необходимые исправления должны быть соразмерны существующему механизму.

Фактическое состояние на 25.10.2026

A. Автоматическое обновление upstream достоверно заблокировано

  • Последний опубликованный стабильный релиз: v12.10.6-wsp.2, Telegram 12.10.6 (build 7112).
  • config/upstream.json: Telegram commit f2908b14133bbffbf7ab04f641ecb5bfaf533242.
  • Scheduled run 40179486858 25.10.2026 определил Telegram 13.0.3 (build 7183), commit 0aae959806c57be8ad457980f2a5c6277ff18635, но завершился FAIL на шаге Reproduce integration against new Telegram:
scripts/apply-integration.ps1:235
Telegram API Gradle anchor count is 0; expected 1.
  • В scripts/apply-integration.ps1 якорь для TMessagesProj/build.gradle ожидает minSdkVersion 21. В Telegram 13.0.3 defaultConfig использует minSdkVersion 23. Это подтверждённая причина первого падения; после исправления нужно проверить остальные якоря и полный pipeline, не предполагать, что других несовместимостей нет.
  • Последовательные scheduled runs также завершались неуспешно; job публикации пропущен. Существующий релиз 12.10.6 не удалён.

B. Встроенное обновление APK содержит проблемы надёжности (по анализу кода; end-to-end на устройстве не проверен)

Файл: integration/telegram/TgWsProxyBootstrap.java.

  1. KEY_UPDATE_LAST_CHECK сохраняется до запроса latest.json. При таймауте, 4xx/5xx, отсутствии сети или повреждённом manifest повторные запуски не предпринимают проверку до истечения 12 часов.
  2. Проверка запускается однократно при старте процесса (start()); у пользователя нет обнаруженного отдельного действия «Проверить обновления». При длительной работе клиента очередная проверка не планируется.
  3. Предложение обновления ждёт LaunchActivity.instance ограниченное число раз (30 попыток); если Activity не готова, результат проверки теряется, хотя время проверки уже записано.
  4. HttpURLConnection для feed и APK не подтверждает использование общего network/proxy policy. Если GitHub недоступен напрямую, Telegram через TgWsProxy может продолжать работать, а updater — нет. Нужна проверка реальной маршрутизации и применимый безопасный fallback.
  5. scripts/ci.ps1 проверяет присутствие фрагментов исходного кода, но это не эквивалент сценария «старая версия → предложение → скачивание → проверка → системный installer → сохранение данных».

Существующие защитные меры сохранить: загрузка с доверенного HTTPS release-источника, SHA-256 APK, совпадение package ID org.telegram.messenger.web и signing certificate с установленным приложением, пользовательское подтверждение системной установки, лимиты на размер APK, отсутствие токенов/секретов в клиенте, корректное сравнение versionCode.

Scope

1. Восстановить совместимость overlay с новым Telegram (P0 для следующей upstream-публикации)

  • Проверить diff DrKLO/Telegram@f2908b14 → @0aae9598, в особенности Gradle/manifest, source/API anchors и minSdk.
  • Сделать целевой и fail-closed адаптер в scripts/apply-integration.ps1: поддержать подтверждённые варианты якорей, однозначно обнаруживать несовместимость и не подменять/игнорировать ошибки.
  • Отдельно решить, можно ли сохранить заявленную Android 5.0 (API 21) совместимость. Если upstream реально требует minSdk 23, не скрывать это override: согласовать изменение поддерживаемого minSdk со сборкой, документацией и проверками, не обещать неподтверждённую совместимость.
  • Проверить остальные места integration overlay и допустимый diff, сохранить tgnet нетронутым и архитектуру Telegram → adapter → tgwsproxy-core.
  • Добиться воспроизводимого prepare-integration.ps1 -Force и scripts/ci.ps1 как на старом pinned upstream, так и на новом при соответствующей фиксации pin; для нового upstream выполнить необходимую build-валидацию.
  • Перед изменением main и выпуском подписанного APK сохранить существующие secrets/CI/release gates, использовать штатный release workflow; не публиковать на основании одной успешно прошедшей текстовой проверки.

2. Починить жизненный цикл проверки обновлений внутри приложения (P1)

  • Разделить last successful check и last attempted check/backoff: успешная проверка соблюдает штатные 12 часов; ожидаемая ошибка сети не блокирует повторную попытку на 12 часов. Избежать tight retry loops.
  • Добавить доступный ручной путь «Проверить обновления» в существующий интерфейс без отдельной сложной UI-системы. Ручная проверка не должна молча отбрасываться из-за автоматического cooldown.
  • Обеспечить обновление результата проверки при появлении foreground Activity, даже если она не была готова при получении feed; не показывать диалог поверх неактуального/уничтоженного Activity.
  • Реализовать соразмерную повторную проверку при длительной работе/возобновлении приложения без фоновой службы, если можно использовать существующий lifecycle.
  • Показывать однозначную идентификацию доступного Telegram-WSP release (включая WSP revision/tag, а не только Telegram versionName) и доступ к release notes.
  • Явно обработать «актуальная версия», «обновление найдено», отмену пользователем и ошибку проверки; обычный запуск/работу TgWsProxy не блокировать.

3. Проверить доставку APK и безопасность

  • Выяснить и зафиксировать фактическую network/proxy policy для GitHub feed и бинарника в целевой среде; применить поддерживаемый безопасный путь или обоснованный fallback на официальный GitHub Release/браузер. Не пытаться передавать HTTPS через MTProto frontend 127.0.0.1:1443 как через обычный HTTP proxy.
  • Убедиться, что redirects, URL/path/host, содержимое feed, версия/tag, hash и артефакт проверяются до установки. Не ослаблять TLS, package/signature/SHA-256 gates.
  • При прерывании/неуспехе загрузки не выдавать partial за готовый APK; повторное скачивание и кэш ведут себя предсказуемо.
  • При отсутствии разрешения Android «Установка из этого источника» оставлять пользователю понятный путь продолжения после выдачи разрешения.
  • Не открывать installer для неподтверждённого или не более нового APK. Не удалять и не сбрасывать пользовательские данные для обновления.

Acceptance criteria

  • Telegram upstream sync при Telegram 13.0.3 (build 7183) проходит проверку интеграции без указанного Gradle anchor failure; полный required CI/build status наблюдаем и документирован. Если выяснится новый независимый blocker, его фиксируют явно, не объявляют обновление рабочим.
  • Старый pinned upstream остаётся воспроизводимым, либо переход задокументирован и старый regression fixture сохранён.
  • Выбранный minSdk соответствует требованиям реального upstream, приложения, core и опубликованной документации.
  • Для установленной latest версии обновление не предлагается; для меньшего versionCode показывается корректная версия Telegram-WSP и предложение обновления.
  • После сетевой ошибки возможна повторная проверка без необоснованного 12-часового ожидания; ручное действие инициирует новую проверку.
  • Неактивная Activity/foreground transition не приводит к потере обнаруженного доступного обновления.
  • При download/manifest/checksum/certificate/package mismatch установка не запускается.
  • На Android выполнен поддерживаемый upgrade из предыдущего подписанного релиза в более новый через штатный installer: учётная запись, настройки прокси и другие данные сохраняются; запуск после обновления корректен.
  • Стандартный клиент Telegram и TgWsProxy продолжают работать при недоступном release endpoint.
  • Не возникает старого бага публикации ревизии wsp.1 поверх более новой wsp.2 (см. закрытые Не создавать устаревшую WSP-ревизию при scheduled upstream sync #39 и Наследовать актуальную WSP-ревизию при обновлении Telegram upstream #41); stable-клиенту не предлагаются prerelease.

Проверки

Автоматические (добавить регрессии, предпочесть существующий scripts/ci.ps1 и точечные JVM/Android tests):

  • Детерминированная проверка overlay: старый pinned upstream и Telegram 13.0.3, несовпадение якоря → ожидаемый fail-closed.
  • Табличные тесты сравнения versionCode (current/latest, old/new WSP revision, новая версия upstream, некорректные значения).
  • Fake HTTP/fake clock: успех, no update, 404/500, timeout, offline, corrupted/missing latest.json, retry/backoff, ручной bypass cooldown, foreground Activity.
  • APK cases: SHA mismatch, invalid/mismatched signing cert, чужой package, incomplete download, oversize, отсутствие разрешения install.
  • Повторная проверка branch/release logic и существующей ревизионной защиты из Не создавать устаревшую WSP-ревизию при scheduled upstream sync #39/Наследовать актуальную WSP-ревизию при обновлении Telegram upstream #41.
  • scripts/prepare-integration.ps1 -Force, scripts/ci.ps1, полноценная release-assembly на поддерживаемом toolchain; документировать PASS/FAIL/NOT_RUN, не подменять реальную проверку regex-проверкой исходников.

Device acceptance (если не покрывается воспроизводимой Android instrumentation):

  • Подписанная предыдущая версия → обновление до более нового тестового/проверенного релиза через реальный installer.
  • Повторный запуск; сохранены аккаунты, proxy mode, домены, worker pools и настройки (без публикации приватных конфигураций).
  • Проверка при доступном/недоступном GitHub в целевой сети, смене сети, отказе в разрешении установки и восстановлении после отказа.

Вне scope

Ссылки

Definition of Done: подтверждены обе стороны update chain (GitHub release pipeline и установленное Android-приложение), исправления защищены регрессиями, неподтверждённые сценарии отмечены как ограничения, release security gates не ослаблены.

Activity

  1. 4 remaining items

  2. Regstar2 commented on Oct 26, 2026

    @Regstar2
    OwnerAuthor

    Закрываю Issue #45 по прямому решению владельца проекта. Это административное закрытие с явно оставшимися непроверенными acceptance criteria, а не подтверждение полной проверки Android updater end-to-end.

    Подтверждено:

    Осталось без подтверждения: реальное обновление установленного v12.10.6-wsp.2 до v13.1.1-wsp.2 через встроенный updater и системный installer с сохранением учётной записи/настроек, условия недоступного GitHub и негативные сценарии HTTP/SHA/signature/package/permission через Android E2E. Успех workflow публикации этого не доказывает. Указанные пункты при необходимости следует проверять отдельно до заявления о полностью проверенном end-to-end обновлении.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions