Profile.RunGame never checked the child process's exit code, so if
the game binary crashed immediately (e.g. a missing shared library),
the launcher silently returned to the main screen with no feedback,
even though the failure reason was already being written to the
profile's log file.
RunGame now throws when the process exits with a non-zero code, and
the Play button handler shows that in an error dialog instead of
swallowing it.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>