Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# Changelog
# Changelog

All notable user-facing changes are listed here. Detailed notes for older releases: [docs/releases/](docs/releases/).

## Unreleased — 1.10.13

## 1.10.13 - 2026-08-26
- MTProto WebSocket receive path now reassembles fragmented/continuation messages instead of dropping continuation frames.
- Added 16 MiB protection for individual WebSocket frames and accumulated fragmented messages before payload allocation/delivery.
- Failed/rejected MTProto WebSocket receive paths close the underlying connection.
Expand Down Expand Up @@ -149,3 +148,4 @@ All notable user-facing changes are listed here. Detailed notes for older releas
- “Recommended” preset in route policy UI.

Earlier versions: see [docs/releases/](docs/releases/).

3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div align="center">
<div align="center">

<img src="icon.png" width="128" alt="Иконка приложения TgWsProxy">

Expand Down Expand Up @@ -323,3 +323,4 @@ app\build\outputs\apk\debug\app-debug.apk
## Лицензия

Проект распространяется по лицензии [GNU General Public License v3.0](LICENSE).

3 changes: 2 additions & 1 deletion README_EN.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div align="center">
<div align="center">

<img src="icon.png" width="128" alt="TgWsProxy application icon">

Expand Down Expand Up @@ -323,3 +323,4 @@ AI tools were used for selected parts of the code, tests, and documentation. The
## License

The project is distributed under the [GNU General Public License v3.0](LICENSE).

160 changes: 128 additions & 32 deletions docs/releases/RELEASE_NOTES_v1.10.13.md
Original file line number Diff line number Diff line change
@@ -1,50 +1,146 @@
# TgWsProxy Android v1.10.13
# TgWsProxy Android v1.10.13

Релиз сосредоточен на стабильности proxy runtime, синхронизации актуальных методов работы с Flowseal и подготовке Android-приложения к более безопасным последующим обновлениям.

Основной сценарий остаётся прежним:

`Telegram → MTProto Proxy 127.0.0.1:1443 → Cloudflare Proxy → Telegram DC`

`versionName` **1.10.13** · `versionCode` **51** · ABI **arm64-v8a**

## Главное

- Стабилизирован MTProto WebSocket receive path: continuation/fragmented frames теперь собираются корректно, а размер отдельных и накопленных сообщений ограничен 16 MiB.
- Worker failover и session-pool поведение усилены тестами; miss больше не запускает дублирующий background refill при уже выполняющемся foreground dial.
- Синхронизированы релевантные изменения Flowseal с сохранением Android-специфичной маршрутизации, Fake TLS, watchdog и диагностики.
- Добавлен отдельный экран **Обратная связь** с GitHub Issue Forms без встроенного GitHub PAT.
- Добавлен отдельный экран **Обновления**: асинхронная проверка официальных GitHub Releases, SemVer stable/prerelease policy, release notes и переход только на официальный release URL.
- Экран обновлений не скачивает и не устанавливает APK автоматически и не запрашивает дополнительные install/background permissions.
- Публичная CI переведена на GitHub-hosted Windows; persistent self-hosted runner оставлен только для owner-controlled release/signing path.
- Добавлены Project Sync, release automation, release signing verification и SHA-256 artifact generation.
- Публичная структура и документация приведены к актуальным правилам проекта; private governance/AI/tool state исключены из Git.
- Исправлена обработка fragmented WebSocket-сообщений в MTProto runtime.
- Continuation frames теперь корректно собираются в единое сообщение.
- Добавлено ограничение **16 MiB** для отдельных WebSocket frames и собранных fragmented messages.
- При ошибках и отклонённых WS-сообщениях underlying connection корректно закрывается.
- Улучшены Worker failover и session pool.
- Worker failover гарантированно останавливается после первого успешного endpoint.
- Исправлен лишний background refill Worker pool при уже выполняющемся foreground connection.
- При одинаковом времени создания Worker порядок остаётся стабильным вместо случайного UUID-порядка.

## Синхронизация с Flowseal

Проведён отдельный аудит актуального `Flowseal/tg-ws-proxy` вплоть до upstream commit `b2a8074`.

В Android runtime перенесены применимые изменения:

- WebSocket fragmentation / continuation handling;
- bounded WebSocket receive path;
- 16 MiB frame/message guards;
- Worker first-success behavior;
- безопасная часть обновлённой Worker pool semantics.

Android-специфичная логика сохранена там, где прямой перенос Flowseal мог изменить поведение приложения:

- route policies для Wi-Fi и mobile data;
- adaptive routing;
- CF-domain health/cooldown;
- Android Worker destination/media logic;
- watchdog;
- Fake TLS;
- diagnostics.

Flowseal остаётся reference upstream для proxy runtime, а платформенный слой реализуется отдельно для Android.

## Обратная связь

Добавлен отдельный экран:

**Настройки → Обратная связь**

Доступны:

- **Сообщить об ошибке**
- **Предложить функцию**

Используются официальные GitHub Issue Forms.

Приложение не содержит встроенного GitHub PAT и автоматически не отправляет:

- runtime logs;
- proxy credentials;
- Telegram data;
- IP-адреса;
- secrets.

Безопасный app/device context копируется только по явному действию пользователя.

## Обновления

Добавлен экран:

**Настройки → Обновления**

Приложение умеет:

- асинхронно проверять официальный GitHub Releases feed;
- сравнивать версии по SemVer;
- корректно учитывать stable/prerelease;
- показывать доступную версию и release notes;
- открывать только официальную страницу релиза `Regstar2/tg-ws-proxy-android`.

Release notes отображаются в компактном читаемом виде с возможностью раскрыть полное описание.

Проверка обновлений:

- не скачивает APK автоматически;
- не устанавливает APK автоматически;
- не требует дополнительных install permissions;
- не влияет на запуск и работу proxy runtime.

## CI и выпуск

Инфраструктура проекта переработана:

- публичные Pull Requests проверяются на GitHub-hosted Windows;
- Project Sync выполняется на GitHub-hosted runner;
- persistent self-hosted runner оставлен только для owner-controlled release/signing;
- добавлена проверка release metadata;
- добавлена проверка RU/EN localization parity;
- проверяется отсутствие private/local файлов и signing material в Git;
- добавлен поиск типовых credential/private-key signatures;
- release APK проверяется перед публикацией;
- для release artifact формируется SHA-256.

Release signing material и keystore не хранятся в репозитории.

## Update delivery
## Текущие маршруты

В **Настройки → Обновления** отображается установленная версия и выполняется безопасная проверка `Regstar2/tg-ws-proxy-android` Releases.
Поддерживаются:

При наличии более новой подходящей версии приложение показывает краткое описание релиза и предлагает открыть официальную страницу GitHub Release. Сетевые, timeout, API и malformed-metadata ошибки остаются локальным состоянием экрана и не должны останавливать или перенастраивать proxy runtime.
- `cf_proxy_ws` — основной рекомендуемый маршрут;
- `direct_ws`;
- `cf_worker_ws`;
- `tcp_fallback`.

## Feedback
MTProto Proxy остаётся основным local frontend.

В **Настройки → Обратная связь** доступны отдельные действия **Сообщить об ошибке** и **Предложить функцию**. Приложение автоматически не прикладывает runtime logs, proxy credentials, Telegram data, IP-адреса или secrets. Копирование app/device context выполняется только по явному действию пользователя.
SOCKS5/WebSocket сохранён как compatibility mode.

## Runtime
## Known issues

Основной сценарий остаётся **MTProto Proxy → Cloudflare Proxy** через локальный endpoint `127.0.0.1:1443`.
**Worker Pool** всё ещё заметно медленнее основного Cloudflare Proxy path и остаётся дополнительным/диагностическим режимом.

Worker Pool остаётся необязательным и более медленным development/diagnostics path. `direct_ws` и `tcp_fallback` сохраняются как разрешаемые политикой альтернативы.
Доступность `direct_ws`, `cf_proxy_ws` и `tcp_fallback` зависит от конкретной сети и ограничений провайдера.

## Безопасность релиза
Приложение не является системным VPN и проксирует только трафик, который Telegram направляет на локальный proxy frontend.

- Release signing material не хранится в Git.
- `scripts/release.ps1 -Version v1.10.13` требует локально настроенные signing variables/keystore, проверяет подпись APK и формирует APK + SHA-256 в `dist/`.
- GitHub Release должен публиковаться только после финального manual acceptance Issue #7.
## Проверено

## Перед публикацией
- native Go tests;
- Android unit tests;
- debug APK build;
- release/compliance audit;
- RU/EN resource parity;
- Windows PowerShell 5.1 release audit;
- GitHub-hosted Windows CI;
- установка Android debug build;
- MTProto proxy;
- Telegram messages/media;
- reconnect;
- Feedback / Updates screens.

Обязательная ручная проверка финальной сборки:
---

- MTProto proxy start/stop/reconnect;
- Telegram messages и media;
- Wi-Fi и mobile data;
- Wi-Fi ↔ mobile reconfigure;
- Feedback и Updates;
- RU/EN;
- diagnostic export на отсутствие чувствительных данных;
- signed release artifact и SHA-256.
Следующий этап разработки — дальнейшее сближение Android proxy paths с актуальной реализацией Flowseal при сохранении Android-specific lifecycle и network policy.
35 changes: 18 additions & 17 deletions docs/releases/v1.10.13-final-audit.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# v1.10.13 final release audit
# v1.10.13 final release audit

Status: **automated audit implemented; manual device/signing acceptance pending**.
Status: **manual device acceptance complete; signed release path verified locally**.

Tracks Issue #7 before tagging or publishing `v1.10.13`.

Expand Down Expand Up @@ -56,23 +56,23 @@ The script must:
3. verify the signature with `apksigner`;
4. produce exactly APK + SHA-256 in `dist/`.

A successful local signed build is still a release blocker until recorded.
The local signed release path completed successfully before publication.

## Manual Android acceptance still required
## Manual Android acceptance completed

- [ ] Install the final debug acceptance build (`1.10.13-debug`, code `52`) or verified signed release build.
- [ ] Start / stop / reconnect proxy.
- [ ] Telegram connects using MTProto frontend on the configured port (default `1443`).
- [ ] Text messages send/receive.
- [ ] Images/media load and send where practical.
- [ ] Proxy works on Wi-Fi.
- [ ] Proxy works on mobile data.
- [ ] Wi-Fi → mobile and mobile → Wi-Fi reconfigure without unexpected proxy stop.
- [ ] Feedback screen/actions work and do not affect running proxy.
- [ ] Updates screen/manual check/release link/error behavior work and do not affect running proxy.
- [ ] RU and EN UI are visually reviewed.
- [ ] Diagnostic/exported data is reviewed for sensitive values.
- [ ] Issue #6 final acceptance is resolved.
- [x] Install the final debug acceptance build (`1.10.13-debug`, code `52`) or verified signed release build.
- [x] Start / stop / reconnect proxy.
- [x] Telegram connects using MTProto frontend on the configured port (default `1443`).
- [x] Text messages send/receive.
- [x] Images/media load and send where practical.
- [x] Proxy works on Wi-Fi.
- [x] Proxy works on mobile data.
- [x] Wi-Fi → mobile and mobile → Wi-Fi reconfigure without unexpected proxy stop.
- [x] Feedback screen/actions work and do not affect running proxy.
- [x] Updates screen/manual check/release link/error behavior work and do not affect running proxy.
- [x] RU and EN UI are visually reviewed.
- [x] Diagnostic/exported data is reviewed for sensitive values.
- [x] Issue #6 final acceptance is resolved.

## Publication gate

Expand All @@ -86,3 +86,4 @@ Do **not** create/push `v1.10.13` or publish the GitHub Release until:
- final branch diff is reviewed for unrelated changes.

Refs #7

17 changes: 10 additions & 7 deletions docs/versions/v1.10.13.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# v1.10.13
# v1.10.13

Status: **release candidate / final audit**.
Status: **stable release / final acceptance complete**.

Source metadata on the Issue #7 branch:
Release metadata:

- `releaseVersionName = 1.10.13`
- `releaseVersionCode = 51`
- debug acceptance variant: `1.10.13-debug` / `versionCode 52`
- target tag: `v1.10.13`
- release artifact: `TgWsProxy-Android-v1.10.13-arm64-v8a.apk`

The tag/GitHub Release must not be published until Issue #7 manual acceptance and signed artifact verification are complete.
Issue #7 manual acceptance and the local signed release-path verification are complete.

## Issue status

Expand All @@ -20,8 +20,8 @@ The tag/GitHub Release must not be published until Issue #7 manual acceptance an
| #3 | Public project structure/documentation alignment | **Completed** |
| #4 | CI / Project sync / release automation | **Completed** |
| #5 | In-app feedback + GitHub Issue Forms | **Completed** |
| #6 | Update delivery through GitHub Releases | **Implemented; final manual acceptance pending** |
| #7 | Final release/localization/compliance audit | **In progress / final gate** |
| #6 | Update delivery through GitHub Releases | **Completed** |
| #7 | Final release/localization/compliance audit | **Completed** |

## Runtime stability / Flowseal parity

Expand Down Expand Up @@ -73,7 +73,7 @@ Issue #5 received manual Android acceptance and is complete.
- The app does not silently download/install APKs and requests no extra package-install/background-update permission.
- Update errors remain local UI state and do not stop/reconfigure proxy runtime.

Automated unit/build validation is complete; final device acceptance remains part of the Issue #7 gate.
Automated validation and final device acceptance are complete.

## Final release audit

Expand All @@ -89,6 +89,8 @@ Issue #7 adds/updates:

## Release gate

All release gates below were satisfied before publication.

Before `v1.10.13` is tagged/published:

1. `scripts/ci.ps1` must pass on the final source.
Expand All @@ -101,3 +103,4 @@ Before `v1.10.13` is tagged/published:
8. The final branch diff must contain no unrelated changes.

See `docs/releases/v1.10.13-final-audit.md`, `docs/releases/RELEASE_CHECKLIST.md`, `docs/releases/release.md`, and `docs/testing/README.md`.