• feat(launch): run monitor — one game at a time, verified start, back to game
    release / Build Windows .zip (push) Canceled after 0s

    LastSkywalker released this 2026-10-04 13:39:12 +03:00

    Play was fire-and-forget: a game that crashed on start (missing DLL), a stub
    exe waiting on an absent launcher, or a stalled Steam update all looked like
    "nothing happened" — and in shell mode the launcher stayed minimized over an
    empty desktop. Nothing stopped a second game from launching on top of the
    first, and there was no way to see or return to a running game.

    • internal/gamerun: tracks the launched game by install dir (full image
      paths), reports launching/running/exited/failed via gamerun:changed +
      GetRunState; maps exit codes to causes, detects launch timeouts with
      store-client hints, finds/focuses the game window, closes it (WM_CLOSE,
      then terminate, scoped to the install dir only). Adopts games started
      outside GameSaver.
    • LaunchGame refuses while another game is active; the UI asks back to it /
      close it and launch / cancel (controller-driven choiceModal).
    • Running-game bar (desktop) and pill + "back to game" hero button (shell).
    • Shell restores itself when a launch fails; playtime-based restore gated so
      a killed game's late session-end can't cover the next game.
    • Launcher: pre-check exe exists; ERROR_ELEVATION_REQUIRED -> UAC runas.
    • winutil.RestoreAndForeground only restores minimized windows (SW_RESTORE
      un-maximized borderless-fullscreen games).

    See .claude/decisions/0032-game-run-monitor.md.

    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

    Downloads