Skip to content

Report completed updates, tune read failures and crash locations accurately - #172

Merged
Views2k merged 2 commits into
mainfrom
fix/report-accuracy
Oct 27, 2026
Merged

Views2k merged 2 commits into
mainfrom
fix/report-accuracy

Conversation

@Views2k

@Views2k Views2k commented Oct 27, 2026

Copy link
Copy Markdown
Owner

Three reporting fixes found in the 2.7.x diagnostics.

Completed updates reported as failed

  • On two PCs, three updates (to 2.7.0, 2.7.1 and 2.7.2) installed, but the installer process ended with code 0x40010004. The helper judged the update by that exit code alone and recorded UPDATE_INSTALLER_EXIT_FAILED. The newly installed version then showed "The previous update did not complete" and reported a failure.
  • When a failed result names a target that is the running build and the version Setup registered under the installer's uninstall key, the update is now reported as installed. Setup writes DisplayVersion after it installs the files. A target that is not running or not registered still reports the failure as before.
  • The uninstall key moves to UpdateApplyContract.UninstallRegistryKey, and the updater's registration reader uses it. A test checks the key against the AppId in installer/Wisp.iss.
  • Why the installer process ends with 0x40010004 is not known from the reports. This change stops a completed update from being shown or counted as failed. It does not change the installer.

Tune read failures without detail

  • Tune incidents sent an empty method list, so every InvalidDataException from the tune reader looked the same. They now carry the methods on the failing stack, using the same projection as crash reports. That projection is CrashReport.DescribeExceptions, which CrashReport.Capture now uses too. The exception message stays local.

Crash signature

  • A crash signature now includes the module Wisp captured at the fault, when there is one. Windows attributes most faults to wisp.exe, which carries the .NET runtime, so renderer, driver, hook and runtime faults shared one signature. The fault offset stays out because it changes with every build.
  • Crashes without a captured fault module keep their current signature.
  • Wisp Tools must accept the new signature before this ships, because capsule ingestion rejects a signature mismatch. Views2k/wisp-site carries that change: verification accepts the signature with or without the fault module line.

Steam and Xbox

  • None of the three changes depends on the game platform. The update path, the tune report shape and the crash signature are the same for Steam and the Microsoft Store copy.

Verification

  • On Linux, Wisp.App, Wisp.App.Tests, Wisp.Updater and Wisp.Updater.Tests compile with the .NET 10 SDK. The only errors are the expected native file copies.
  • dotnet format whitespace passes on the changed files.
  • New tests:
    • the update result rule, in its installed and still-failed cases;
    • the registration key against the installer AppId;
    • a tune read failure naming NativeTuneRead.Bytes;
    • the signature with and without a captured fault module, using the same text as the Wisp Tools test.

Not verified

  • The tests run only in Windows CI.
  • No live update was tested on a PC whose installer exits with 0x40010004.

…rately

An installer that ends with a failure code after Setup installed and registered the target
version no longer turns a completed update into a failure: when the recorded target is the
running build and the version Setup registered, the update is reported as installed.

Tune read failures carry the methods on the failing stack, like crash reports, so each of the
reader's checks is its own problem instead of one bare InvalidDataException.

A crash signature includes the module Wisp captured at the fault when there is one, so a
renderer, driver or hook fault no longer shares a signature with every fault Windows attributes
to wisp.exe. Wisp Tools accepts the signature with or without that line.
@Views2k
Views2k marked this pull request as ready for review October 27, 2026 16:09
@Views2k
Views2k merged commit f0d077f into main Oct 27, 2026
10 checks passed
@Views2k
Views2k deleted the fix/report-accuracy branch October 27, 2026 16:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant