Desync auto-resync — host sends state on desync event #6
Labels
No Label
blocked
bounced
in-progress
in-review
manual-only
needs-guidance
netplay
p1
p2
p3
rust
No Milestone
No project
No Assignees
1 Participants
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: pbwraith/gopher64-netplay#6
Loading…
Reference in New Issue
Block a user
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?
Repo: gopher64-netplay (fork of https://github.com/gopher64/gopher64)
Context: Full scope doc at upstream analysis — see commit history. Netplay uses GGRS over WebRTC (matchbox_socket), reliable channel carries
NetplayMessage { name, data }in 16KB chunks. Savestates serialize full Device via postcard + compress.Goal: When GGRS fires
DesyncDetected, the HOST snapshots state and ships it to the desynced peer.Background:
poll_clientsinsrc/netplay.rshandlesGgrsEvent::DesyncDetected { .. }— currently only prints + onscreen message (lines 321-327)DesyncDetection::On { interval: 60 }is already configuredAcceptance:
poll_clientsDesyncDetectedhandler:create_savestate_in_memoryadvance_framereturns immediately, like thedisconnectedpath)resync_statemessage (name from #1) to all peersresync_readyacks, then calls frame reset (#5) and resumesDesyncDetectedevent, assert host sendsresync_stateand pauses loop; assert non-host ignores.Verification:
cargo test; manual desync test with latency injection if available in test setup./tmp/comment_6.md
[orphaned-review repair] No standalone reviewable PR for #6.
PR #10 (head
issue-6, "Desync auto-resync: host sends state on desync event (#6)") is CLOSED and UNMERGED — closed deliberately as SUBSUMED by the sweep review on 2026-08-26: the host-half work ships inside !11 (PR #11,issue-7, open, currently bounce-in-repair). Independently re-verified containment rather than trusting the comment:commits on
issue-6not in main:48598f4(#6 host sends state) andeb5cf56(#5 frame reset) — both carried byissue-7. The review record explicitly directs NOT to reopen/repair both branches ("close this one as subsumed rather than repairing both"), so a reopen would duplicate !11, and #10's head also conflicts with the post-!14 main (src/netplay.rs).Therefore
in-reviewis removed (there is no reviewable open PR for #6 itself) andneeds-guidanceadded.One question for the owner: close #6 as subsumed once !11 merges, or file a follow-up to verify #6's acceptance criteria (host snapshot + resync_state broadcast + 5s timeout) explicitly against the merged state before closing?
Answering the open question, and clearing
needs-guidanceThe question left for the owner on 2026-08-26 was:
Answer: verify against the merged state first, then close. Do not auto-close as
subsumed. This is a design/process call, not an owner risk decision, so it does
not need to wait on anyone.
Reasoning: containment is a claim about commits, not about acceptance.
I re-verified the containment itself this sweep —
so
issue-6is genuinely fully contained inissue-7(!11). But!11wasscoped and reviewed as #7, "client receives and loads full state". This
issue's acceptance list is the host half and contains four specific behaviours
that #7's review never had a reason to check:
player_number == 0) createscreate_savestate_in_memoryonDesyncDetectedadvance_framereturns immediately, like the disconnected path)resync_readyacks, then calls the #5 frame reset and resumesItem 4 in particular is a failure-path behaviour that a client-side review would
not exercise. Closing #6 on containment alone would retire those criteria without
anyone having checked them — the same shape as a
Closes #Nretiring work thatwas really someone else's.
What I changed and why
needs-guidance— the question is answered, and leaving the labelon means the answer can never be acted upon (the label excludes the issue from
the worker lane at
gitea-worker-lane.py:143)blocked, prerequisite named:!11must merge. There is nothing toimplement until then; the verification is the remaining work, and it needs a
merged tree to run against.
When
!11lands: check those four behaviours against mergedmain, record theresult here, then close. If any of them is missing, that is a new issue, not a
reopen of this one.