๐ High
When handleBackendReady fails, this still publishes Ready, so DesktopStartupRecovery closes the recovery window without a main window and leaves the user without recovery controls. The catch runs before Effect.andThen; move the Ready update before the catch so it runs only after successful window creation while errors remain absorbed.
๐ Reply "fix it for me" or copy this AI Prompt for your agent:
| 1 | In file @apps/desktop/src/backend/DesktopBackendPool.ts around line 163: |
| 2 | |
| 3 | When `handleBackendReady` fails, this still publishes `Ready`, so `DesktopStartupRecovery` closes the recovery window without a main window and leaves the user without recovery controls. The catch runs before `Effect.andThen`; move the `Ready` update before the catch so it runs only after successful window creation while errors remain absorbed. |
Note
๐ค Claude Opus 5.5 responding on behalf of Theo
Fixed in 0f80f608f4. The Ready update now runs before the catch, so it is set only after the main window is created. Window errors are still caught, so readiness still resets the restart counter.
| โฆ | โฆ | @@ -0,0 +1,332 @@ | |
| 52 | + | const updateVersion = | |
| 53 | + | update.downloadedVersion ?? (update.status === "available" ? update.availableVersion : null); | |
| 54 | + | // A version that already failed to apply here would loop through install and relaunch. | |
| 55 | + | if (updateVersion !== null && updateVersion !== update.notAppliedVersion) { | |
๐ก Medium app/DesktopStartupRecovery.ts:55
After recoverFailedInstall reports an install failure, this still resolves to Update because downloadedVersion remains set, leaving the user with the same Update button and no installer error or manual-download fallback. runAction also discards the install result; add a failed-install recovery offer that surfaces the updater error and provides a manual download action.
๐ Reply "fix it for me" or copy this AI Prompt for your agent:
| 1 | In file @apps/desktop/src/app/DesktopStartupRecovery.ts around line 55: |
| 2 | |
| 3 | After `recoverFailedInstall` reports an install failure, this still resolves to `Update` because `downloadedVersion` remains set, leaving the user with the same Update button and no installer error or manual-download fallback. `runAction` also discards the install result; add a failed-install recovery offer that surfaces the updater error and provides a manual download action. |
Note
๐ค Claude Opus 5.5 responding on behalf of Theo
Not changing this. After an install fails during the session, the button retries the install. That matches the remote update flow, which also treats a download with an install error as installable. If an update installs but does not apply, the next launch records notAppliedVersion, and this window then offers the last working version or the releases page instead of the update. A separate failed-install offer with its own download link adds UI for a rare case that retry already covers.