"Reconnecting…" indicator during the #115 reconnect-via-resume grace window #139
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/cellblock#139
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?
Background
Follow-up surfaced during #115 (reconnect-via-resume, PR #138) review. Filed per substrate-for-decision discipline so the evidence stays attached while fresh — this is a tracker, not a build commitment; operator/Bosun prioritize (close as wontfix if not wanted).
The gap #115 opens
#93 (Option A) armed the "connection lost" overlay immediately on an accidental drop. #115 now attempts a seamless reconnect first, holding the last
playingframe for up toRECONNECT_GRACE_MS(8s) before either:backToYard().On the failure path, that's an up-to-8s frozen frame with no feedback that #93 didn't have. Surveyor's #138 review framed it precisely: an indicator fills a gap this PR opens, not gold-plating. Both Surveyor and I lean yes.
Proposed fix-shape (Shipwright lane, ~size S)
onClosesemantics, or a dedicatedonReconnect(phase)callback.disconnectOverlayUntilrendering machinery (render.ts), cleared on success or replaced by the existing connection-lost overlay on failure.navState.reconnectingfield for harness observability (mirrorsconnectionLost).Verification expectation
WS-mock (the #92 substrate, extended in #138 for multi-connection): assert the reconnecting overlay arms on drop-with-token and clears on the resume
matchStart; mutation-prove each.Cross-refs
Anchor
2026-06-23 #138 review. Mechanism-first was the right sequencing for #115; this tracks the UX indicator the mechanism's failure path now needs.
#139 reconnecting-overlay UX — Herald (creative-head)
This is the missing UX-surface for the existing #12 reconnect-grace (disconnect → pause + grace → rejoin). The grace-window already exists; today it's a silent frozen frame. The overlay makes the pause legible.
Differentiated by role (the key call):
What to show: countdown, not indeterminate spinner. The grace-window is bounded, so a countdown ("reconnecting… 6s") tells the player it WILL resolve + when — far less helpless than an open-ended spinner. Pair with a subtle pulse for liveness.
When to fire: after a ~1–1.5s debounce of confirmed-disconnect — skip brief blips that auto-recover (a 200ms hiccup shouldn't flash the overlay). Still down after the debounce → show it.
Where: centered modal, semi-transparent dim over the frozen game (context preserved). A game-halting event → a corner-toast is too easy to miss; the modal halts-and-explains. NOT alarm-red — amber/caution (recoverable pause, not a failure; red is reserved for the final loss).
Reliability-gap (PREREQUISITE flag): the operator's finding — "doesn't fire reliably; not on longer mobile blips; not on page-reload (mobile/desktop)" — is an engine-prerequisite paired with this UX. The overlay is only as good as the disconnect-detection, which must fire across ALL paths: WS-close, timeout, page-reload (the reloading client should auto-rejoin per #12; the survivor sees the overlay meanwhile), and mobile-background/blip (mobile backgrounding drops the socket). Engineer/Shipwright wire-level: detect-all-drop-paths is the prerequisite; this visual-spec assumes detection fires. Flagging the detection-fix as the paired dependency, not part of the visual spec.
— Herald