💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 для копия / импорт / список пресетов тоже нашёлся отдельный слой, который тормозил. Это уже была не проблема шаблонов, как у reset, а проблема индекса пресетов и повторных проходов по нему.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 8 files changed, 141 insertions(+), 197 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 для копия / импорт / список пресетов тоже нашёлся отдельный слой, который тормозил. Это уже была не проблема шаблонов, как у reset, а проблема индекса пресетов и повторных проходов по нему.
👤 Автор: loop-uh
🔗 SHA:
6364f6c📊 Статистика: 8 files changed, 141 insertions(+), 197 deletions(-)
📁 Изменённые файлы:
✏️
src/core/presets/repository.py✏️
src/core/presets/template_support.py✏️
src/main.py✏️
src/managers/initialization_manager.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-06 14:29:15
👤 Автор: fuckyou
📅 Дата: 06.04.2026 11:29:15
🔗 SHA:
📊 Статистика:
➕ Добавлено: 18 строк
➖ Удалено: 18 строк
📝 Всего изменений: 36
📁 Изменено файлов: 16
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+9 -9
Удалилось:
Добавилось:
📝
+0 -0
📝
+0 -0
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
📝
+0 -0
📝
+0 -0
✏️
+4 -4
Удалилось:
Добавилось:
... и еще 6 файлов
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-06 14:29:15
👤 Автор: fuckyou
📅 Дата: 06.04.2026 11:29:15
🔗 SHA:
17cb2fe📊 Статистика:
➕ Добавлено: 18 строк
➖ Удалено: 18 строк
📝 Всего изменений: 36
📁 Изменено файлов: 16
✏️
Zapret/manual.md+1 -1
Удалилось:
[[Zapret2 - оркестратор]]
Добавилось:
[[оркестратор]]
✏️
Zapret/zapret_not_working.md+1 -1
Удалилось:
Единственный надёжный способ найти рабочую стратегию — анализ нескольких типичных стратегий из го...
Добавилось:
Единственный надёжный способ найти рабочую стратегию — анализ нескольких типичных стратегий из го...
✏️
Zapret2/Zapret2.md+9 -9
Удалилось:
[[Zapret2 - основные флаги]]
[[Zapret2 - wf]]
[[Zapret2 - out-range]]
[[Zapret2 - payload]]
[[Zapret2 - lua-desync]]
[[Zapret2 - blob]]
[[Zapret2 - последовательность аргументов]]
[[Zapret2 - mtproto]]
[[Zapret2 - Roadmap обучения]]
Добавилось:
[[основные флаги]]
[[wf]]
[[out-range]]
[[payload]]
[[desync]]
[[blob]]
[[последовательность аргументов]]
[[распознавание mtproto]]
[[roadmap обучения]]
📝
Zapret2/blob.md+0 -0
📝
Zapret2/desync.md+0 -0
✏️
Zapret2/filter.md+1 -1
Удалилось:
Фильтры в nfqws2 определяют, какие пакеты/соединения будут обрабатываться профилем мультистратеги...
Добавилось:
Фильтры в nfqws2 определяют, какие пакеты/соединения будут обрабатываться профилем мультистратеги...
✏️
Zapret2/guide.md+1 -1
Удалилось:
Данная статья описывается для программы с поддержкой интерфейса (GUI), но Вы можете настроить и о...
Добавилось:
Данная статья описывается для программы с поддержкой интерфейса (GUI), но Вы можете настроить и о...
📝
Zapret2/out-range.md+0 -0
📝
Zapret2/payload.md+0 -0
✏️
Zapret2/preset.md+4 -4
Удалилось:
**Пресет** (*часто называемые конфигами*) — это `.txt` файл(ы) с перечислением всех [[Zapret2 - о...
Далее следуют [[Zapret2 - wf|глобальные фильтры WinDivert]], на языке [[Zapret2]] они имеют напра...
### 3. [[Zapret2 - blob|Блобы]] (заготовки данных)
[[Zapret2 - blob|Блоб]] — это заранее подготовленные данные (*для удобства в готовом пресете сраз...
Добавилось:
**Пресет** (*часто называемые конфигами*) — это `.txt` файл(ы) с перечислением всех [[основные фл...
Далее следуют [[wf|глобальные фильтры WinDivert]], на языке [[Zapret2]] они имеют направление (`-...
### 3. [[blob|Блобы]] (заготовки данных)
[[blob|Блоб]] — это заранее подготовленные данные (*для удобства в готовом пресете сразу перечисл...
... и еще 6 файлов
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-06 14:29:15
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 16 files changed, 18 insertions(+), 18 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-06 14:29:15
👤 Автор: fuckyou
🔗 SHA:
17cb2fe📊 Статистика: 16 files changed, 18 insertions(+), 18 deletions(-)
📁 Изменённые файлы:
✏️
Zapret/manual.md\n✏️ Zapret/zapret_not_working.md\n✏️ Zapret2/Zapret2.md\n📝 Zapret2/Zapret2 - blob.md Zapret2/blob.md\n📝 Zapret2/Zapret2 - lua-desync.md Zapret2/desync.md\n✏️ Zapret2/filter.md\n✏️ Zapret2/guide.md\n📝 Zapret2/Zapret2 - out-range.md Zapret2/out-range.md\n📝 Zapret2/Zapret2 - payload.md Zapret2/payload.md\n✏️ Zapret2/preset.md\n📝 "Zapret2/Zapret2 - Roadmap \320\276\320\261\321\203\321\207\320\265\320\275\320\270\321\217.md" "Zapret2/roadmap \320\276\320\261\321\203\321\207\320\265\320\275\320\270\321\217.md"\n📝 Zapret2/Zapret2 - wf.md Zapret2/wf.md\n📝 "Zapret2/Zapret2 - \320\276\321\200\320\272\320\265\321\201\321\202\321\200\320\260\321\202\320\276\321\200.md" "Zapret2/\320\276\321\200\320\272\320\265\321\201\321\202\321\200\320\260\321\202\320\276\321\200.md"\n📝 "Zapret2/Zapret2 - \320\276\321\201\320\275\320\276\320\262\320\275\321\213\320\265 \321\204\320\273\320\260\320\263\320\270.md" "Zapret2/\320\276\321\201\320\275\320\276\320\262\320\275\321\213\320\265 \321\204\320\273\320\260\320\263\320\270.md"\n📝 "Zapret2/Zapret2 - \320\277\320\276\321\201\320\273\320\265\320\264\320\276\320\262\320\260\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262.md" "Zapret2/\320\277\320\276\321\201\320\273\320\265\320\264\320\276\320\262\320\260\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\321\214 \320\260\321\200\320\263\321\203\320\274\320\265\320\275\321\202\320\276\320\262.md"\n📝 Zapret2/Zapret2 - mtproto.md "Zapret2/\321\200\320\260\321\201\320\277\320\276\320\267\320\275\320\260\320\262\320\260\320\275\320\270\320\265 mtproto.md"\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 фикс багов
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 41 files changed, 2368 insertions(+), 915 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🆕
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 фикс багов
👤 Автор: loop-uh
🔗 SHA:
d32041f📊 Статистика: 41 files changed, 2368 insertions(+), 915 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_preset_core/common/strategy_catalogs.py✏️
src/core/direct_preset_core/service.py✏️
src/core/presets/runtime_store.py✏️
src/core/runtime/preset_runtime_coordinator.py✏️
src/main.py✏️
src/managers/initialization_manager.py✏️
src/orchestra/blocked_strategies_manager.py🆕
src/orchestra/ignored_targets.py✏️
src/orchestra/locked_strategies_manager.py✏️
src/orchestra/orchestra_runner.py✏️
src/preset_orchestra_zapret2/preset_manager.py✏️
src/telegram_proxy/manager.py✏️
src/tray.py✏️
src/ui/main_window.py✏️
src/ui/main_window_navigation.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/main_window_pages.py✏️
src/ui/main_window_state.py✏️
src/ui/mode_page_scope.py✏️
src/ui/page_names.py✏️
src/ui/page_registry.py✏️
src/ui/pages/orchestra/blocked_page.py✏️
src/ui/pages/orchestra/locked_page.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/orchestra_zapret2/__init__.py🆕
src/ui/pages/orchestra_zapret2/preset_detail_page.py🆕
src/ui/pages/orchestra_zapret2/preset_subpage_base.py✏️
src/ui/pages/orchestra_zapret2/user_presets_page.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/telegram_proxy_page.py🆕
src/ui/pages/user_presets_runtime.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/preset_detail_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py✏️
src/ui/pages/zapret2_orchestra_strategies_page.py✏️
src/ui/widgets/direct_zapret2_strategies_tree.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 21.0.0.6
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 17 files changed, 388 insertions(+), 234 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 21.0.0.6
👤 Автор: loop-uh
🔗 SHA:
8742917📊 Статистика: 17 files changed, 388 insertions(+), 234 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/core/direct_preset_core/common/target_metadata_loader.py✏️
src/core/direct_preset_core/common/target_metadata_service.py✏️
src/core/direct_preset_core/engines/_shared.py🆕
src/core/presets/cache_signatures.py✏️
src/core/presets/direct_facade_backend.py✏️
src/core/presets/runtime_store.py✏️
src/preset_orchestra_zapret2/preset_manager.py✏️
src/preset_orchestra_zapret2/preset_store.py✏️
src/ui/main_window.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/pages/orchestra_zapret2/user_presets_page.py✏️
src/ui/pages/zapret1/direct_zapret1_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py🆕
src/ui/pages/zapret2/strategy_detail_mode_policy.py✏️
src/ui/pages/zapret2/strategy_detail_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Update dpi_controller.py
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 1 file changed, 28 insertions(+), 11 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Update dpi_controller.py
👤 Автор: loop-uh
🔗 SHA:
c3ca689📊 Статистика: 1 file changed, 28 insertions(+), 11 deletions(-)
📁 Изменённые файлы:
✏️
src/dpi/dpi_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Теперь в public_zapretgui/src/managers/initialization_manager.py поздний post-init запускается не через QTimer.singleShot(...), а через обычный queued-сигнал _PostInitLaunchBridge. Это значит следующее: - тяжёлая часть всё ещё не выполняется прямо внутри быстрого стартового участка; - но больше нет искусственной задержки вроде 180ms; - запуск переносится просто на следующий проход цикла интерфейса, то есть без «магического ожидания» и без таймерной эвристики. Проще говоря: мы сохранили главную пользу отложенного запуска, но убрали именно тот механизм, который уже раньше показал себя плохим, когда поведение начинает зависеть от случайной задержки, а не от реального жизненного цикла окна. Что изменилось по сути:
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 3 files changed, 266 insertions(+), 65 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Теперь в public_zapretgui/src/managers/initialization_manager.py поздний post-init запускается не через QTimer.singleShot(...), а через обычный queued-сигнал _PostInitLaunchBridge. Это значит следующее: - тяжёлая часть всё ещё не выполняется прямо внутри быстрого стартового участка; - но больше нет искусственной задержки вроде 180ms; - запуск переносится просто на следующий проход цикла интерфейса, то есть без «магического ожидания» и без таймерной эвристики. Проще говоря: мы сохранили главную пользу отложенного запуска, но убрали именно тот механизм, который уже раньше показал себя плохим, когда поведение начинает зависеть от случайной задержки, а не от реального жизненного цикла окна. Что изменилось по сути:
👤 Автор: loop-uh
🔗 SHA:
d17f746📊 Статистика: 3 files changed, 266 insertions(+), 65 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/managers/initialization_manager.py✏️
src/ui/pages/appearance_page.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 первый запуск теперь отполирован
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 14 files changed, 369 insertions(+), 484 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 первый запуск теперь отполирован
👤 Автор: loop-uh
🔗 SHA:
b06dbf7📊 Статистика: 14 files changed, 369 insertions(+), 484 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/dpi/dpi_controller.py✏️
src/main.py✏️
src/managers/dpi_manager.py✏️
src/managers/dpi_runtime_service.py✏️
src/managers/initialization_manager.py✏️
src/startup/kaspersky.py✏️
src/startup/telega_check.py✏️
src/tray.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/window_notification_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 - закрытие при WindowDeactivate, то есть когда окно перестаёт быть активным; - закрытие при FocusOut, то есть когда popup теряет фокус; - закрытие при смене состояния приложения через applicationStateChanged, то есть как раз при уходе из активного окна, например через Alt+Tab; - для трея сохранена отдельная Windows-специфика: закрытие по клику вне меню через глобальную проверку мыши. На этот общий helper я перевёл все живые popup-меню, которые у вас открывались через menu.exec(...) в пользовательских сценариях: - public_zapretgui/src/ui/pages/preset_actions_menu.py - public_zapretgui/src/ui/pages/preset_rating_menu.py - public_zapretgui/src/ui/pages/preset_subpage_base.py - public_zapretgui/src/ui/pages/zapret2/strategy_detail_page.py - public_zapretgui/src/ui/pages/orchestra_page.py - public_zapretgui/src/ui/pages/strategy_scan_page.py - public_zapretgui/src/tray.py То есть смысл правки такой: раньше у трея была одна отдельно починенная логика, а у остальных меню была своя, местами слабая или вообще отсутствующая. Теперь у программы есть один общий механизм popup-lifecycle, а tray просто использует его через свою обёртку с дополнительным поведением для клика мимо.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 15 files changed, 609 insertions(+), 585 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 - закрытие при WindowDeactivate, то есть когда окно перестаёт быть активным; - закрытие при FocusOut, то есть когда popup теряет фокус; - закрытие при смене состояния приложения через applicationStateChanged, то есть как раз при уходе из активного окна, например через Alt+Tab; - для трея сохранена отдельная Windows-специфика: закрытие по клику вне меню через глобальную проверку мыши. На этот общий helper я перевёл все живые popup-меню, которые у вас открывались через menu.exec(...) в пользовательских сценариях: - public_zapretgui/src/ui/pages/preset_actions_menu.py - public_zapretgui/src/ui/pages/preset_rating_menu.py - public_zapretgui/src/ui/pages/preset_subpage_base.py - public_zapretgui/src/ui/pages/zapret2/strategy_detail_page.py - public_zapretgui/src/ui/pages/orchestra_page.py - public_zapretgui/src/ui/pages/strategy_scan_page.py - public_zapretgui/src/tray.py То есть смысл правки такой: раньше у трея была одна отдельно починенная логика, а у остальных меню была своя, местами слабая или вообще отсутствующая. Теперь у программы есть один общий механизм popup-lifecycle, а tray просто использует его через свою обёртку с дополнительным поведением для клика мимо.
👤 Автор: loop-uh
🔗 SHA:
51466d4📊 Статистика: 15 files changed, 609 insertions(+), 585 deletions(-)
📁 Изменённые файлы:
✏️
src/autostart/autostart_direct.py✏️
src/core/direct_flow.py✏️
src/dpi/dpi_controller.py✏️
src/launcher_common/builder_factory.py✏️
src/managers/dpi_manager.py✏️
src/managers/initialization_manager.py✏️
src/tray.py✏️
src/ui/main_window_mode_switch.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/preset_actions_menu.py✏️
src/ui/pages/preset_rating_menu.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py🆕
src/ui/popup_menu.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 ввёл единый лёгкий cleanup helper для обычного старта: _unload_known_windivert_drivers() и _perform_standard_windivert_cleanup(). Это важно, потому что раньше zapret1 и zapret2 делали почти одинаковую стандартную очистку разными кусками кода, и эти куски уже начали жить как два отдельных владельца одной и той же policy. Теперь обычная очистка перед стартом у них канонически одна. В public_zapretgui/src/zapret1_launcher/strategy_runner.py:410 я разложил ordinary launch path на отдельные этапы: подготовка cleanup через _prepare_cleanup_before_spawn_locked(...), потом отдельное решение о retry через _maybe_retry_after_failed_spawn_locked(...). Самое важное здесь то, что ранее убранный fallback с “selected-source refresh” больше не вернулся: runner не пытается тихо восстанавливать отсутствующий preset через другой путь, а честно падает с ошибкой, если входной preset не существует. В public_zapretgui/src/zapret2_launcher/strategy_runner.py:857 сделал аналогичное разделение, но без насильственного выравнивания поведения под zapret1, потому что у них реально разная retry-модель. Для zapret2 теперь отдельно видны:
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 7 files changed, 347 insertions(+), 283 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 ввёл единый лёгкий cleanup helper для обычного старта: _unload_known_windivert_drivers() и _perform_standard_windivert_cleanup(). Это важно, потому что раньше zapret1 и zapret2 делали почти одинаковую стандартную очистку разными кусками кода, и эти куски уже начали жить как два отдельных владельца одной и той же policy. Теперь обычная очистка перед стартом у них канонически одна. В public_zapretgui/src/zapret1_launcher/strategy_runner.py:410 я разложил ordinary launch path на отдельные этапы: подготовка cleanup через _prepare_cleanup_before_spawn_locked(...), потом отдельное решение о retry через _maybe_retry_after_failed_spawn_locked(...). Самое важное здесь то, что ранее убранный fallback с “selected-source refresh” больше не вернулся: runner не пытается тихо восстанавливать отсутствующий preset через другой путь, а честно падает с ошибкой, если входной preset не существует. В public_zapretgui/src/zapret2_launcher/strategy_runner.py:857 сделал аналогичное разделение, но без насильственного выравнивания поведения под zapret1, потому что у них реально разная retry-модель. Для zapret2 теперь отдельно видны:
👤 Автор: loop-uh
🔗 SHA:
f258b2e📊 Статистика: 7 files changed, 347 insertions(+), 283 deletions(-)
📁 Изменённые файлы:
✏️
src/core/direct_flow.py✏️
src/core/presets/direct_facade_backend.py✏️
src/core/presets/repository.py✏️
src/dpi/dpi_controller.py✏️
src/launcher_common/runner_base.py✏️
src/zapret1_launcher/strategy_runner.py✏️
src/zapret2_launcher/strategy_runner.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 direct-модуль ZapretGUI и много ходов подряд последовательно его приводили к одной модели: - один source preset как источник истины, - одна startup/runtime orchestration модель, - отдельные policy entrypoint’ы для content change и preset switch, - bridge’и между runner/controller/store/watchers, - и меньше локальной логики в UI.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 22 files changed, 643 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
🆕
✏️
✏️
✏️
🆕
✏️
🆕
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 direct-модуль ZapretGUI и много ходов подряд последовательно его приводили к одной модели: - один source preset как источник истины, - одна startup/runtime orchestration модель, - отдельные policy entrypoint’ы для content change и preset switch, - bridge’и между runner/controller/store/watchers, - и меньше локальной логики в UI.
👤 Автор: loop-uh
🔗 SHA:
4600eea📊 Статистика: 22 files changed, 643 insertions(+), 147 deletions(-)
📁 Изменённые файлы:
🆕
src/core/presets/direct_runtime_events.py✏️
src/core/presets/support_files.py✏️
src/core/presets/v1_builtin_templates.py✏️
src/core/runtime/preset_runtime_coordinator.py🆕
src/dpi/direct_runtime_apply_policy.py✏️
src/dpi/dpi_controller.py🆕
src/dpi/runtime_preset_switch_policy.py✏️
src/dpi/zapret2_core_restart.py✏️
src/launcher_common/preset_runner_support.py✏️
src/main.py✏️
src/managers/initialization_manager.py✏️
src/ui/main_window.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/preset_subpage_base.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/direct_zapret2_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py✏️
src/zapret1_launcher/strategy_runner.py✏️
src/zapret2_launcher/strategy_runner.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 при первом клике боковое меню вызывает show_page(), дальше идёт ensure_page(), и уже там в главном потоке сразу выполняются две дорогие вещи подряд: импорт Python- модуля страницы и создание всего дерева виджетов этой страницы. Это видно в связке public_zapretgui/src/ui/main_window.py:326 -> public_zapretgui/src/ui/main_window_pages.py:82 -> public_zapretgui/src/ui/main_window_pages.py:138. Для DPI Settings я отдельно промерил сам импорт модуля, и только он занял примерно 913 мс, ещё до полноценного показа страницы. То есть пользователь нажимает пункт меню, а приложение в этот же момент начинает “разворачивать” тяжёлый модуль страницы прямо в интерфейсном потоке. Что я поменял. После первого показа окна и завершения базовой сборки интерфейса я добавил отложенный прогрев страниц: приложение теперь не ждёт первого клика пользователя, а по очереди, в спокойном режиме, заранее импортирует тяжёлые модули страниц и прогревает самые неприятные экраны. Это сделано в public_zapretgui/src/ui/main_window.py:340 и public_zapretgui/src/ui/main_window_pages.py:18, public_zapretgui/src/ui/main_window_pages.py:119. Приоритет я дал тем страницам, на которых вы как раз замечаете лаги: DPI Settings, BlockCheck, Logs, Appearance, Servers, а затем уже остальным. Важно, что я не добавлял кривой обход вида “если долго, то открой старую ветку” и не возвращал legacy- путь. Логика открытия страниц осталась одной и той же, просто тяжёлая подготовка теперь выносится из момента клика пользователя в отложенный этап после старта окна. Проверка прошла нормально. Точечный тест на lazy-архитектуру страниц зелёный: python -m pytest private_zapretgui/tests/test_main_window_lazy_wiring.py -q, результат 18 passed. Ещё отдельно прогнал compileall по изменённым файлам, синтаксических ошибок нет. Для этого я добавил и новые тесты в private_zapretgui/tests/test_main_window_lazy_wiring.py:399, чтобы закрепить порядок прогрева тяжёлых страниц и убедиться, что импорт модулей не дублируется. Что было моей задачей и что сейчас происходит в проекте. Задача была понять, почему визуально “почти пустые” страницы открываются медленно, хотя интерфейс вроде бы не должен делать тяжёлую работу прямо на нажатии. По итогам разбора выяснилось, что реальный тормоз сидел в архитектуре lazy-страниц: ленивость была полезна для старта приложения, но плата за это переносилась на первый клик по странице. Сейчас проект устроен так: главное окно по-прежнему использует ленивый реестр страниц, но после старта оно дополнительно делает мягкий прогрев тяжёлых экранов, чтобы пользователь не ловил подвисание в момент навигации. Проще говоря, раньше тяжёлая подготовка происходила “когда вы уже нажали”, а теперь она уходит в отложенную фазу после показа основного окна. Если захотите, следующим шагом я могу по
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 137 insertions(+)
📁 Изменённые файлы:
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 при первом клике боковое меню вызывает show_page(), дальше идёт ensure_page(), и уже там в главном потоке сразу выполняются две дорогие вещи подряд: импорт Python- модуля страницы и создание всего дерева виджетов этой страницы. Это видно в связке public_zapretgui/src/ui/main_window.py:326 -> public_zapretgui/src/ui/main_window_pages.py:82 -> public_zapretgui/src/ui/main_window_pages.py:138. Для DPI Settings я отдельно промерил сам импорт модуля, и только он занял примерно 913 мс, ещё до полноценного показа страницы. То есть пользователь нажимает пункт меню, а приложение в этот же момент начинает “разворачивать” тяжёлый модуль страницы прямо в интерфейсном потоке. Что я поменял. После первого показа окна и завершения базовой сборки интерфейса я добавил отложенный прогрев страниц: приложение теперь не ждёт первого клика пользователя, а по очереди, в спокойном режиме, заранее импортирует тяжёлые модули страниц и прогревает самые неприятные экраны. Это сделано в public_zapretgui/src/ui/main_window.py:340 и public_zapretgui/src/ui/main_window_pages.py:18, public_zapretgui/src/ui/main_window_pages.py:119. Приоритет я дал тем страницам, на которых вы как раз замечаете лаги: DPI Settings, BlockCheck, Logs, Appearance, Servers, а затем уже остальным. Важно, что я не добавлял кривой обход вида “если долго, то открой старую ветку” и не возвращал legacy- путь. Логика открытия страниц осталась одной и той же, просто тяжёлая подготовка теперь выносится из момента клика пользователя в отложенный этап после старта окна. Проверка прошла нормально. Точечный тест на lazy-архитектуру страниц зелёный: python -m pytest private_zapretgui/tests/test_main_window_lazy_wiring.py -q, результат 18 passed. Ещё отдельно прогнал compileall по изменённым файлам, синтаксических ошибок нет. Для этого я добавил и новые тесты в private_zapretgui/tests/test_main_window_lazy_wiring.py:399, чтобы закрепить порядок прогрева тяжёлых страниц и убедиться, что импорт модулей не дублируется. Что было моей задачей и что сейчас происходит в проекте. Задача была понять, почему визуально “почти пустые” страницы открываются медленно, хотя интерфейс вроде бы не должен делать тяжёлую работу прямо на нажатии. По итогам разбора выяснилось, что реальный тормоз сидел в архитектуре lazy-страниц: ленивость была полезна для старта приложения, но плата за это переносилась на первый клик по странице. Сейчас проект устроен так: главное окно по-прежнему использует ленивый реестр страниц, но после старта оно дополнительно делает мягкий прогрев тяжёлых экранов, чтобы пользователь не ловил подвисание в момент навигации. Проще говоря, раньше тяжёлая подготовка происходила “когда вы уже нажали”, а теперь она уходит в отложенную фазу после показа основного окна. Если захотите, следующим шагом я могу по
👤 Автор: loop-uh
🔗 SHA:
bc1785f📊 Статистика: 2 files changed, 137 insertions(+)
📁 Изменённые файлы:
✏️
src/ui/main_window.py✏️
src/ui/main_window_pages.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 акетные lazy-экспорты сработали очень заметно: тот же ui.pages.zapret1 упал примерно с 1772 ms до 50 ms на грубом импорте. Сейчас дождусь итогового статуса тестов и потом сведу всё, что уже вырезано из старой архитектуры.
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 42 files changed, 2068 insertions(+), 1755 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
🆕
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 акетные lazy-экспорты сработали очень заметно: тот же ui.pages.zapret1 упал примерно с 1772 ms до 50 ms на грубом импорте. Сейчас дождусь итогового статуса тестов и потом сведу всё, что уже вырезано из старой архитектуры.
👤 Автор: loop-uh
🔗 SHA:
8126884📊 Статистика: 42 files changed, 2068 insertions(+), 1755 deletions(-)
📁 Изменённые файлы:
✏️
src/main.py✏️
src/ui/main_window_navigation_build.py✏️
src/ui/main_window_pages.py✏️
src/ui/pages/about_page.py✏️
src/ui/pages/appearance_page.py✏️
src/ui/pages/autostart_page.py✏️
src/ui/pages/base_page.py✏️
src/ui/pages/blobs_page.py✏️
src/ui/pages/blockcheck_page.py✏️
src/ui/pages/control_page.py✏️
src/ui/pages/custom_domains_page.py✏️
src/ui/pages/custom_ipset_page.py✏️
src/ui/pages/dns_check_page.py✏️
src/ui/pages/dpi_settings_page.py✏️
src/ui/pages/home_page.py✏️
src/ui/pages/hostlist_page.py✏️
src/ui/pages/hosts_page.py✏️
src/ui/pages/ipset_page.py✏️
src/ui/pages/logs_page.py✏️
src/ui/pages/netrogat_page.py✏️
src/ui/pages/network_page.py✏️
src/ui/pages/orchestra/__init__.py✏️
src/ui/pages/orchestra_page.py✏️
src/ui/pages/orchestra_zapret2/__init__.py✏️
src/ui/pages/premium_page.py✏️
src/ui/pages/servers_page.py✏️
src/ui/pages/strategy_scan_page.py✏️
src/ui/pages/support_page.py✏️
src/ui/pages/telegram_proxy_page.py✏️
src/ui/pages/user_presets_runtime.py✏️
src/ui/pages/zapret1/__init__.py✏️
src/ui/pages/zapret1/direct_control_page.py✏️
src/ui/pages/zapret1/strategy_detail_page_v1.py✏️
src/ui/pages/zapret1/user_presets_page.py✏️
src/ui/pages/zapret2/__init__.py✏️
src/ui/pages/zapret2/direct_control_page.py✏️
src/ui/pages/zapret2/strategy_detail_page.py✏️
src/ui/pages/zapret2/user_presets_page.py🆕
src/ui/widgets/win11_controls.py✏️
src/updater/__init__.py🆕
src/updater/server_status_workers.py🆕
src/updater/update_page_controller.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:46:29
🔗 SHA:
📊 Статистика:
➕ Добавлено: 424 строк
➖ Удалено: 0 строк
📝 Всего изменений: 424
📁 Изменено файлов: 1
🆕
+424 -0
Добавилось:
... и еще 306 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:46:29
🔗 SHA:
466becf📊 Статистика:
➕ Добавлено: 424 строк
➖ Удалено: 0 строк
📝 Всего изменений: 424
📁 Изменено файлов: 1
🆕
VLESS-SOCKS5-vulnerability.md+424 -0
Добавилось:
# Критическая уязвимость VLESS-клиентов: неаутентифицированный SOCKS5 на localhost
**Дата публикации:** 7 апреля 2026
**Источник:** [runetfreedom — ntc.party](https://ntc.party/t/topic/), [Habr](https://habr.com/ru/...
**POC:** [github.com/runetfreedom/per-app-split-bypass-poc](https://github.com/runetfreedom/per-a...
**Severity:** Critical (массовая эксплуатация неизбежна)
---
## TL;DR
Все популярные VLESS/xray/sing-box клиенты создают на localhost SOCKS5-прокси **без аутентификаци...
---
## 1. Предпосылки
... и еще 306 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 424 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:46:29
👤 Автор: fuckyou
🔗 SHA:
466becf📊 Статистика: 1 file changed, 424 insertions(+)
📁 Изменённые файлы:
🆕
VLESS-SOCKS5-vulnerability.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:54:52
🔗 SHA:
📊 Статистика:
➕ Добавлено: 788 строк
➖ Удалено: 0 строк
📝 Всего изменений: 788
📁 Изменено файлов: 1
🆕
+788 -0
Добавилось:
... и еще 609 строк
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:54:52
🔗 SHA:
c74b423📊 Статистика:
➕ Добавлено: 788 строк
➖ Удалено: 0 строк
📝 Всего изменений: 788
📁 Изменено файлов: 1
🆕
Localhost-tracking-Meta-Yandex-SOCKS5.md+788 -0
Добавилось:
# Localhost-атака: как Meta, Яндекс и шпионское ПО эксплуатируют loopback-интерфейс
**Дата:** 7 апреля 2026
**Статус:** Верифицировано — исследование USENIX Security 26, POC опубликован
**Оригинал исследования:** [localmess.github.io](https://localmess.github.io/)
**Научная статья:** [Bridges to Self: Silent Web-to-App Tracking on Mobile via Localhost](https:/...
**POC (Meta/Яндекс):** [github.com/localmess/localhost-abuse](https://github.com/localmess/localh...
**POC (VLESS обход split tunneling):** [github.com/runetfreedom/per-app-split-bypass-poc](https:/...
---
## Оглавление
1. [Корневая проблема: архитектура loopback в ОС](#1-корневая-проблема-архитектура-loopback-в-ос)
... и еще 609 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 788 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:54:52
👤 Автор: fuckyou
🔗 SHA:
c74b423📊 Статистика: 1 file changed, 788 insertions(+)
📁 Изменённые файлы:
🆕
Localhost-tracking-Meta-Yandex-SOCKS5.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:55:34
🔗 SHA:
📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 1 строк
📝 Всего изменений: 2
📁 Изменено файлов: 1
✏️
+1 -1
Удалилось:
Добавилось:
🔗 Открыть на GitHub
🔔 Новый коммит
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
📅 Дата: 07.04.2026 09:55:34
🔗 SHA:
4b0d7f1📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 1 строк
📝 Всего изменений: 2
📁 Изменено файлов: 1
✏️
VLESS-SOCKS5-vulnerability.md+1 -1
Удалилось:
Яндекс **уже использовал** подобную технику ранее (сканирование localhost для обнаружения прокси).
Добавилось:
Яндекс **уже использовал** подобную технику ранее ([[Localhost-tracking-Meta-Yandex-SOCKS5|сканир...
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 1 insertion(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 12:55:34
👤 Автор: fuckyou
🔗 SHA:
4b0d7f1📊 Статистика: 1 file changed, 1 insertion(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
VLESS-SOCKS5-vulnerability.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
🔗 SHA:
📊 Статистика: 1 file changed, 1114 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 vault backup: 2026-04-07 13:07:16
👤 Автор: fuckyou
🔗 SHA:
796e43d📊 Статистика: 1 file changed, 1114 insertions(+)
📁 Изменённые файлы:
🆕
VLESS-localhost-protection-guide.md\n🔗 Открыть на GitHub