From 8b83750bf23735196303812dc0ae1c2b1bfd5f2d Mon Sep 17 00:00:00 2001 From: kitbyte Date: Sat, 29 Aug 2026 17:08:27 +0300 Subject: [PATCH] chore(release): prepare 2.0.0.0 and support pre-release tags Bump AssemblyInfo to 2.0.0.0 and add the 2.0.0.0 changelog section. Resolve a tag suffix (2.0.0.0-rc.1) to its base version so release metadata validation and changelog extraction accept pre-release tags. Publish suffixed tags as a pre-release and keep them off "Latest release". --- .github/workflows/release.yml | 4 ++ CHANGELOG.md | 59 +++++++++++++++++++++++-- WandEnhancer/Properties/AssemblyInfo.cs | 4 +- scripts/get-changelog-section.ps1 | 3 +- scripts/validate-release-metadata.ps1 | 4 +- 5 files changed, 66 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8108b49..d625899 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,3 +50,7 @@ jobs: body_path: release-notes.md files: CHANGELOG.md fail_on_unmatched_files: true + # A tag carrying a suffix (1.1.0.0-rc.1) publishes as a pre-release and + # does not become the "Latest release" on the repository page. + prerelease: ${{ contains(github.ref_name, '-') }} + make_latest: ${{ !contains(github.ref_name, '-') }} diff --git a/CHANGELOG.md b/CHANGELOG.md index d184a37..b68b99c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,16 +3,67 @@ This file is the source of truth for release notes. The newest entry must match the version in `WandEnhancer/Properties/AssemblyInfo.cs`. +## [2.0.0.0] - 2026-08-29 + +### Important + +- The bundled `version.dll` proxy is gone. The launcher starts Wand as a child process, apply patches in every process Electron spawns, and detaches once startup settles. This is what fixes Wand refusing to launch after enhancing on related issues: #207 #210 #211 #213 #214 #217 +- The native helper and its CMake build step were removed. Building from source no longer needs `CMake` or the Visual Studio C++ workload. +- WandEnhancer now installs itself as the Wand launcher entry point, so starting Wand goes through the patcher. Restoring a backup puts the original launcher back. + +### Features + +- **Auto-patch after Wand updates.** Enable *Auto-apply after updates* in the patch dialog and your selection is saved next to the launcher. When Wand updates and drops the patches, the next launch re-applies them. On failure the UI opens and shows which patch broke instead of silently starting an unpatched client. +- **Rewritten patch engine with legacy version support.** Patches are located structurally instead of by regex signature: each anchors on something Wand does not rename between builds. A client rebuild that only re-minifies no longer breaks patching, and older clients keep working. #178 #186 +- A patch whose feature is missing from your client is now reported as skipped instead of failing the whole run, and failures name the patch that broke. + +### Fixes + +- Fixed the "Buy Pro" banner still showing after a successful patch, and Pro not activating on newer clients. +- Fixed the Enhancer closing itself when any button was pressed. #184 +- Fixed a half-written backup reporting the installation as patched, which blocked patching and restore at the same time. +- Fixed invalid ASAR integrity metadata produced from short reads, which could yield an archive the client rejects. #170 +- Fixed the packer silently dropping files it could not read, for example while Wand was still running. +- Fixed archive tree lookups resolving the wrong parent and creating phantom directories in the header. +- Fixed hangs on symlink cycles and directory junctions while reading or packing an archive. +- Fixed the language switcher leaking a resource dictionary on every switch. #164 +- Fixed *Restore* freezing the window while it ran. +- Fixed Squirrel install and update arguments breaking when the Windows user profile path contains spaces. +- Fixed a latent crash path from a patch type that had no configuration entry. #172 +- Remote panel: fixed a blank page when the interface translations failed to load. +- Remote panel: fixed number inputs eating the decimal point while typing, and steppers drifting on fractional steps. +- Remote panel: fixed the increment control refusing to step from a value outside its option list. +- Remote panel: fixed endless two-second reconnect attempts, and reconnecting again after you disconnected on purpose. +- Remote panel: fixed installed-game updates not arriving when only the install location changed. +- Remote panel: fixed value writes silently doing nothing when the client bound to the bridge before it was ready. + +### Improvements + +- Log messages in the desktop app are now translated into all 12 supported languages. +- The remote panel is now usable with a keyboard and a screen reader: dialogs trap focus and close on Escape, and controls have accessible names. Pinning a mod previously required a swipe and had no keyboard path at all, so mod rows now have a pin button. + +### Security and Privacy + +- The panel's static file server now resolves every request inside the panel directory. +- The local bridge enforces the WebSocket framing rules required of a server (RFC 6455). +- Late trainer events naming a different trainer no longer overwrite the active trainer's values. + +### Maintenance + +- The Electron bridge is now fully type-checked; roughly 200 latent typing gaps were fixed. +- `build.ps1` and CI now run lint, type-check, and a dist verification step that syntax-checks the bundles and fails when dev-only payloads leak into a production build. CI runs on pull requests and pushes to `master`. +- Removed dead code: the `version.dll` project, an unused control and converter, and unused Pickle helpers. + ## [1.0.9.4] - 2026-07-21 ### Fixes -- Fixed the Remote Web Panel QR code still opening the official Wand mobile client after Wand changed its bundled QR renderer export. The renderer bridge now resolves the current export without adding a fragile C# ASAR patch. [Discussion #140](https://github.com/k1tbyte/Wand-Enhancer/discussions/140) +- Fixed the Remote Web Panel QR code still opening the official Wand mobile client after Wand changed its bundled QR renderer export. The renderer bridge now resolves the current export without adding a fragile C# ASAR patch. #140 - Fixed Quick Presets reporting that a preset was saved when browser local storage rejected the write. Failed writes now leave the existing preset list unchanged and show an error, and the save dialog now stays above the bottom navigation dock. -- Fixed the patcher giving up on process termination because it reused a stale process snapshot by @divya0795 in [#145](https://github.com/k1tbyte/Wand-Enhancer/pull/145). Related issue: [#136](https://github.com/k1tbyte/Wand-Enhancer/issues/136) -- Fixed ASAR extraction path traversal and corrupt Pickle payload allocation by @divya0795 in [#143](https://github.com/k1tbyte/Wand-Enhancer/pull/143). +- Fixed the patcher giving up on process termination because it reused a stale process snapshot by @divya0795 in #145. Related issue: #136 +- Fixed ASAR extraction path traversal and corrupt Pickle payload allocation by @divya0795 in #143. - Fixed backup restore so `app.asar.unpacked` is restored together with `app.asar`, and the injected `version.dll` is removed after a successful restore. -- Fixed `version.dll` requiring Visual C++ runtime DLLs on some systems by statically linking the runtime. Release builds now reject accidental dynamic VCRUNTIME, MSVCP, or UCRT dependencies. [#128](https://github.com/k1tbyte/Wand-Enhancer/issues/128) +- Fixed `version.dll` requiring Visual C++ runtime DLLs on some systems by statically linking the runtime. Release builds now reject accidental dynamic VCRUNTIME, MSVCP, or UCRT dependencies. #128 ### Security and Privacy diff --git a/WandEnhancer/Properties/AssemblyInfo.cs b/WandEnhancer/Properties/AssemblyInfo.cs index e452cd6..e38c821 100644 --- a/WandEnhancer/Properties/AssemblyInfo.cs +++ b/WandEnhancer/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ using System.Windows; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.9.4")] -[assembly: AssemblyFileVersion("1.0.9.4")] +[assembly: AssemblyVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] diff --git a/scripts/get-changelog-section.ps1 b/scripts/get-changelog-section.ps1 index 84f407e..639da8d 100644 --- a/scripts/get-changelog-section.ps1 +++ b/scripts/get-changelog-section.ps1 @@ -18,7 +18,8 @@ function Normalize-Version { throw 'Version value cannot be empty.' } - return $Value.Trim().TrimStart('v', 'V') + # A pre-release tag (1.1.0.0-rc.1) reads the notes of its base version. + return ($Value.Trim().TrimStart('v', 'V') -replace '-.*$', '') } function Get-ChangelogSection { diff --git a/scripts/validate-release-metadata.ps1 b/scripts/validate-release-metadata.ps1 index e59c513..12d2e42 100644 --- a/scripts/validate-release-metadata.ps1 +++ b/scripts/validate-release-metadata.ps1 @@ -16,7 +16,9 @@ function Normalize-Version { throw 'Version value cannot be empty.' } - return $Value.Trim().TrimStart('v', 'V') + # AssemblyVersion holds four numbers only, so a pre-release tag such as + # 1.1.0.0-rc.1 must compare and look up its notes as 1.1.0.0. + return ($Value.Trim().TrimStart('v', 'V') -replace '-.*$', '') } function Get-ChangelogSection {