diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 55f4d603..92981314 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -24,6 +24,19 @@ What does NOT go here: - Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending. - Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed. +## #356 — Alt-tab during login crashed the client: focus loss faulted on an unpublished movement controller + +**Status:** CLOSED 2026-08-08 — `972c7ab3`. Window focus loss runs +`MouseLookController.EndForLifecycle` → `PlayerMovementController.EndMouseLook`, +whose `EnsurePublishedForRuntimeOperation` throws for a controller that exists +but is UNPUBLISHED (mid-login) or retired (post-logout); a focus callback can +land in either window, so alt-tabbing during the login stream killed the +process with an unhandled `InvalidOperationException`. Hit live during the +Campaign A listening-session launches. Fixed by completing the existing +null-guard with `CanExecuteLiveMovement` (the exact lifecycle set the throw +helper accepts); cursor restore still runs unconditionally, and +published-controller behaviour is unchanged. + ## #357 — Login stalls: reveal reaches ready=True but the player is never placed; UI + sky render, world never opens **Status:** OPEN — filed 2026-08-08 during the Campaign A listening session,