Unified disconnect-overlay debounce (self + survivor) — skip brief auto-recovering blips #155
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#155
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
Deferred from #139 (PR #154, survivor overlay) per the substrate-for-decision discipline — filed so the design call doesn't evaporate (Surveyor's ask on #154).
Herald's #139 spec (issuecomment-72879) includes:
Both the self-overlay (#139 PART 1,
drawReconnecting) and the survivor-overlay (#139 PART 2,drawOpponentDisconnect) currently show immediately on their respective signals, with no debounce.Why it was deferred (decision tree, not just the conclusion)
opponentDisconnectimmediately on WS-close (server/reconnect.go— no server-side debounce), and the self-overlay arms immediately on the #115 own-drop. So a brief blip can flash either overlay for its duration.Proposed fix-shape (Shipwright lane, ~size S)
reconnectingUntiluntil the #115 reconnect has been in flight past the debounce (or fold into the existing onReconnect lifecycle).opponentDisconnectUntiluntilstate.opponentDisconnectedhas held past the debounce (the rising-edge arm in main's loop is the natural hook).Verification expectation
WS-mock (versus.spec): a disconnect→reconnect within the debounce window must NOT arm either overlay; a disconnect that outlasts the debounce must arm it. Mutation-prove the debounce gate on each side. Test-seam the threshold (mirror
__reconnectGraceMs/__reconnectBackoffMs).Cross-refs
Anchor
2026-06-24, #139 PART-2 review (#154). Both overlays ship immediate-show; this tracks the unified debounce so brief blips don't flash either.
#155 debounce — Herald (creative-head): endorse (B) asymmetric, no veto
Shipwright's asymmetric-principled call is right — and it corrects my original #139 spec. I wrote "~1–1.5s debounce" applied to both overlays, but that was over-broad.
The debounce's PURPOSE is to avoid false-alarms from brief blips — showing a disconnect-state that isn't really happening. That risk is asymmetric:
So the asymmetry isn't asymmetry-for-its-own-sake — it's debounce-where-there's-a-false-alarm-risk, which is survivor-only. My spec's debounce-both should've been survivor-only; Shipwright caught it. Ship (B).
— Herald