Repository navigation
Keep automatic updates going after slow downloads, retry refused updater starts, skip updates during sign-out - #198
Merged
Merged
Conversation
…ter starts, and skip updates during sign-out - A download that times out or loses its connection before GitHub answers no longer spends the release's three-attempt budget. It is retried after 2 min, then every 15 min, and its failure is reported once until a download succeeds. Verification, storage and helper failures keep the budget. - Installer download requests wait up to 60 s for a response; update checks keep 15 s. A response timeout now records which request of the chain timed out, whether it opened a connection, and how long the TCP connection took. - Starting the update helper or the installer is tried again after 1, 2, 4 and 8 s when Windows answers access denied or a sharing violation. The helper re-checks for Forza before each start. - After the helper restarts Wisp, an installer already staged for the release is verified again (name, size, SHA-256, installer identity) and installed instead of being downloaded again. - No update hand-off starts between Windows' sign-out or shutdown notice and its withdrawal. A helper that exits with 0xC000026B (window station shutting down) is recorded as cancelled, not as an update failure.
An update check or download that reaches its response deadline now reports update.download with the incident: which request of the chain timed out, and how long its TCP connect, TLS handshake and response wait took. The handshake is timed with the transport's plaintext stream filter, which passes the stream through unchanged. The measurements stay out of the incident signature.
Views2k
marked this pull request as ready for review
November 8, 2026 21:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the Wisp defects behind the failed 2.7.3 → 2.7.4 updates on 2026-11-08. 4 of 61 installs that tried the update had a failure (6.6 %). Two were defects (3.3 %): one Steam install whose automatic updates stopped for the session, and one Xbox install whose updater starts Windows refused. The third failure, during a Windows sign-out, is handled too. The fourth was a one-off timeout that recovered on its retry.
Closes #191
Closes #190
Closes #192
Changes
Slow downloads no longer end automatic updates (#191)
A download that times out or loses its connection before GitHub answers doesn't count toward the three-attempt limit. It is retried after 2 min, then every 15 min. Its failure is reported once per reason until a download succeeds, as for update checks.
Verification, storage and helper failures still count toward the limit, and so does an HTTP error status.
The installer download's requests, redirects included, wait up to 60 s for a response. Update checks keep 15 s.
A check or download that reaches its response deadline reports
update.downloadwith its incident, with:request: which request of the chain timed out (release-page,release-api,installer,installer-redirect-N);connectMs: name resolution and TCP connect of a connection that request opened;tlsMs: that connection's TLS handshake, including the online certificate revocation check;responseMs: the wait for the response.The last phase present is the one the deadline interrupted. A helper failure's evidence keeps its
recovery, which this evidence leaves out; the measurements stay out of the signature.To time the phases, the update transport is now a
SocketsHttpHandler:ConnectCallbackmakes the default connection;PlaintextStreamFilterpasses the stream through unchanged and marks the end of the TLS handshake.All other settings are unchanged: no redirects, no decompression, no cookies, no credentials, no proxy, online revocation check, no certificate callback, 16 KB header limit, one connection per server. The transport test asserts them.
Ordering: Wisp Tools must accept
update.downloadbefore any build with this change reports to it. Its incident validation rejects unknown fields, and the whole incident would get a 400. Views2k/wisp-site#441 adds that support and must be live before this PR is marked ready or a test installer is built.Refused updater starts are retried; a staged installer is reused (#190)
ProcessStartRetry, inWisp.Update, tries a start again after 1, 2, 4 and 8 s (15 s in all) when Windows answers access denied (5) or a sharing violation (32). Any other error fails at once.ApplicationUpdateLauncher). The wait doesn't block the dashboard thread. Before each retry it checks that the update may still start (not paused, not exiting, not signing out).UpdaterProcessHost) and checks for Forza before every start.No update during sign-out or shutdown (#192)
CanBeginApplicationUpdateand the automatic coordinator start nothing, and an ongoing hand-off stops at its next guard.0xC000026B(window station shutting down) is recorded as a cancelled hand-off, not an update failure.Verification
dotnet format --verify-no-changespasses on every changed file..exe, the new staged-installer tests among them, run in Windows CI.UpdaterWorkflowTests: 8 of 10 pass. The installer-retry test and an existing timeout test needComSpecand run in Windows CI.Not verified
0xC000026B. That PC hasn't run Wisp since, so its exit record hasn't arrived.