-
feat(launch): run monitor — one game at a time, verified start, back to game
release / Build Windows .zip (push) Canceled after 0sreleased 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
- internal/gamerun: tracks the launched game by install dir (full image