docs(upserver): 归档阶段裁决与批量迁移待办

This commit is contained in:
Liubing\LB
2026-09-28 18:17:40 +08:00
parent a6f5e107f8
commit 1c0cdf7a99
376 changed files with 89430 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
# F1 / F2 / F3 代码独立审查
日期:2026-09-21。审查对象:当前未提交工作区本轮修复。审查者为主任务派生的独立审查 agent,不是另建 Codex Session。只写本文件,不修改生产代码。
## 初审裁决
**暂不通过:确认 2 项需修复的回归。** F3 退出先失效、F1 本人 API 身份及成员 UI 比较、F2 CreateClub/QuitClub 显式成功与会话检查的主要方向正确。以下问题修复并验证后复审。
### R1 / P2:批量拒绝申请的真实成功码被拒绝
- 客户端 `ClubService.HandleApply` 只接受 code=0,空 applyId 的清列表逻辑位于其后,因此实际无法到达。
- 服务端 `LeaderboardAPI/Services/Club/ClubService.cs:538–544` 对空 playerId 删除申请列表后返回 code=4。
- 影响:批量拒绝服务端已成功,本地申请列表与红点仍残留。与实施方案“保留批量拒绝”不符。
- 建议:只在 `!isAgree && applyId == ""` 情况认可 code=4;普通单个操作仍按真实合同处理,空 ID 同意操作应阻断。补真实 code=4 的测试。
### R2 / P1:签到时间后移后,按钮仍可重复点击并重复发奖
- `SocialClubJoined.OnSign` 调用 async void `ClubSingin()` 后立即调用 `SetSignCD()`;本批把 signTime 设置移到了请求成功后,立即刷新仍看到未签到,按钮保持可用,成功后也未主动刷新这个 UI。
- `ClubSingin` 没有进行中及当天已签到保护;服务端 `ClubSingin` 对任何会员请求都返回 code=0,没有按日期去重。
- 影响:网络等待期间双击或成功后再次点击会再次发出签到请求,并多次执行 `AddItemByDrop`。这是本次调整暴露的具体资源重复发放风险。
- 建议:增加会话关联的签到进行中保护、成功日期保护;失败后允许重试;UI 等待请求结束再刷新并恢复按钮,过期会话不能发奖或覆盖新 UI。验证双击、成功后再次调用、失败重试及旧会话响应。
## 已核查通过的局部设计
- QuitAct 在第一个 await 和 UI 清理前消费注销标记并调用 Logout;无需注销路径保留。Hub 释放异常仍可继续清理。
- AggUserService 先 base.Logout 再渠道 Logout,先使客户端认证失效。
- 11 个本人 ID 请求使用已认证 ApiPlayerId,旧 PlayFab 存档 UserId 未全局替换;目标 ID 保持目标语义,缓存本人映射使用数字身份。
- 受改请求在 await 后核对会话版本和身份;GetClubDetails 的第二个聊天 await 后再次核对。
- CreateClub 明确 code=0 且 clubInfo/id 有效才成功,code=1 不触发创建 UI 再扣消耗;QuitClub 仅 code=0/1 才清理。
- 三个成员 UI 的本人判定使用 ApiPlayerId。
## 验证证据边界
本 agent 独立阅读实际生产源码、服务端本地源码、测试生成器及测试用例;尚未自行执行测试。主任务负责执行并提供测试结果。
ExitTests 编译实际 QuitAct,但用户服务、SDK、HTTP、Hub 为替身,不能将 DeliverOldHttpAndLogin 的模拟断言描述为实际 SDK 回调验证。ClubRegression 初版只提取 CreateClub/QuitClub/Demote/Promote/Kickout,25 项通过不包含 HandleApply/ClubSingin,也不等于完整俱乐部场景通过。
不连接正式服、不实际创建/退出俱乐部、不操作玩家资产;本地服务器合同不保证线上部署版本一致。聊天内部异步发送、体力捐赠、点赞与其他未覆盖社交方法仍需后续迁移,不能因此宣称全社交隔离已完成。
## 修复后复审裁决
**本批代码审查通过:初审 R1、R2 均已修复,未发现本次边界内其他已确认阻塞项。** 可关闭本批代码阻塞;不表示全游戏迁移完成,也不替代 Unity 场景、渠道 SDK 和真实断网重连验收。
- R1:`HandleApply` 在发送前拒绝空 ID 的同意操作,空 ID 拒绝仅认可 code=4,普通单人请求仍只认可 code=0。已阅读实际改后源码,并确认测试包含成功清列表、错误 code 不清列表、空同意不发请求。
- R2:`ClubSingin` 返回 Task;会话版本对应的进行中状态阻止并发重复请求,成功后以完整日期阻止当天重复发奖,finally 只释放本次版本的锁。请求失败不提前写签到时间,允许重试;旧会话响应不发奖、不写存档。`SocialClubJoined.OnSign` 禁用交互、等待完成并在同会话 finally 刷新签到 UI,日期比较已从 DayOfYear 改为 Date。
- 复审实跑:`dotnet run --project CodexOutput/upserver/ClubRegression/ClubRegression.csproj --no-restore --verbosity quiet`,退出 0,**31 项通过**。实际源码方法由生成器提取;运行环境、传输与奖励对象为替身,UI await 刷新链本次为源码审查,未执行 Unity 点击测试。
- 主任务报告 2079 源码重编译通过;本 agent 未重复编译,具体命令和完整结果由主任务验收文档保留。
保留限制:服务端签到本身仍不实现跨设备幂等;此次修复覆盖客户端正常操作重复点击引入的回归。完整签到持久化可靠性随 KV 阶段继续验收。其余未迁移社交功能、SDK 内部回调及线上部署契约仍按前述边界处理。