fix(ui): also resync an open game on a foreground regain without a stream drop
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 48s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 59s

Closes the residual tail of the previous commit: when the live stream stays
alive across a brief suspend (Telegram/iOS can pause the socket without tearing
it down), an in-game event shed from a full hub buffer is never recovered by
the reconnect refetch (no reconnect) or the open-game poll (it only runs while
the stream is down). Mirror the lobby's focus re-poll: bump app.resync on a
foreground regain that did not drop the stream, and have Game.svelte refetch
the open game once per resync. Also rescues a missed move/game_over after a
suspend. Add a silent-join mock seam + an e2e isolating this path; extend the
ARCHITECTURE §10 fallback note.
This commit is contained in:
Ilia Denisov
2026-06-14 00:14:49 +02:00
parent 16402e64c0
commit 4409253dce
6 changed files with 60 additions and 9 deletions
+11
View File
@@ -263,6 +263,17 @@
return () => clearInterval(timer);
});
// (C) Returning to the foreground without the stream having dropped (so (A) does not fire) may
// still have missed an event shed from a full hub buffer while suspended; refetch once per resync.
let lastResync = app.resync;
$effect(() => {
const r = app.resync;
if (r !== lastResync) {
lastResync = r;
void load();
}
});
function isCoarse(): boolean {
return typeof matchMedia !== 'undefined' && matchMedia('(pointer: coarse)').matches;
}