Zapret | Дорожная карта
2.32K subscribers
28 photos
24 files
2.95K links
Дорожная карта обновлений.

Узнайте что я буду редактировать в Запрет для обхода блокировок Дискорда и Ютуба в первую очередь

И ужаснуться моим техническим непонятным запискам без контекста.
Download Telegram
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 fix(profile): allow top-level hostlist suffixes

👤 Автор: loop-uh
📅 Дата: 25.07.2026 13:40:14
🔗 SHA: 5232c3c

📊 Статистика:
➕ Добавлено: 12 строк
➖ Удалено: 3 строк
📝 Всего изменений: 15

📁 Изменено файлов: 2

✏️ src/profile/list_file_editor.py
+4 -3

Удалилось:
if len(ascii_domain) > 253 or "." not in ascii_domain:

if len(labels) < 2:

return False


Добавилось:
if len(ascii_domain) > 253:

# Оригинальный nfqws2 ищет hostname по суффиксам:

# www.example.ru -> example.ru -> ru. Поэтому одиночная DNS-метка вроде

# ru или su — допустимая и осмысленная запись hostlist.


✏️ tests/test_profile_list_file_editor.py
+8 -0

Добавилось:
def test_hostlist_accepts_single_label_suffixes_supported_by_nfqws2(self) -> None:

invalid = validate_profile_list_file_text(

"hostlist",

"ru\nsu\n",

)

self.assertEqual(invalid, ())


🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Централизовать theme-подписки qfluentwidgets и укрепить сайдбар

👤 Автор: loop-uh
🔗 SHA: b3fc3fb

📊 Статистика: 15 files changed, 581 insertions(+), 33 deletions(-)

📁 Изменённые файлы:
✏️ src/blockcheck/dns_integrity.py
✏️ src/hosts/proxy_domains.py
✏️ src/main/qt_runtime.py
✏️ src/main/window_lifecycle_cleanup.py
✏️ src/startup/check_start.py
✏️ src/ui/navigation/sidebar_builder.py
✏️ src/ui/navigation/sidebar_intent.py
✏️ src/ui/presets_menu/common.py
🆕 src/ui/qfluent_signal_guards.py
✏️ src/ui/theme_refresh.py
✏️ src/updater/update.py
✏️ tests/test_build_resource_layout.py
✏️ tests/test_preset_sidebar_navigation.py
🆕 tests/test_qfluent_signal_guards.py
✏️ tests/test_sidebar_intent_persistence.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Централизовать theme-подписки qfluentwidgets и укрепить сайдбар

👤 Автор: loop-uh
📅 Дата: 25.07.2026 14:42:53
🔗 SHA: b3fc3fb

📊 Статистика:
➕ Добавлено: 581 строк
➖ Удалено: 33 строк
📝 Всего изменений: 614

📁 Изменено файлов: 15

✏️ src/blockcheck/dns_integrity.py
+2 -0

Добавилось:
from __future__ import annotations


✏️ src/hosts/proxy_domains.py
+2 -2

Удалилось:
_log(f"Не удалось разобрать {_CATALOG_FILE_NAME}: {exc}", "WARNING")

_log(f"{_CATALOG_FILE_NAME} должен содержать JSON-объект", "WARNING")


Добавилось:
_log(f"Не удалось разобрать hosts-каталог: {exc}", "WARNING")

_log("hosts-каталог должен содержать JSON-объект", "WARNING")


✏️ src/main/qt_runtime.py
+8 -0

Добавилось:
t_signal_guards = _time.perf_counter()

from ui.qfluent_signal_guards import install_qfluent_theme_signal_guards

install_qfluent_theme_signal_guards()

emit_startup_metric(

"StartupQtThemeSignalGuards",

f"{(_time.perf_counter() - t_signal_guards) * 1000:.0f}ms",

)


✏️ src/main/window_lifecycle_cleanup.py
+8 -4

Удалилось:
"""Синхронно дозаписывает намерение сайдбара, не успевшее уйти через воркер.

воркеру и его reschedule-таймеру завершиться, поэтому pending-значение

пишется здесь напрямую — как и геометрия окна.

controller.mark_saved(bool(pending))


Добавилось:
"""Синхронно записывает намерение сайдбара при выходе.

воркеру и его reschedule-таймеру завершиться, поэтому значение пишется

здесь напрямую — как и геометрия окна. Запись выполняется даже если воркер

отчитался об успехе (его сигналу не доверяем — потеря стоила бы состояния

панели); повторные вызовы в той же цепочке выхода дедуплицируются через

mark_flushed.

controller.mark_flushed(bool(pending))

log(f"[SIDEBAR] flush при {context}: expanded={bool(pending)}", "INFO")


✏️ src/startup/check_start.py
+1 -0

Добавилось:
import ctypes


✏️ src/ui/navigation/sidebar_builder.py
+52 -9

Удалилось:
from ui.navigation.sidebar_intent import DEFAULT_EXPAND_THRESHOLD, SidebarIntentController

on_failed=lambda _request_id, error: log(f"Не удалось сохранить состояние сайдбара: {error}", "DE...

if _read_saved_sidebar_expanded():

if _window_width(window) < _sidebar_expand_threshold(window):

window_width=_window_width(window),

def reapply_sidebar_intent_on_resize(window) -> None:

return

return

return


Добавилось:
from ui.navigation.sidebar_intent import (

DEFAULT_EXPAND_THRESHOLD,

SidebarIntentController,

normalize_display_mode_name,

)

SIDEBAR_INTENT_RECHECK_AFTER_INIT_MS = 1500

on_failed=lambda _request_id, error: log(f"Не удалось сохранить состояние сайдбара: {error}", "WA...

log(f"[SIDEBAR] состояние сохранено воркером: expanded={bool(saved_expanded)}", "INFO")

saved = _read_saved_sidebar_expanded()

width = _window_width(window)

... и еще 39 строк

... и еще 9 файлов

... и еще 5 файлов

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Исправить программное сворачивание сайдбара и закрытие диалогов

👤 Автор: loop-uh
🔗 SHA: 8f1252e

📊 Статистика: 6 files changed, 233 insertions(+), 50 deletions(-)

📁 Изменённые файлы:
✏️ src/ui/fluent_dialog.py
✏️ src/ui/navigation/sidebar_builder.py
✏️ src/ui/navigation/sidebar_intent.py
✏️ tests/test_fluent_dialog_lifecycle.py
✏️ tests/test_preset_sidebar_navigation.py
✏️ tests/test_sidebar_intent_persistence.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Исправить изоляцию Qt-тестов и Linux-пропуски

👤 Автор: loop-uh
🔗 SHA: 7d3b2c5

📊 Статистика: 7 files changed, 125 insertions(+), 14 deletions(-)

📁 Изменённые файлы:
✏️ tests/conftest.py
✏️ tests/test_dns_adapter_filtering.py
✏️ tests/test_dns_core_winapi.py
✏️ tests/test_launch_conflicting_processes.py
✏️ tests/test_process_probe_ctypes_isolation.py
✏️ tests/test_startup_install_path_checks.py
✏️ tests/test_updater_installer_launch.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Архитектурно связать состояние сайдбара с действием пользователя

👤 Автор: loop-uh
🔗 SHA: 3f745fd

📊 Статистика: 7 files changed, 195 insertions(+), 37 deletions(-)

📁 Изменённые файлы:
✏️ src/ui/fluent_dialog.py
✏️ src/ui/navigation/sidebar_builder.py
✏️ src/ui/navigation/sidebar_intent.py
✏️ src/ui/window_ui_session.py
✏️ tests/test_fluent_dialog_lifecycle.py
✏️ tests/test_preset_sidebar_navigation.py
✏️ tests/test_sidebar_intent_persistence.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Перевести обновление на поэтапный конвейер

👤 Автор: loop-uh
🔗 SHA: 771322e

📊 Статистика: 22 files changed, 1441 insertions(+), 792 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/updater.py
✏️ src/ui/page_composition.py
✏️ src/ui/page_deps/system.py
✏️ src/ui/page_deps/types.py
✏️ src/updater/commands.py
✏️ src/updater/github_release.py
✏️ src/updater/public.py
✏️ src/updater/release_manager.py
✏️ src/updater/retry_workers.py
✏️ src/updater/startup_update_check.py
✏️ src/updater/update.py
✏️ src/updater/update_page_runtime.py
🆕 src/updater/update_pipeline.py
✏️ tests/test_preset_profile_async_architecture.py
✏️ tests/test_server_status_worker_contract.py
✏️ tests/test_update_check_coordinator.py
✏️ tests/test_updater_cleanup_source_contract.py
✏️ tests/test_updater_download_contract.py
✏️ tests/test_updater_download_threading_import.py
✏️ tests/test_updater_install_runtime_architecture.py
🆕 tests/test_updater_pipeline_runtime.py
✏️ tests/test_updater_settings_worker_architecture.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Убрать блокировки интерфейса из DPI runtime

👤 Автор: loop-uh
🔗 SHA: 11afa05

📊 Статистика: 46 files changed, 623 insertions(+), 888 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_facades/runtime.py
✏️ src/app/feature_facades/runtime_parts.py
✏️ src/main/application_lifecycle.py
✏️ src/main/application_post_startup.py
✏️ src/main/post_startup.py
✏️ src/main/post_startup_profile_warmup.py
✏️ src/main/post_startup_user_presets_warmup.py
✏️ src/main/startup_coordinator.py
✏️ src/main/window_startup.py
✏️ src/orchestra/page_runtime.py
✏️ src/settings/dpi/page.py
✏️ src/settings/dpi/workers.py
✏️ src/telegram_proxy/ui/page_runtime.py
✏️ src/ui/page_deps/system.py
✏️ src/winws_runtime/monitoring/process_monitor_manager.py
✏️ src/winws_runtime/public.py
✏️ src/winws_runtime/runners/zapret1_runner.py
✏️ src/winws_runtime/runners/zapret2_runner.py
✏️ src/winws_runtime/runtime/autostart.py
✏️ src/winws_runtime/runtime/commands.py
✏️ src/winws_runtime/runtime/control_workers.py
✏️ src/winws_runtime/runtime/discord_restart_flow.py
✏️ src/winws_runtime/runtime/launch_runtime.py
✏️ src/winws_runtime/runtime/lifecycle_feedback.py
✏️ src/winws_runtime/runtime/method_switch_flow.py
✏️ src/winws_runtime/runtime/preset_launch_service.py
✏️ src/winws_runtime/runtime/restart_flow.py
✏️ src/winws_runtime/runtime/start_flow.py
✏️ src/winws_runtime/runtime/start_workers.py
✏️ src/winws_runtime/runtime/startup.py
✏️ src/winws_runtime/runtime/status_feedback.py
✏️ src/winws_runtime/runtime/status_flow.py
✏️ src/winws_runtime/runtime/stop_flow.py
✏️ src/winws_runtime/runtime/sync_shutdown.py
✏️ src/winws_runtime/state/launch_runtime_service.py
✏️ tests/test_exit_watch_autorestart.py
✏️ tests/test_main_startup_contract.py
✏️ tests/test_orchestra_worker_architecture.py
✏️ tests/test_preset_status_bar.py
✏️ tests/test_runtime_process_pid.py
✏️ tests/test_startup_autostart.py
✏️ tests/test_startup_autostart_order.py
✏️ tests/test_startup_bootstrap_metrics.py
✏️ tests/test_startup_post_init_autostart.py
✏️ tests/test_telegram_proxy_worker_architecture.py
🆕 tests/test_winws_runtime_ui_thread_contract.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Довести полный набор тестов до зелёного состояния

👤 Автор: loop-uh
🔗 SHA: 03afe9a

📊 Статистика: 11 files changed, 79 insertions(+), 53 deletions(-)

📁 Изменённые файлы:
✏️ src/profile/identity.py
✏️ src/profile/profile_setup_loader.py
✏️ src/profile/ui/simple_icons_bundle.py
✏️ src/updater/update_page_runtime.py
✏️ src/winws_log_analyzer/ui/build.py
✏️ src/winws_log_analyzer/ui/page.py
✏️ tests/test_build_resource_layout.py
✏️ tests/test_builtin_profile_catalog.py
✏️ tests/test_profile_setup_accessibility.py
✏️ tests/test_pyinstaller_archive_import_lock.py
✏️ tests/test_ui_performance_metrics.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Защитить кодировку описания выпуска

👤 Автор: loop-uh
🔗 SHA: 4c591dc

📊 Статистика: 1 file changed, 45 insertions(+)

📁 Изменённые файлы:
✏️ tests/test_build_resource_layout.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/todo

📝 Разбор контракта FakeTLS: что релей требует от ClientHello

👤 Автор: loop-uh
🔗 SHA: 0eb1abf

📊 Статистика: 3 files changed, 394 insertions(+)

📁 Изменённые файлы:
🆕 mtproxy/faketls-relay-diagnosis.md\n✏️ mtproxy/ja4-sni-client-side.md\n✏️ mtproxy/tdlib-obf-client-side-stealth.md\n
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/todo

📝 Пробу запускать с той машины, где симптом

👤 Автор: loop-uh
🔗 SHA: 13d1d2c

📊 Статистика: 1 file changed, 26 insertions(+), 1 deletion(-)

📁 Изменённые файлы:
✏️ mtproxy/faketls-relay-diagnosis.md\n
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Добавить Flowseal EXP 1.10.0 для Zapret 1

👤 Автор: loop-uh
🔗 SHA: 173a9bd

📊 Статистика: 4 files changed, 829 insertions(+), 1 deletion(-)

📁 Изменённые файлы:
✏️ src/folders/defaults.py
🆕 src/presets/builtin/winws1/general EXP 1.10.0 (game filter).txt
✏️ tests/test_builtin_profile_catalog.py
✏️ tests/test_folders_library.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Разделить общий hosts-ресурс по сервисам

👤 Автор: loop-uh
🔗 SHA: 23ca6e3

📊 Статистика: 2 files changed, 19 insertions(+), 4 deletions(-)

📁 Изменённые файлы:
✏️ src/hosts/proxy_domains.py
✏️ tests/test_hosts_catalog_json.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Добавить Flowseal EXP 1.10.0 для Zapret 2

👤 Автор: loop-uh
🔗 SHA: dad3c8c

📊 Статистика: 10 files changed, 1317 insertions(+), 6 deletions(-)

📁 Изменённые файлы:
✏️ src/folders/defaults.py
🆕 src/presets/builtin/winws2/general EXP 1.10.0 (game filter).txt
✏️ src/profile/strategy_catalogs/winws2/tcp.txt
✏️ src/profile/strategy_catalogs/winws2/udp.txt
✏️ src/profile/strategy_catalogs/winws2/voice.txt
✏️ src/winws_runtime/runners/zapret2_runner.py
✏️ tests/test_builtin_profile_catalog.py
✏️ tests/test_folders_library.py
✏️ tests/test_profile_strategy_resolution.py
✏️ tests/test_winws2_launch_preset_validation.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Исправить перенос описаний страниц

👤 Автор: loop-uh
🔗 SHA: a4a1b69

📊 Статистика: 2 files changed, 54 insertions(+)

📁 Изменённые файлы:
✏️ src/ui/pages/base_page.py
🆕 tests/test_base_page_layout.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Ограничить по времени разрешение имён во всех сетевых проверках

👤 Автор: loop-uh
🔗 SHA: 273c281

📊 Статистика: 19 files changed, 1125 insertions(+), 181 deletions(-)

📁 Изменённые файлы:
✏️ src/blockcheck/blockcheck2.py
✏️ src/blockcheck/dns_integrity.py
✏️ src/blockcheck/isp_page_detector.py
✏️ src/blockcheck/ping_tester.py
✏️ src/blockcheck/preflight.py
✏️ src/blockcheck/runner.py
✏️ src/blockcheck/strategy_scanner.py
✏️ src/blockcheck/stun_tester.py
✏️ src/blockcheck/tls_tester.py
✏️ src/diagnostics/worker.py
✏️ src/dns/commands.py
✏️ src/dns_checker.py
✏️ src/telegram_proxy/diagnostics/runner.py
🆕 src/utils/concurrency.py
🆕 src/utils/net_resolve.py
✏️ src/utils/windows_icmp.py
🆕 tests/test_net_resolve_deadline.py
✏️ tests/test_preset_profile_async_architecture.py
🆕 tests/test_type_checking_runtime_names.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Диагностировать молчаливое завершение winws по фактам

👤 Автор: loop-uh
🔗 SHA: b554a6f

📊 Статистика: 11 files changed, 1506 insertions(+), 73 deletions(-)

📁 Изменённые файлы:
✏️ src/utils/windows_event_log.py
✏️ src/winws_runtime/health/post_mortem.py
🆕 src/winws_runtime/health/silent_exit_probe.py
✏️ src/winws_runtime/health/winws_exit_diagnosis.py
🆕 src/winws_runtime/health/winws_output.py
✏️ src/winws_runtime/runners/spawn_failure.py
✏️ src/winws_runtime/runners/zapret1_runner.py
✏️ src/winws_runtime/runners/zapret2_runner.py
✏️ tests/test_exit_watch_autorestart.py
✏️ tests/test_post_mortem_diagnosis.py
🆕 tests/test_winws_silent_exit.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Проверять целостность поставки и чинить её самостоятельно

👤 Автор: loop-uh
🔗 SHA: f100d1f

📊 Статистика: 70 files changed, 7957 insertions(+), 185 deletions(-)

📁 Изменённые файлы:
✏️ src/app/feature_assembly.py
🆕 src/app/feature_facades/installation_repair.py
✏️ src/app/feature_facades/runtime.py
✏️ src/app/feature_facades/runtime_parts.py
✏️ src/app/feature_facades/updater.py
✏️ src/blockcheck/config.py
✏️ src/blockcheck/dns_integrity.py
🆕 src/blockcheck/hosts.py
✏️ src/blockcheck/models.py
✏️ src/blockcheck/tls_tester.py
🆕 src/blockcheck/verdict/__init__.py
🆕 src/blockcheck/verdict/aggregate.py
🆕 src/blockcheck/verdict/baseline.py
🆕 src/blockcheck/verdict/signatures.py
✏️ src/config/runtime_layout.py
✏️ src/config/urls.py
🆕 src/install_integrity/__init__.py
🆕 src/install_integrity/manifest.py
🆕 src/install_integrity/messages.py
🆕 src/install_integrity/models.py
🆕 src/install_integrity/verify.py
🆕 src/log/hang_watchdog.py
✏️ src/main/application_lifecycle.py
✏️ src/main/application_post_startup.py
✏️ src/main/post_startup.py
🆕 src/main/post_startup_integrity.py
✏️ src/main/post_startup_update.py
✏️ src/main/qt_runtime.py
✏️ src/profile/ui/profile_payload_controller.py
✏️ src/settings/normalize.py
✏️ src/settings/schema.py
✏️ src/settings/store.py
🆕 src/ui/background_worker_gate.py
✏️ src/ui/one_shot_worker_runtime.py
🆕 src/ui/ui_freeze_watchdog.py
🆕 src/ui/ui_thread_guard.py
✏️ src/updater/commands.py
🆕 src/updater/handoff_state.py
🆕 src/updater/interrupted_update.py
✏️ src/updater/public.py
🆕 src/updater/recovery_hook.py
🆕 src/updater/repair_workers.py
🆕 src/updater/self_repair.py
🆕 src/updater/update_paths.py
✏️ src/updater/update_pipeline.py
🆕 src/updater/update_watchdog.py
🆕 src/utils/file_digest.py
🆕 src/winws_runtime/health/installation_preflight.py
✏️ src/winws_runtime/health/process_health_check.py
✏️ src/winws_runtime/health/startup_error_diagnosis.py
✏️ src/winws_runtime/runtime/preset_launch_service.py
✏️ src/winws_runtime/runtime/start_workers.py
🆕 tests/test_background_worker_gate.py
✏️ tests/test_build_resource_layout.py
✏️ tests/test_external_page_action_worker_boundaries.py
🆕 tests/test_gui_gil_switch_interval.py
🆕 tests/test_hang_watchdog.py
🆕 tests/test_install_integrity.py
🆕 tests/test_installation_self_repair.py
🆕 tests/test_installer_runtime_swap.py
🆕 tests/test_profile_payload_hidden_page_reload.py
✏️ tests/test_profile_setup_accessibility.py
🆕 tests/test_ui_freeze_watchdog.py
🆕 tests/test_ui_worker_thread_contract.py
🆕 tests/test_updater_handoff_state.py
🆕 tests/test_updater_interrupted_update.py
🆕 tests/test_updater_state_paths.py
🆕 tests/test_updater_watchdog_launch.py
🆕 tests/test_updater_watchdog_windows.py
✏️ tests/test_user_presets_accessibility.py

🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord

🔔 Новый коммит в youtubediscord/zapret

📝 Свести наблюдение за зависаниями интерфейса к одному watchdog

👤 Автор: loop-uh
🔗 SHA: c868af7

📊 Статистика: 7 files changed, 610 insertions(+), 895 deletions(-)

📁 Изменённые файлы:
🗑️ src/log/hang_watchdog.py
🆕 src/log/thread_dump.py
✏️ src/main/qt_runtime.py
✏️ src/ui/ui_freeze_watchdog.py
🗑️ tests/test_hang_watchdog.py
🆕 tests/test_thread_dump.py
🆕 tests/test_ui_freeze_watchdog_dump.py

🔗 Открыть на GitHub