💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить жизненный цикл fluent-диалогов
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 21 files changed, 180 insertions(+), 21 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить жизненный цикл fluent-диалогов
👤 Автор: loop-uh
🔗 SHA:
e73221d📊 Статистика: 21 files changed, 180 insertions(+), 21 deletions(-)
📁 Изменённые файлы:
✏️
src/dns/ui/custom_dns_dialog.py✏️
src/dns/ui/page.py✏️
src/donater/ui/page.py✏️
src/hosts/ui/page.py✏️
src/main/post_startup_host.py✏️
src/orchestra/ui/blocked_page.py✏️
src/orchestra/ui/locked_page.py✏️
src/orchestra/ui/whitelist_page.py✏️
src/presets/ui/common/preset_subpage_base.py✏️
src/presets/ui/common/user_presets_dialogs.py✏️
src/presets/ui/common/user_presets_page.py✏️
src/presets/ui/control/windows_features/runtime.py✏️
src/presets/ui/zapret2/preset_dialogs.py✏️
src/profile/ui/preset_setup_page.py✏️
src/profile/ui/profile_setup_page.py✏️
src/profile/ui/user_profile_dialog.py✏️
src/ui/close_dialog.py🆕
src/ui/fluent_dialog.py✏️
src/ui/widgets/folder_context_menu.py🆕
tests/test_fluent_dialog_lifecycle.py✏️
tests/test_post_startup_host_accessibility.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 Merge pull request #6 from codex/publish-vault-notes
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 45 files changed, 4860 insertions(+), 643 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 Merge pull request #6 from codex/publish-vault-notes
👤 Автор: loop-uh
🔗 SHA:
899b5ba📊 Статистика: 45 files changed, 4860 insertions(+), 643 deletions(-)
📁 Изменённые файлы:
✏️
DPI/economic-filter-foreign-channels-2026.md\n✏️ DPI/rkn-vpn-2030-roadmap.md\n✏️ DPI/tspu-false-blocks-june-2026.md\n🆕 DPI/vpn-blocking-wave-forecast-summer-2026.md\n✏️ VLESS/dpi-tls-june-2026.md\n✏️ Zapret/android.md\n🆕 Zapret/attachments/magisk-zapret2-ui-2026-07.png\n🆕 Zapret/magisk-zapret2.md\n✏️ Zapret2/Zapret2.md\n✏️ Zapret2/desync.md\n✏️ Zapret2/desync/fake.md\n✏️ Zapret2/desync/fakeddisorder.md\n✏️ Zapret2/desync/fakedsplit.md\n✏️ Zapret2/desync/hostfakesplit.md\n✏️ Zapret2/desync/multidisorder.md\n✏️ Zapret2/desync/multidisorder_legacy.md\n✏️ Zapret2/desync/multisplit.md\n✏️ Zapret2/desync/oob.md\n✏️ Zapret2/desync/syndata.md\n✏️ Zapret2/desync/tcpseg.md\n✏️ Zapret2/filter.md\n✏️ Zapret2/payload.md\n🆕 "Zapret2/\320\266\320\270\320\267\320\275\320\265\320\275\320\275\321\213\320\271 \321\206\320\270\320\272\320\273 desync-\321\204\321\203\320\275\320\272\321\206\320\270\320\270.md"\n🆕 "Zapret2/\321\201\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 desync \320\270 \320\264\320\270\321\201\321\201\320\265\320\272\321\202\320\260.md"\n✏️ "Zapret2/\321\201\321\205\320\265\320\274\320\260 \320\276\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\270 \321\202\321\200\320\260\321\204\320\270\320\272\320\260.md"\n🆕 root/LSPosed.md\n🆕 root/Magisk-install.md\n🆕 root/Magisk.md\n🆕 root/ReSukiSU-install.md\n✏️ root/ReSukiSU.md\n🆕 root/attachments/resukisu-build-manager-jobs-2026-07.png\n🆕 sing-box/architecture.md\n🆕 sing-box/hardcoded-defaults.md\n🆕 sing-box/protocols-origin.md\n🆕 sing-box/sing-box-extended.md\n🆕 sing-box/wire-protocol-explained.md\n🆕 xray/authors-v2ray-xray.md\n🆕 xray/clients-and-routing.md\n🆕 xray/project-x.md\n🆕 xray/reality.md\n🆕 xray/routing.md\n🆕 xray/v2fly-vs-xray.md\n🆕 xray/vless.md\n🆕 xray/xhttp.md\n🆕 xray/xtls-vision.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 Merge pull request #7 from youtubediscord/codex/clash-mihomo-notes
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 28 files changed, 2360 insertions(+), 2 deletions(-)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 Merge pull request #7 from youtubediscord/codex/clash-mihomo-notes
👤 Автор: loop-uh
🔗 SHA:
b653af2📊 Статистика: 28 files changed, 2360 insertions(+), 2 deletions(-)
📁 Изменённые файлы:
🆕
Clash/00-overview.md\n🆕 Clash/01-clash-core.md\n🆕 Clash/02-mihomo.md\n🆕 Clash/03-first-run.md\n🆕 Clash/04-rules.md\n🆕 Clash/05-troubleshooting.md\n🆕 Clash/06-features-protocols.md\n🆕 Clash/07-clients.md\n🆕 Clash/08-vs-sing-box.md\n🆕 Clash/09-glossary.md\n✏️ Hysteria/00-overview.md\n✏️ Zapret/premium.md\n✏️ premium/premium.md\n🆕 premium/zapret-vpn-bot.md\n🆕 protocols/00-overview.md\n🆕 protocols/anytls.md\n🆕 protocols/naiveproxy.md\n🆕 protocols/shadowsocks.md\n🆕 protocols/shadowtls.md\n🆕 protocols/trojan.md\n🆕 protocols/tuic.md\n🆕 protocols/vmess.md\n✏️ sing-box/architecture.md\n✏️ sing-box/sing-box-extended.md\n🆕 subscriptions/hwid-client-lock.md\n✏️ xray/clients-and-routing.md\n✏️ xray/project-x.md\n✏️ xray/vless.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: правила работы с репозиторием
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 1 file changed, 45 insertions(+)
📁 Изменённые файлы:
🆕
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: правила работы с репозиторием
👤 Автор: loop-uh
🔗 SHA:
7683369📊 Статистика: 1 file changed, 45 insertions(+)
📁 Изменённые файлы:
🆕
AGENTS.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: исключён из публикации через publish: false
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 1 file changed, 9 insertions(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: исключён из публикации через publish: false
👤 Автор: loop-uh
🔗 SHA:
59ff39d📊 Статистика: 1 file changed, 9 insertions(+), 1 deletion(-)
📁 Изменённые файлы:
✏️
AGENTS.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: проверки ссылок через Obsidian CLI
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 1 file changed, 13 insertions(+)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 AGENTS.md: проверки ссылок через Obsidian CLI
👤 Автор: loop-uh
🔗 SHA:
d1f9a03📊 Статистика: 1 file changed, 13 insertions(+)
📁 Изменённые файлы:
✏️
AGENTS.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 Исправлена таблица поддержки протоколов по ядрам
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 4 files changed, 14 insertions(+), 10 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 Исправлена таблица поддержки протоколов по ядрам
👤 Автор: loop-uh
🔗 SHA:
3d65bd4📊 Статистика: 4 files changed, 14 insertions(+), 10 deletions(-)
📁 Изменённые файлы:
✏️
Clash/08-vs-sing-box.md\n✏️ Hysteria/00-overview.md\n✏️ protocols/00-overview.md\n✏️ protocols/tuic.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 Чистка битых wikilinks по всему хранилищу
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 6 files changed, 15 insertions(+), 15 deletions(-)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 Чистка битых wikilinks по всему хранилищу
👤 Автор: loop-uh
🔗 SHA:
f4099f8📊 Статистика: 6 files changed, 15 insertions(+), 15 deletions(-)
📁 Изменённые файлы:
✏️
Zapret/flowseal-zapret-discord-youtube-block-july-2026.md\n✏️ Zapret2/desync/fakeddisorder.md\n✏️ Zapret2/desync/hostfakesplit.md\n✏️ Zapret2/desync/oob.md\n✏️ Zapret2/desync/syndata.md\n✏️ xray/project-x.md\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/todo
📝 Закрыт раздел VPS/ от публикации, добавлен безопасный скрипт публикации
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 3 files changed, 31 insertions(+)
📁 Изменённые файлы:
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/todo
📝 Закрыт раздел VPS/ от публикации, добавлен безопасный скрипт публикации
👤 Автор: loop-uh
🔗 SHA:
bcfabe4📊 Статистика: 3 files changed, 31 insertions(+)
📁 Изменённые файлы:
✏️
AGENTS.md\n🆕 Zapret/attachments/Pasted image 20260714003302.png\n🆕 scripts/publish-safe.sh\n🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 fix(profile): allow top-level hostlist suffixes
👤 Автор: loop-uh
🔗 SHA:
📊 Статистика: 2 files changed, 12 insertions(+), 3 deletions(-)
📁 Изменённые файлы:
✏️
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 fix(profile): allow top-level hostlist suffixes
👤 Автор: loop-uh
🔗 SHA:
5232c3c📊 Статистика: 2 files changed, 12 insertions(+), 3 deletions(-)
📁 Изменённые файлы:
✏️
src/profile/list_file_editor.py✏️
tests/test_profile_list_file_editor.py🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить командную сборку установщика
👤 Автор: loop-uh
📅 Дата: 24.07.2026 11:30:00
🔗 SHA:
📊 Статистика:
➕ Добавлено: 130 строк
➖ Удалено: 2 строк
📝 Всего изменений: 132
📁 Изменено файлов: 1
✏️
+130 -2
Удалилось:
Добавилось:
... и еще 108 строк
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить командную сборку установщика
👤 Автор: loop-uh
📅 Дата: 24.07.2026 11:30:00
🔗 SHA:
6a7bd34📊 Статистика:
➕ Добавлено: 130 строк
➖ Удалено: 2 строк
📝 Всего изменений: 132
📁 Изменено файлов: 1
✏️
tests/test_build_resource_layout.py+130 -2
Удалилось:
self.assertIn('self.build_method_var = tk.StringVar(value="nuitka")', gui)self.assertIn('default="nuitka"', cli)Добавилось:
import json
self.assertIn('DEFAULT_BUILD_METHOD = "nuitka"', gui)self.assertIn('self.build_method_var = tk.StringVar(value=DEFAULT_BUILD_METHOD)', gui)self.assertIn("default=DEFAULT_BUILD_METHOD", cli)with patch.object(
build_release_cli,
"check_telegram_configured",
return_value=(True, "Telegram настроен"),
):
defaults = build_release_cli.parse_args(
... и еще 108 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить выбор следующей версии выпуска
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:00:14
🔗 SHA:
📊 Статистика:
➕ Добавлено: 50 строк
➖ Удалено: 0 строк
📝 Всего изменений: 50
📁 Изменено файлов: 1
✏️
+50 -0
Добавилось:
... и еще 37 строк
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить выбор следующей версии выпуска
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:00:14
🔗 SHA:
a540dd6📊 Статистика:
➕ Добавлено: 50 строк
➖ Удалено: 0 строк
📝 Всего изменений: 50
📁 Изменено файлов: 1
✏️
tests/test_build_resource_layout.py+50 -0
Добавилось:
self.assertTrue(defaults.version_is_explicit)
def test_cli_defaults_to_dev_and_increments_fourth_version_part_independently(self) -> None:
build_path = PRIVATE_ROOT / "build_zapret"
old_path = list(sys.path)
sys.path.insert(0, str(build_path))
try:
sys.modules.pop("build_release_cli", None)import build_release_cli
with tempfile.TemporaryDirectory() as temp_dir:
versions_file = Path(temp_dir) / "version_Local.json"
... и еще 37 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Скрыть окна команд выпуска
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:07:49
🔗 SHA:
📊 Статистика:
➕ Добавлено: 31 строк
➖ Удалено: 0 строк
📝 Всего изменений: 31
📁 Изменено файлов: 1
✏️
+31 -0
Добавилось:
... и еще 17 строк
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Скрыть окна команд выпуска
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:07:49
🔗 SHA:
3339f5b📊 Статистика:
➕ Добавлено: 31 строк
➖ Удалено: 0 строк
📝 Всего изменений: 31
📁 Изменено файлов: 1
✏️
tests/test_build_resource_layout.py+31 -0
Добавилось:
def test_scheduled_release_task_is_registered_without_console_window(self) -> None:
registration = (
PRIVATE_ROOT / "register_release_task.ps1"
).read_text(encoding="utf-8")
readme = (
PRIVATE_ROOT / "build_zapret" / "README.md"
).read_text(encoding="utf-8")
self.assertIn("'pythonw.exe'", registration)self.assertIn("-m build_zapret.scheduled_release_task", registration)self.assertIn("-WorkingDirectory $PrivateRoot", registration)... и еще 17 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить скрытый вывод публикации
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:15:52
🔗 SHA:
📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 0 строк
📝 Всего изменений: 1
📁 Изменено файлов: 1
✏️
+1 -0
Добавилось:
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Проверить скрытый вывод публикации
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:15:52
🔗 SHA:
d408c9a📊 Статистика:
➕ Добавлено: 1 строк
➖ Удалено: 0 строк
📝 Всего изменений: 1
📁 Изменено файлов: 1
✏️
tests/test_build_resource_layout.py+1 -0
Добавилось:
self.assertNotIn("capture_output=True,\n text=True,\n creationflags", ssh)🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Закрепить единый конвейер сборки GUI и CLI
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:40:43
🔗 SHA:
📊 Статистика:
➕ Добавлено: 309 строк
➖ Удалено: 138 строк
📝 Всего изменений: 447
📁 Изменено файлов: 1
✏️
+309 -138
Удалилось:
... и еще 125 строк
Добавилось:
... и еще 288 строк
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Закрепить единый конвейер сборки GUI и CLI
👤 Автор: loop-uh
📅 Дата: 24.07.2026 14:40:43
🔗 SHA:
7f36263📊 Статистика:
➕ Добавлено: 309 строк
➖ Удалено: 138 строк
📝 Всего изменений: 447
📁 Изменено файлов: 1
✏️
tests/test_build_resource_layout.py+309 -138
Удалилось:
self.assertIn('DEFAULT_BUILD_METHOD = "nuitka"', gui)self.assertIn("Запуск из исходников запрещён", gui)self.assertIn("Запуск приложения из исходников запрещён", cli)build_path = PRIVATE_ROOT / "build_zapret"
sys.path.insert(0, str(build_path))
sys.modules.pop("build_release_cli", None)import build_release_cli
defaults = build_release_cli.parse_args(
parsed = build_release_cli.parse_args(
options = build_release_cli.BuildOptions(
... и еще 125 строк
Добавилось:
@staticmethod
def _release_request(release_model, **overrides):
values = {"channel": "dev",
"version": "1.2.3.4",
"notes": "test",
"build_method": "nuitka",
"fast_exe": False,
"fast_exe_dest": None,
"publish_telegram": False,
... и еще 288 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить замену верхней панели окна
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:02:14
🔗 SHA:
📊 Статистика:
➕ Добавлено: 28 строк
➖ Удалено: 0 строк
📝 Всего изменений: 28
📁 Изменено файлов: 2
✏️
+14 -0
Добавилось:
... и еще 1 строк
✏️
+14 -0
Добавилось:
... и еще 1 строк
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить замену верхней панели окна
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:02:14
🔗 SHA:
7885568📊 Статистика:
➕ Добавлено: 28 строк
➖ Удалено: 0 строк
📝 Всего изменений: 28
📁 Изменено файлов: 2
✏️
src/ui/fluent_app_window.py+14 -0
Добавилось:
def setTitleBar(self, title_bar) -> None: # noqa: N802 (qfluentwidgets API)
"""Безопасно заменяет верхнюю панель окна.
qframelesswindow регистрирует каждую TitleBar как фильтр событий окна,
но при замене только откладывает её удаление. На Python 3.14 / PyQt6
6.11 старая панель иногда успевает получить WindowStateChange уже во
время очистки Python-объекта, когда maxBtn в нём больше нет.
"""
previous_title_bar = getattr(self, "titleBar", None)
if previous_title_bar is not None and previous_title_bar is not title_bar:
self.removeEventFilter(previous_title_bar)
... и еще 1 строк
✏️
tests/test_fluent_app_window_chrome.py+14 -0
Добавилось:
def test_replaced_titlebar_is_removed_from_window_event_filters(self) -> None:
class EventFilterTrackingWindow(ZapretFluentWindow):
def removeEventFilter(self, event_filter) -> None: # noqa: N802
detached = self.__dict__.setdefault("_detached_event_filters", [])detached.append(event_filter)
super().removeEventFilter(event_filter)
window = EventFilterTrackingWindow()
detached = window.__dict__.get("_detached_event_filters", [])self.assertGreaterEqual(len(detached), 1)
self.assertNotIn(window.titleBar, detached)
... и еще 1 строк
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Закрепить актуальные версии библиотек
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:19:28
🔗 SHA:
📊 Статистика:
➕ Добавлено: 124 строк
➖ Удалено: 61 строк
📝 Всего изменений: 185
📁 Изменено файлов: 9
✏️
+1 -1
Удалилось:
Добавилось:
🆕
+7 -0
Добавилось:
🆕
+4 -0
Добавилось:
🆕
+6 -0
Добавилось:
🆕
+26 -0
Добавилось:
... и еще 12 строк
✏️
+9 -56
Удалилось:
... и еще 37 строк
Добавилось:
✏️
+5 -0
Добавилось:
✏️
+5 -4
Удалилось:
Добавилось:
... и еще 1 файлов
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Закрепить актуальные версии библиотек
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:19:28
🔗 SHA:
4982868📊 Статистика:
➕ Добавлено: 124 строк
➖ Удалено: 61 строк
📝 Всего изменений: 185
📁 Изменено файлов: 9
✏️
.github/workflows/windows-release.yml+1 -1
Удалилось:
python -m pip install nuitka pyinstaller PyQt6 PyQt6-Qt6 PyQt6-sip pywin32 psutil requests urllib...
Добавилось:
python -m pip install --upgrade --upgrade-strategy eager -r requirements-build.txt
🆕
requirements-build.txt+7 -0
Добавилось:
# Каноническое окружение сборки runtime.
# Этот файл устанавливает действующий GitHub Actions workflow.
-r requirements-runtime.txt
PyInstaller==6.21.0
Nuitka==4.1.3
🆕
requirements-dev.txt+4 -0
Добавилось:
# Инструменты разработки, тестов и генерации ресурсов.
pytest==9.1.1
simplepycons==1!16.27.0
🆕
requirements-publish.txt+6 -0
Добавилось:
# Инструменты публикации выпуска.
PyGithub==2.9.1
paramiko==5.0.0
Pyrogram==2.0.106
Telethon==1.44.0
🆕
requirements-runtime.txt+26 -0
Добавилось:
# Библиотеки, которые использует приложение и которые попадают в runtime.
# Последняя сверка с PyPI: 2026-07-24.
# GUI
PyQt6==6.11.0
PyQt6-Qt6==6.11.1
PyQt6-sip==13.11.1
PyQt6-Fluent-Widgets==1.11.2
PyQt6-Frameless-Window==0.8.1
QtAwesome==1.4.2
# Сеть и HTTP
... и еще 12 строк
✏️
requirements.txt+9 -56
Удалилось:
# requirements.txt — Zapret GUI
# "C:\Program Files\Python314\Scripts\pip.exe" install -r requirements.txt
# python.exe -m pip install --upgrade pip
# ════════════════════════════════════════════════════════════
# Runtime (попадает в exe — это же ставит CI в windows-release.yml)
# ════════════════════════════════════════════════════════════
# GUI Framework
PyQt6
PyQt6-Qt6
PyQt6-sip
... и еще 37 строк
Добавилось:
# Полное окружение разработки и выпуска ZapretGUI.
# Версии пакетов находятся только в профильных файлах ниже.
#
# Установка на Windows:
# py -3.14 -m pip install --upgrade --upgrade-strategy eager -r requirements.txt
-r requirements-build.txt
-r requirements-publish.txt
-r requirements-dev.txt
✏️
tests/test_build_resource_layout.py+5 -0
Добавилось:
self.assertIn(
"python -m pip install --upgrade --upgrade-strategy eager -r requirements-build.txt",
workflow,
)
self.assertNotIn("pip install nuitka pyinstaller", workflow.lower())✏️
tests/test_crypto_dependency_trim.py+5 -4
Удалилось:
checked_paths = [ROOT / "requirements.txt", ROOT / ".github" / "workflows" / "windows-release.yml"]
requirements = (ROOT / "requirements.txt").read_text(encoding="utf-8")
self.assertIn("tgcrypto", requirements)self.assertIn("tgcrypto", workflow)Добавилось:
checked_paths = list(ROOT.glob("requirements*.txt"))checked_paths.append(ROOT / ".github" / "workflows" / "windows-release.yml")
runtime_requirements = (ROOT / "requirements-runtime.txt").read_text(encoding="utf-8")
self.assertIn("TgCrypto==1.2.5", runtime_requirements)self.assertIn("-r requirements-build.txt", workflow)... и еще 1 файлов
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить публичную Windows-сборку без закрытого значка
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:23:47
🔗 SHA:
📊 Статистика:
➕ Добавлено: 2 строк
➖ Удалено: 2 строк
📝 Всего изменений: 4
📁 Изменено файлов: 2
✏️
+0 -2
Удалилось:
✏️
+2 -0
Добавилось:
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить публичную Windows-сборку без закрытого значка
👤 Автор: loop-uh
📅 Дата: 24.07.2026 15:23:47
🔗 SHA:
e485607📊 Статистика:
➕ Добавлено: 2 строк
➖ Удалено: 2 строк
📝 Всего изменений: 4
📁 Изменено файлов: 2
✏️
.github/workflows/windows-release.yml+0 -2
Удалилось:
"--windows-icon-from-ico=src\ico\Zapret2.ico",
"--icon", "src\ico\Zapret2.ico",
✏️
tests/test_build_resource_layout.py+2 -0
Добавилось:
self.assertNotIn(r"src\ico", workflow)
self.assertNotIn("--windows-icon-from-ico", workflow)🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить жизненный цикл fluent-диалогов
👤 Автор: loop-uh
📅 Дата: 24.07.2026 16:10:05
🔗 SHA:
📊 Статистика:
➕ Добавлено: 180 строк
➖ Удалено: 21 строк
📝 Всего изменений: 201
📁 Изменено файлов: 21
✏️
+2 -1
Удалилось:
Добавилось:
✏️
+2 -1
Удалилось:
Добавилось:
✏️
+2 -1
Удалилось:
Добавилось:
✏️
+2 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -1
Удалилось:
Добавилось:
✏️
+1 -2
Удалилось:
Добавилось:
✏️
+2 -1
Удалилось:
Добавилось:
... и еще 11 файлов
🔗 Открыть на GitHub
🔔 Новый коммит в youtubediscord/zapret
📝 Исправить жизненный цикл fluent-диалогов
👤 Автор: loop-uh
📅 Дата: 24.07.2026 16:10:05
🔗 SHA:
e73221d📊 Статистика:
➕ Добавлено: 180 строк
➖ Удалено: 21 строк
📝 Всего изменений: 201
📁 Изменено файлов: 21
✏️
src/dns/ui/custom_dns_dialog.py+2 -1
Удалилось:
from qfluentwidgets import BodyLabel, CaptionLabel, LineEdit, MessageBoxBase, SubtitleLabel
Добавилось:
from qfluentwidgets import BodyLabel, CaptionLabel, LineEdit, SubtitleLabel
from ui.fluent_dialog import MessageBoxBase
✏️
src/dns/ui/page.py+2 -1
Удалилось:
InfoBarPosition, LineEdit, MessageBox, PushButton, RoundMenu, SettingCardGroup, StrongBodyLabel,
Добавилось:
InfoBarPosition, LineEdit, PushButton, RoundMenu, SettingCardGroup, StrongBodyLabel,
from ui.fluent_dialog import MessageBox
✏️
src/donater/ui/page.py+2 -1
Удалилось:
from qfluentwidgets import BodyLabel, InfoBar, MessageBox, SubtitleLabel
Добавилось:
from qfluentwidgets import BodyLabel, InfoBar, SubtitleLabel
from ui.fluent_dialog import MessageBox
✏️
src/hosts/ui/page.py+2 -1
Удалилось:
BodyLabel, CaptionLabel, ComboBox, InfoBar, MessageBox, PushButton,
Добавилось:
BodyLabel, CaptionLabel, ComboBox, InfoBar, PushButton,
from ui.fluent_dialog import MessageBox
✏️
src/main/post_startup_host.py+1 -1
Удалилось:
from qfluentwidgets import MessageBox
Добавилось:
from ui.fluent_dialog import MessageBox
✏️
src/orchestra/ui/blocked_page.py+1 -1
Удалилось:
MessageBox,
Добавилось:
from ui.fluent_dialog import MessageBox
✏️
src/orchestra/ui/locked_page.py+1 -1
Удалилось:
MessageBox,
Добавилось:
from ui.fluent_dialog import MessageBox
✏️
src/orchestra/ui/whitelist_page.py+1 -1
Удалилось:
MessageBox,
Добавилось:
from ui.fluent_dialog import MessageBox
✏️
src/presets/ui/common/preset_subpage_base.py+1 -2
Удалилось:
MessageBox,
MessageBoxBase,
Добавилось:
from ui.fluent_dialog import MessageBox, MessageBoxBase
✏️
src/presets/ui/common/user_presets_dialogs.py+2 -1
Удалилось:
from qfluentwidgets import BodyLabel, CaptionLabel, LineEdit, MessageBoxBase, SubtitleLabel
Добавилось:
from qfluentwidgets import BodyLabel, CaptionLabel, LineEdit, SubtitleLabel
from ui.fluent_dialog import MessageBoxBase
... и еще 11 файлов
🔗 Открыть на GitHub
💥 ВСЕ НАШИ ССЫЛКИ: https://t.me/runetvpnyoutubediscord
🔔 Новый коммит в youtubediscord/zapret
📝 fix(profile): allow top-level hostlist suffixes
👤 Автор: loop-uh
📅 Дата: 25.07.2026 13:40:14
🔗 SHA:
📊 Статистика:
➕ Добавлено: 12 строк
➖ Удалено: 3 строк
📝 Всего изменений: 15
📁 Изменено файлов: 2
✏️
+4 -3
Удалилось:
Добавилось:
✏️
+8 -0
Добавилось:
🔗 Открыть на GitHub
🔔 Новый коммит в 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:
📊 Статистика: 15 files changed, 581 insertions(+), 33 deletions(-)
📁 Изменённые файлы:
✏️
✏️
✏️
✏️
✏️
✏️
✏️
✏️
🆕
✏️
✏️
✏️
✏️
🆕
✏️
🔗 Открыть на GitHub
🔔 Новый коммит в 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