From 13b1659a8394facc55beb86aa719cb9bed193ee6 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 12 Nov 2026 15:24:24 +0000
Subject: [PATCH] Prepare v0.4.0
---
Directory.Build.props | 4 ++--
release-notes/v0.4.0.md | 25 +++++++++++++++++++++++++
2 files changed, 27 insertions(+), 2 deletions(-)
create mode 100644 release-notes/v0.4.0.md
diff --git a/Directory.Build.props b/Directory.Build.props
index d5dcc93..32ed0a6 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -4,7 +4,7 @@
enable
disable
true
- 0.3.4
+ 0.4.0
MIT
10.0.14
true
@@ -14,6 +14,6 @@
$(DefineConstants);MEGAPROXY_DEV
obj/dev/
bin/dev/
- 0.3.4-dev
+ 0.4.0-dev
diff --git a/release-notes/v0.4.0.md b/release-notes/v0.4.0.md
new file mode 100644
index 0000000..b5e2f56
--- /dev/null
+++ b/release-notes/v0.4.0.md
@@ -0,0 +1,25 @@
+# v0.4.0
+
+## English
+
+- License re-scope and installer acceptance: repository root license changed to MIT while src/ and native/core/ contain GPL text, the interactive installer now shows an offline license acceptance page that must be checked to advance, the installer defaults to per-user for new installs and preserves scope on upgrades, silent installs skip the acceptance step, and packaging now includes LICENSING.md plus per-component license files in the payload.
+- App update gate depends on WindowsOptions["version"]: if WindowsOptions["version"] is present and not equal to 1, ThroughProxy(...) returns false regardless of the previous option, and Enabled(...) returns true for unsupported version values, changing when update-through-proxy is honored.
+- Import/export sanitization and fingerprint normalization: portable configuration import/export now runs ConfigurationFields.Project to prune unknown/unsupported fields and to normalize TLS/SSH fingerprint tokens to canonical uppercase tokens (e.g. CHROME_ANDROID → normalized), and the UI portable-fingerprint controls were updated to those tokens.
+- TLS/uTLS behavior and removed "native" special-case: the code no longer treats a "native" fingerprint as a special branch and always enables the uTLS object with a resolved fingerprint; UI options are reduced to DEFAULT, CHROME_ANDROID, FIREFOX_ANDROID, EDGE_ANDROID and RANDOMIZED, which are mapped to lower-case core strings for outbound traffic.
+- IPv6 handling change: per-profile allowIpv6 is ignored on Windows (ProxyProfile.AllowIpv6 returns true) and the client no longer injects ip_version=6 reject rules or switches to an ipv4-only DNS strategy when imported settings attempted to disable IPv6.
+- Tray icon recovery: MainWindow now watches for TaskbarCreated and polls the NotifyIcon registration, restoring the tray icon automatically if Explorer/taskbar recreation or missing registration is detected.
+- Shared SSH fingerprint propagation: a shared SSH fingerprint in settings.SharedOptions["ssh"]["fingerprint"] is applied into SSH and SSH_JUMP profile outbound data at build time, and the profile editor surfaces this global SSH fingerprint when present.
+- Source packaging changes: release/source packaging scripts now copy LICENSING.md into the payload and can append linked Go module sources, pinned Go runtime sources and a hash-verified WiX source snapshot into the published source ZIP, and the bundling code fails early if required dependency sources are missing.
+- Documentation and UX clarifications: docs were updated to state that portable exports include passwords/private keys by default (documented policy), reverse-DNS and connection-row refresh happen only while the Connections tab is focused, and release notes now document VirusTotal submission as a publication policy (the repo contains the documentation and packaging scripts that change archive composition).
+
+## Русский
+
+- Перераспределение лицензий и приём лицензии в установщике: корневая LICENSE переведена на MIT, в src/ и native/core/ оставлены тексты под GPL, в интерактивном установщике появился офлайн-экран принятия лицензии, который нужно отметить для продолжения; новый установщик по умолчанию предлагает установку для текущего пользователя и сохраняет область установки при обновлении, тихие установки пропускают экран принятия, а пакетный сборщик теперь включает LICENSING.md и файлы лицензий по компонентам в payload.
+- Зависимость обновлений от WindowsOptions["version"]: если WindowsOptions["version"] присутствует и не равен 1, ThroughProxy(...) всегда возвращает false независимо от прежней опции, а Enabled(...) возвращает true для неподдерживаемых значений версии, что меняет условие использования обновлений через прокси.
+- Санитизация конфигураций и нормализация отпечатков: импорт/экспорт портируемой конфигурации теперь проходят через ConfigurationFields.Project, который удаляет неизвестные/неподдерживаемые поля и нормализует TLS/SSH‑отпечатки к каноническим верхним токенам (например, CHROME_ANDROID), UI‑элементы выбора отпечатка приведены к этим токенам.
+- uTLS и удаление ветви "native": код больше не обрабатывает "native" как особый случай и всегда включает объект uTLS с вычисленным отпечатком; в UI остались только DEFAULT, CHROME_ANDROID, FIREFOX_ANDROID, EDGE_ANDROID и RANDOMIZED, которые затем отображаются в ядре в виде нижних строчных строк для исходящего трафика.
+- Работа с IPv6: флаг allowIpv6 на уровне профиля игнорируется в Windows (ProxyProfile.AllowIpv6 всегда true), импортированные настройки, отключающие IPv6, больше не создают правил-отказов ip_version=6 и не переключают DNS‑стратегию в ipv4‑only.
+- Восстановление иконки в трее: MainWindow отслеживает TaskbarCreated и опрашивает регистрацию NotifyIcon, автоматически восстанавливая иконку в трее при перепуске Explorer/восстановлении панели задач или при пропаже регистрации.
+- Глобальный SSH-отпечаток: общий SSH‑отпечаток в settings.SharedOptions["ssh"]["fingerprint"] применяется к профилям типа SSH и SSH_JUMP при построении outbound, а редактор профиля отображает информацию о глобальном SSH‑отпечатке, если он установлен.
+- Изменения в упаковке исходников: скрипты упаковки теперь копируют LICENSING.md в payload и могут добавлять в ZIP исходники связанных Go‑модулей, зафиксированные исходники рантайма Go и хеш‑проверенный WiX‑снимок, причём сборка завершается ошибкой при отсутствии ожидаемых зависимостей.
+- Документация и UX: обновлены документы — экспорт портируемых конфигураций теперь в тексте документации указан как включающий пароли/ключи по умолчанию, обратный DNS и обновление строк соединений выполняются только при открытой вкладке Connections, а в релизных заметках задокументирована политика отправки сборок в VirusTotal (это зафиксировано в документации и скриптах упаковки).