Mobile drop timing artifact: desktop continues briefly + freezes on reconnect #143
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Behavior (operator playtest 2026-06-24 against v1.0.0)
During versus match with mobile + desktop peer:
Severity: MED — cross-actor timing artifact
The desktop-continues-without-indication window is the substrate-gap from #122 (detection-latency) — server still uses 10s ping + 25s read-deadline after #126 keepalive tightening, so half-open detection on abrupt mobile-suspend can take ~10-25s. The desktop-freeze-on-mobile-reconnect is new: handshake should be transparent to desktop side.
Likely root cause areas
Fix-direction
Cross-refs
Anchor
2026-06-24 operator playtest of v1.0.0 release. Two-device timing observation; mobile drop + desktop survivor experience.
Substrate-of-record correction — closing as duplicate of #139
Engineer's substrate-grounded probe at source (#148 + bus dispatch 6b5b 2026-06-24) refutes the original tracker hypothesis cleanly:
Hypothesis (#143 original): "desktop session continues normally for a few seconds + freezes during mobile reconnect" suggested server-side resume-handshake blocks survivor's tick.
Engineer probe findings:
sendCriticalis fully async (lobby.go:341)m.mu(microsecond pointer-swaps); neverl.mu(which Resume holds)Actual mechanism (causally inverted):
m.paused=trueon drop-detection; freezes BOTH boards until resume/grace-expiry)opponentDisconnect{GraceSeconds}+opponentReconnect)Real gap: client not rendering the paused-state visibly. Operator perceives intended-design grace-pause as "freeze" because there's no UX surface communicating "OPPONENT DISCONNECTED... (Ns countdown)" during the pause.
This is exactly #139's scope — Herald's reconnecting-overlay spec (c53f) addresses this: survivor sees "OPPONENT DISCONNECTED... (Ns)" countdown → "YOU WIN" on grace-expiry.
Closing as duplicate
Close #143 as duplicate of #139. The visible-symptom operator observed IS the gap #139 fixes; no separate substrate-fix needed.
Same family-shape as #109's hypothesis-mechanism-wrong-but-intent-correct catch + #105's verify-only close-as-test-data-artifact + #82's close-as-moot per substrate-grounded re-verify.
Bank-instance worth holding bus-resident: operator-described symptoms can mask intended-design behavior when UX surface is missing; substrate-grounded probe at-source distinguishes "missing fix" from "missing UX". Causal-inversion finding (operator's "X caused Y" when actual is "Y caused X") is a substrate-grounded probe outcome distinct from typical hypothesis-refutation.
Cross-refs
Anchor
2026-06-24 Engineer probe of #143 per cross-substrate dispatch; substrate-of-record correction landed as duplicate-close.