A transient "verification pending" refusal on socket rejoin drops the lobby and replays the whole run mid-match
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- lua
- Lĩnh vực
- api, backend-api-design
Hướng nghiên cứu
Start with networking/nakama_lobby.lua and trace schedule_rejoin and with_socket; then read networking/connection.lua around start_launcher_verification. The issue identifies ui/reconnect_prompt.lua, api/playback/rejoin.lua, and the fix/live-run-reattach branch as the live run recovery path. Confirm which proposed fixes are still needed, then test a two-player disconnect and rejoin during a PvP blind; done means the lobby recovers without replaying over the live run and the player gets a notice if the match is gone.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
Players report a "Checking your game..." overlay appearing at random during a match, followed by the whole game replaying from the start. It usually ends in a softlock, with the player left in a singleplayer/practice-style lobby outside the PvP blind.
Traced from one affected player's Lovely log (lovely-2026.11.04-11.33.54.log) plus the code. The code path is solid; the exact trigger on the server side is inferred (see "Not confirmed").
What happened (log timeline)
12:20:22 [nakama_lobby] socket error: standing_refused:{"reason":"verification_pending", ... "Launcher verification is still pending. Try again in a moment."}
12:20:22 [nakama_lobby] lost lobby EGLWG: standing_refused:{"reason":"verification_pending", ...}
12:20:34 replay starts (get_next_tag_key diagnostics)
12:20:40 playback hand_result mismatch: recorded=25 real=0 (x4, see note below)
12:21:40 ERROR :: MULTIPLAYER :: No next blind context
The replay starts about 12s after the refusal, which matches the up-to-15s launcher-verdict wait (S.VERDICT_WAIT_SECONDS).
Cause (three problems chained together)
- A transient refusal is treated as final. After a socket drop,
schedule_rejoin(networking/nakama_lobby.lua) retriesmatch_joinon a backoff, but only for transport failures. Any other error goes tofollow_seat, and if the server still reports the same match it callslose(err), which tears the lobby down.verification_pendingsays "Try again in a moment" but takes that final path, so a lobby that is still seated is destroyed. - Launcher verification is not refreshed when the lobby socket is reopened.
start_launcher_verificationis called only on first login (networking/connection.lua:467) and fromverify_again.with_socketinnakama_lobby.luadoes not restart it, so the rejoin can hit the server with no current verdict. (Inferred: the server's rule is not in this repo.) - The reconnect flow assumes any seat with a recorded run means a relaunch.
lost->show_rejoin_refused-> "Checking your game..." ->verify_again->reconnect_to->MPAPI.playback.rejoin(ui/reconnect_prompt.lua,api/playback/rejoin.lua). That flow is the crash-recovery path. It boots a second local run (as a practice lobby) over the run still on screen, fast-forwards the log into it, and only swaps in the real lobby ingo_live. If the replay does not finish, the player stays in the local lobby. That is the "singleplayer lobby" players describe.
Related smaller findings
Match not foundshows no message. In the same log (11:55:44,lost lobby QKUYU: Match not found) the match really was gone. Giving up is right, but thelosthandler inapi/lobby/nakama.luashows a notice only for a forfeit, a timeout, or a standing refusal, so the player is left in an orphaned run with nothing on screen.- The
hand_result mismatch ... real=0warnings are a false positive, not replay drift. The HAND_RESULT handler in the PvP mod compares againstPVP.GAME.score, which is set only byPVP.ACTIONS.play_hand, and that is skipped in practice mode (which the rejoin replay uses). So the field is always nil. This is in the PvP repo and is tracked there. - Possibly related to #58 (reconnecting leaving game speed at 64x), since both involve the rejoin fast-forward. Not verified.
Proposed fixes
- Retry
verification_pendinginstead of giving up. Inschedule_rejoin, treat it as retryable: start launcher verification once, then retry within the grace window. Only permanent reasons (mods_not_allowed,verification_failed, a forfeit) should calllose(). - Verify before the join. When
with_socketreopens a socket for a lost match, restart launcher verification and wait for the verdict before sendingmatch_join. - Do not run the crash replay over a live run. If only the lobby was lost and the run is still on screen and recording, rejoin the seat into that run. Keep the fast-forward for a real relaunch. This is implemented on branch
fix/live-run-reattach(commit 0d99dfe), no PR opened. - Tell the player when the match is gone (
Match not found), and offer to leave the run.
The branch change remembers the lobby when it is lost with its run live and recording (MPAPI.playback.remember_dropped_lobby). rejoin() in ui/reconnect_prompt.lua then calls MPAPI.playback.reattach_live_run, which takes the seat back without a fast-forward. It carries over the unsent replay events and the gamemode instance from the old lobby. It does not address 1, 2 or 4.
Not confirmed
- Server-side rule. I could not see why the server reports
verification_pendingafter a rejoin (whether the verdict is per socket session or has expired). Fixes 1 and 2 are written to work either way, but the server repo should confirm. - The branch has not been run. It only parses as Lua. It needs a two-player test: drop the connection during a PvP blind, then rejoin.
- Replay events recorded while no lobby exists are not recovered. Only events kept on the old lobby object are resent, so the server's log may have a gap there. How the server treats that (end-of-match hash check) is unknown.
- PvP's
attachhook on a live run. It callsPVP.setup_lobby_mirror, which I have not checked for resetting score, timers or ready state mid-blind. - The trigger for the original socket drop is not visible in the log.
- Ngôn ngữ chính
- Lua
- Star
- 10
- Fork
- 8
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 20
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Balatro-Multiplayer/BalatroMultiplayerAPI
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 63/100
Balatro-Multiplayer/BalatroMultiplayerAPI#55 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
Balatro-Multiplayer/BalatroMultiplayerAPI#61 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 57/100
Balatro-Multiplayer/BalatroMultiplayerAPI#58 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
Balatro-Multiplayer/BalatroMultiplayerAPI#57 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 52/100
Balatro-Multiplayer/BalatroMultiplayerAPI#56 ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của Balatro-Multiplayer/BalatroMultiplayerAPI
Issue tương tự
-
bug confirmed discord guide:tyrs-watch locale:enUS navigation v0.3.2
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
fitzforge/polestar#855 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 91/100
DennisRas/WeeklyKnowledge#164 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
perf: <BS> runs regex compares for rules that can never deleteCó thể đã có người làm @hood đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
windwp/nvim-autopairs#555 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
nvim-tree/nvim-tree.lua#3383 ·
Maintainer thường phản hồi trong vòng 1 ngày