zapret-kvn/xray_fluent/application
Repository files (latest commit first)
Filename Latest commit message Latest commit date
loop-uh 2a35bd050e
Some checks failed
Windows project source guards / test (push) Failing after 33s
Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки)
Корень ошибки из диагностики 31.10.2026 (0.8.51, Hysteria2 без UDP из МГТС) —
в механизме, а не в одном месте:

1. «Какой сервер» имел три протокола: родной пул писал selected_node_id до
   горячего свитча, Hysteria — до readiness нового sidecar, Amnezia держала
   выбор в pending. После отказа прежний runtime работал, а выбранным и
   сохранённым оставался отказавший сервер.
2. Каждый шаг перехода сам писал ошибку в статус — даже вытесненный новым
   кликом («Не удалось запустить sing-box proxy runtime»), а поздний общий
   текст затирал точную причину; фаза «error» ставилась при живом соединении.

Новые модули:
- application/server_selection.py — единственная транзакция выбора для всех
  протоколов и видов перехода: при живом подключении новый сервер — только
  цель (pending), выбранным становится в commit() готового runtime; неудача
  её сбрасывает (откатывать нечего), без подключения выбор фиксируется сразу.
- application/transition_outcome.py — шаги сообщают причину
  (_fail_transition), сильнейшая побеждает (SECURITY > CAUSE > CORE > STEP),
  публикует один раз _on_transition_runner_finished; вытесненный переход
  молчит; фаза выводится из того, что работает («Подключено» + «Соединение
  осталось на «…»»).
- diagnostics/transport_failure.py (из предыдущего коммита) даёт причину CAUSE.
- signature_service считает желаемый runtime по цели, а не по выбранному.

E2E tests/test_app_e2e_hysteria_udp_switch.py на win10: настоящие sing-box и
hysteria, рабочий сервер и UDP-«чёрная дыра». v0.8.51: 3/3 FAIL (выбран
отказавший сервер; ложная ошибка sing-box; нет причины). Новый код: 3/3 OK.
Полный набор Windows: 1831 OK.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:42:12 -04:00
..
__init__.py Prepare v0.4.78: server list rework, faster switching, subscriptions 2026-08-11 22:10:53 +03:00
async_steps.py Xray: один несобираемый сервер больше не валит запуск всего пула 2026-10-18 20:06:09 +03:00
auto_switch_service.py Пинг и тест скорости: быстрее, без подвисаний и заметно тише на линии 2026-10-01 23:56:34 +03:00
config.py фикс открытого прокси 2026-04-07 20:49:48 +03:00
config_documents.py Prepare v0.4.78: server list rework, faster switching, subscriptions 2026-08-11 22:10:53 +03:00
config_profiles.py Update config_profiles.py 2026-04-07 21:11:24 +03:00
connection_service.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
controller.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
node_runtime_service.py fix: preserve interactive server table and bound DNS fallback readiness 2026-09-06 02:07:48 +03:00
node_service.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
nodes.py Смена сервера всегда называет источник: [select] в логе, «Следующий» без фокуса 2026-09-28 21:35:12 +03:00
outbound_pool_service.py Xray: один несобираемый сервер больше не валит запуск всего пула 2026-10-18 20:06:09 +03:00
port_allocator.py sing-box extended 2026-07-11 21:01:15 +03:00
profile_service.py Маршрутизация: структурный редактор sing-box по схеме ядра 2026-09-26 20:30:17 +03:00
protocol_core.py feat: use official Amnezia transport and organize runtime modules 2026-09-06 00:14:08 +03:00
rotation_service.py feat: use official Amnezia transport and organize runtime modules 2026-09-06 00:14:08 +03:00
route_check.py Простое правило: регистр программ, слово без точки, защитные правила, «Применить» 2026-09-27 13:14:18 +03:00
runtime.py Тест скорости узла проверяет и известные сервисы: пауза и медленный ответ видны в карточке сервера 2026-10-20 12:48:35 -04:00
runtime_introspection.py wireguard 2026-07-11 23:17:09 +03:00
runtime_security.py feat: use official Amnezia transport and organize runtime modules 2026-09-06 00:14:08 +03:00
runtime_services.py Программа «через VPN» — кроме российских сайтов; диагностика видит решения маршрута 2026-10-16 19:05:27 +03:00
selection_source.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
server_bypass.py Пинг через ядро, VPN без пресета Zapret, окно без консоли, прокси для локальной сети 2026-10-27 15:19:55 -04:00
server_selection.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
session_state.py feat: use official Amnezia transport and organize runtime modules 2026-09-06 00:14:08 +03:00
signature_service.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
singbox_config_recovery.py Automatically recover wrapped sing-box configs 2026-07-25 18:34:27 +03:00
singbox_editor_check.py Маршрутизация: структурный редактор sing-box по схеме ядра 2026-09-26 20:30:17 +03:00
smart_switch_service.py Умная проверка: подозрение только при реальной загрузке, пауза после ложной тревоги растёт 2026-10-26 06:29:14 -04:00
startup_notices.py DNS: доверенный адрес сервера для гибридного режима и WG/AWG, диагностика подмены 2026-10-09 01:56:33 +03:00
startup_service.py Zapret: модуль и страница переписаны — проще, понятнее, строже 2026-09-28 20:53:25 +03:00
subscription_service.py feat: use official Amnezia transport and organize runtime modules 2026-09-06 00:14:08 +03:00
template_sync.py DNS: доверенный адрес сервера для гибридного режима и WG/AWG, диагностика подмены 2026-10-09 01:56:33 +03:00
transition_engine.py fix: unify transport transitions and restore direct Russian services 2026-09-06 01:10:35 +03:00
transition_outcome.py Транзакция выбора сервера и единый итог перехода (архитектура вместо заплатки) 2026-10-31 10:42:12 -04:00
update_service.py Hysteria: рабочий сервер не заменяется из-за случайной ошибки; подписки — гонка маршрутов 2026-10-01 19:20:34 +03:00
worker_keeper.py Hysteria: рабочий сервер не заменяется из-за случайной ошибки; подписки — гонка маршрутов 2026-10-01 19:20:34 +03:00
worker_service.py Пинг подключённого сервера через его подключение; «Подключаться при запуске» выкл. 2026-10-28 06:23:07 -04:00
xray_runtime_service.py Xray: один несобираемый сервер больше не валит запуск всего пула 2026-10-18 20:06:09 +03:00