-
Notifications
You must be signed in to change notification settings - Fork 0
ZH Release Notes 5.2.31
-
CI publish 验证现在以
Directory.Build.props作为唯一产品版本源,与项目文件继承<Version>的 repository 规则保持一致;不再要求Shadowsocks.WinUI.csproj中存在本地<Version>。GitHub workflow 文件也已纳入 release-ready 源码包和验证范围。 -
本地化验证现在与
CsvLocalizationService完全一致:源键按 ordinal 且区分大小写比较,因此真正的重复键仍是 release blocker,同时不会再把合法的Active/ACTIVE被 PowerShell 误合并。旧的仅大小写不同键已统一/移除,并加入回归测试。 -
发布验证器不再使用有问题的 PowerShell
return if (...)运行时语义,并新增了对return后直接使用语句关键字的检查。 -
Release validation 热修复:PowerShell StrictMode 不再因为成功检查中的空集合在计算诊断文本时访问
.FullName/.Name而失败。Repository、DNSCrypt 与 package validators 现在会在-join前显式投影名称,并防止重新引入该模式。 -
修复完整测试集暴露的 DNSCrypt 首次使用默认值回归:活动 runtime 仍默认通过 Shadowsocks 路由并要求有效的本地 SOCKS5 endpoint;direct/offline 测试 fixture 会显式关闭该路由;resolver-catalog TOML 只读取预置的已签名缓存,因此不继承活动 runtime 的 proxy 设置。
-
Analyzer hotfix:online-config 刷新后的服务器选择恢复现在使用
Configuration.configs已传入的具体List<Server>,无需 suppression 即移除 CA1859,行为不变。 -
编译 hotfix:未选择服务器时,现在禁用实际的 WinUI 编辑控件,而不是向没有
IsEnabled的Border赋值;release validator 也会在构建前静态捕获同类 non-Control 误用。 -
最终路由加固会从 Balancing/High Availability、托盘与服务器快捷键中排除不完整的 legacy/损坏配置;相同 host/port 的不同配置在 HA 与 SIP003 中仍保持独立。策略 TCP timeout 使用实际选中的服务器值,订阅刷新也能避免 host/port 冲突并保持选择。
-
最终发布审计会原样保留此前持久化的 DNSCrypt 兼容值,不再在加载或应用设置时重写它们,同时 Administrator Mode 的 DNSCrypt capture 仍保持有效 fail-closed。保存服务器时,即使 local/subscription 分组排序改变位置,也会继续保持实际选中的服务器。
-
内置 QTun 安装现在匹配 upstream 实际的 Windows release ZIP 命名 (
x86_64-pc-windows-msvc),不再误用与文件名无关的 Actions artifact 标签windows-native。 -
UDP Load Balance 现在可安全处理负 endpoint hash,并始终得到有效的服务器索引。
-
5.2.31 hotfix:移除合成的空
Server 1;零服务器现在是合法状态,不完整的草稿服务器不会解锁依赖服务器的功能。 -
在存在完整 Shadowsocks 服务器之前,DNS、PAC 与启用 Windows 系统代理保持禁用;删除最后一个可用服务器时会停止实际的代理/DNS/capture runtime,但保留已选择的 DNS policy,以便添加可用服务器后重新应用。
-
Start on Boot、Administrator capture/UAC 切换以及更新操作现在提供非阻塞的 busy 进度反馈。
-
新建 DNSCrypt 配置首次使用时除 IPv6 外所有选项默认启用。已经持久化的 DNSCrypt 设置会原样保留;schema v3 不迁移也不覆盖这些设置。
-
WinUI 导航、Logs 与 UAC/Administrator 图标改用明确兼容 Windows 10 的 Segoe MDL2 Assets glyph。
-
修复了使用当前官方解析器目录安装 DNSCrypt 的问题:目录 Minisign 验证现在支持官方旧版
Ed(直接签名原始目录字节)以及现代 BLAKE2b-512 预哈希ED,并继续验证固定 key ID、内容签名和 trusted comment 全局签名。旧版支持仅限解析器目录;下载的 dnscrypt-proxy 发布归档仍只接受现代ED。 -
Self-update 现在会恢复交接更新时记录的实时 shell 状态,而不是进程最初的 startup 参数,因此启动后再打开或隐藏窗口,其状态在自动或手动应用更新后仍会保留。
-
修复系统重启/会话恢复时的状态保留:Start with Windows 与 Windows Restart Manager 仍保持互斥,但现在通过
--start-visible/--start-hidden记录真实 shell 状态。原先打开的窗口会重新打开,原先仅托盘的实例仍留在托盘。WM_QUERYENDSESSION会在系统关闭 HWND 前保存可见性,因此 shutdown 不会被误判为用户主动“关闭到托盘”。两个 restore 标记也都不会按普通的第二次启动处理,因此重定向的系统恢复不会弹出“已在运行”对话框。 -
修复 release validator 漂移:
packaging/Validate-DnsCrypt.ps1不再因Set-StrictMode下未初始化的$controllerPath失败,Validate-Repository.ps1也改为检查当前的FilePath/FallbackFilePath日志配置,而不是已废弃的FileName。 -
最终 analyzer follow-up:DNSCrypt static resolver stamp 序列化和测试 helper 改用具体
Dictionary类型,在不 suppression 的情况下移除剩余 CA1859。 DNSCrypt 组件安装/更新不再使用 Windows resolver 解析api.github.com或 GitHub release asset 主机。GitHub API、archive 与 Minisign HTTPS 由 Cloudflare DoH 解析并以 Google DoH 备用,通过当前 Shadowsocks SOCKS5 连接;失败会在 rollback 前记录并显示为本地化的隧道上游错误。 -
修复 DNSCrypt 解析器目录 bootstrap 死锁:主路径为 Shadowsocks 上的 Cloudflare DoH,备用为 Shadowsocks 上的 Google DoH;解析器列表 HTTPS 下载也保持在隧道内,发布前执行 Minisign 验证,dnscrypt-proxy 只读取离线本地缓存(
urls = []、bootstrap_resolvers = []、ignore_system_dns = true)。 最终 WinUI polish pass 对所有页面和 tray 的本地化、tooltip/accessibility help 与上下文可见性进行了完整检查。内置 Settings、Hotkey 的间接动作标签/状态以及此前遗漏的 Forward Proxy 字段标签现在都遵循应用所选语言,并覆盖全部 7 个 locale。无关选项会隐藏;selection/dirty/busy 状态统一控制操作;无效的已保存 Online PAC URL 会在启用前要求修正;GeoSite refresh 会明确显示忙碌并阻止冲突编辑;update/plugin 操作期间不会再留下矛盾的可点击动作。
Regression-test 后续修复:embedded legal-resource tests 现在检查当前 Adblock Plus-derived network routing notice 标题;fake GitHub plugin release 对公布的 SHA-256 与 download response 复用同一份不可变 ZIP payload。这样可消除 ZIP timestamp metadata 导致的 digest 不稳定,并让 anti-downgrade 测试真正覆盖 version gate。
当前界面还修复了四个首次使用问题:Share / QR 会预检查 ss:// 中引用的已知 SIP003 插件,并可在导入服务器前安装缺失的目录包;DNSCrypt 首次安装在下载、验证、安装和激活全过程持续显示动画操作卡片;Local PAC 可打开 user-rule.txt;启用 Online PAC 时会隐藏 Local managed-routing、本地规则和 GeoSite 卡片,因为外部 PAC 才是权威路由源。
后续编译修复移除了 DnsPage 中最后的 _resolverLatencyCancellation 旧引用;resolver 选择模式切换现在使用当前 _cancelResolverLatency cancellation delegate。
WinUI lifetime/analyzer 清理现在会显式释放 application/page 资源,在 controller shutdown 之前释放 cached DNS/Logs page,保持 async cancellation source 的安全所有权,使用 .NET Lock 串行化 Logs 设置写入,并直接修复剩余 CA1725/CA1822/CA1834/CA1305/CA1806/CA1859,而不是广泛抑制 production analyzer。
5.2.31 完成 managed-routing Variant B,并强化 DNS privacy、self-update、release tooling 与 .NET 10 code quality。
About → License 与 Third-party notices 的说明文字会使用当前 UI 语言(EN/RU/zh-CN/zh-TW/JA/KO/FR),authoritative license text 仍保留原始语言。
-
为受信任的 built-in SIP003 catalog package 增加后台自动更新:成功检查最多每天一次,in-use plugin 延后,提供手动 Check updates 和 per-plugin automatic-update toggle,失败检查仍可稍后重试;若 package swap 被进程异常中断,下一次读取 plugin storage 时会恢复 orphaned backup。Manual import 不 auto-update;任意 repository source 暂列 TODO,等待独立 trust/asset-selection 设计。
-
Plugin update pipeline 限制 download/extraction,拒绝 traversal/rooted/Windows-ADS 名称与 TAR link/special entry,在 GitHub 提供 SHA-256 asset digest 时进行验证,并拒绝低于已安装插件版本的可解析候选版本;package promotion 使用 staging + rollback。
-
Traffic statistics 从无限 Thread/public mutable Queue 改为 cancellation-aware Task 与稳定 snapshot API。
-
Follow-up strict-build 清理修复 TrafficPage 局部变量大小写造成的编译回归,并处理其余上报的 .NET 10 analyzer diagnostics。Production 警告直接在代码中修复;仅 UnitTests 关闭 CA1707/CA1861,以保留可读的
Method_Scenario_Result命名与局部 literal fixture。Security-pin 测试现在读取运行时常量 metadata,而不是 compile-time-folded assertion。 -
后续 Windows analyzer 清理修复了 relay/controller 成员重命名回归,明确 proxy/UDP/DNSCrypt/WinDivert/controller 的资源所有权,在异步 I/O 中传递
CancellationToken,并仅在内部 hot path 使用具体集合类型,不做全局 analyzer 抑制。 -
最终 compile cleanup 修正 DNSCrypt resolver array 的长度检查,移除 sealed controller 成员上无效的
protected,并让UDPRelay显式实现IDisposable。 -
Local GeoSite + EasyList/ABP routing 完全由 C#
FilterEngine决策。 -
删除
abp.js、compiled-PAC compatibility backend、backend selector 与可执行 customabp.txt。 -
Local PAC 只保留 Windows system-proxy 的最小 funnel。
-
Administrator Mode 使用同一 rule set,并通过 HTTP Host / TLS SNI 延迟决策,不解密 TLS。
-
DNS policy
System、Direct、Proxy、CustomDoh、DnsCrypt支持 Admin Mode transparent UDP/TCP 53。 -
DNSCrypt 作为按需下载并验证的组件运行;ODoH 禁用。
-
Automatic self-update 验证 exact GitHub assets、SHA-256、ZIP layout 和 FileVersion,并进行 rollback-safe replacement。
-
修复 startup-copy 与 primary EXE 重复启动保护。
-
Product version 集中到
Directory.Build.props。 -
Release validator 简化为 structural/supply-chain invariants;行为要求由 tests 验证。
-
Release build 开启 warnings-as-errors。
启用 .NET 10 recommended analyzers 后,修复 legacy public fields、culture-sensitive formatting、disposable ownership、共享 FilterEngine 的 nullable contract、cancellation propagation 与 API naming 问题,同时避免全局 NoWarn。
需要 backward compatibility 的 JSON 名称继续保持,如 enabled、server_port、plugin_opts、plugin_args。
Wiki 现在按 EN/RU/ZH 三个独立语言分支组织。Home 和 _Sidebar 只显示语言选择;每种语言都包含 User Guide、Architecture、Storage、WinUI、Security、Contributing、Release Checklist、License、Third-party notices、Changelog 与 Release Notes。
- Windows 10 version 2004 / build 19041+
- Windows 11
- x64 only
- .NET 10
- WinUI 3
Shadowsocks-win-x64.zipShadowsocks-win-x64.zip.sha256