Files
Genarrative/docs/experience/PUZZLE_LOCAL_RUN_LEADERBOARD_FIX_2026-04-28.md
2026-04-28 19:36:39 +08:00

1.4 KiB
Raw Blame History

拼图本地运行态通关排行榜误请求修复记录

问题现象

拼图关卡完成后,右下角会弹出错误提示,内容表现为拼图 run 不存在。

根因

当前拼图玩法仍有一条前端本地兜底链路:

  1. 进入拼图测试或公开作品体验时,前端先创建 local-puzzle-run-* 形式的本地运行态。
  2. 这类 run 只存在于前端内存,不存在后端持久化记录。
  3. 通关副作用里却统一调用了后端 submitPuzzleLeaderboard(runId, payload)
  4. 后端拿到本地 runId 后无法找到真实记录于是返回“run 不存在”,最终在运行时右下角暴露成错误提示。

修复口径

本次不改后端接口,也不把本地兜底 run 强行持久化到后端,而是先把边界收口到前端:

  1. 显式识别 local-puzzle-run-* 这类本地 run。
  2. 本地 run 通关后不再请求后端排行榜接口。
  3. 直接在前端本地生成只包含当前玩家成绩的排行榜数据,保证结算弹窗仍可展示成绩。
  4. 真实后端 run 仍继续走正式排行榜提交流程,不影响后续 Rust / SpacetimeDB 版本的统一收口。

经验结论

只要某条玩法链路还保留“本地 run / 本地快照”兜底,就不能在通关、副作用、排行榜、下一关等后置动作里默认把它当成后端真 run 使用。必须先做运行态来源分流,再决定是否调用依赖真实 runId 的接口。