Files
ft/CodexOutput/upserver/仅最小登录-限定代码审查.md

68 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 仅最小登录:限定代码审查
日期:2026-09-21。审查者:独立子 agent minimal_scope_review。优先依据《当前阶段范围裁决-仅最小登录.md》《仅最小登录-核对验证方案.md》。本文件只记录限定范围 review,不代表整个项目或所有工作区差异获准发布。
## 最终裁决(复审后)
**R1 已修复并通过限定复审;当前限定范围未发现剩余已确认阻塞项。** 这是代码与离线证据结论,Unity/真实渠道 SDK/真实网络重连仍须验收,不标记整个阶段端到端完成。
## 初审裁决(历史记录,已由末尾复审更新)
**存在 1 项需要修复或明确保留的 P2 范围内问题,暂不能判定代码收尾通过。** 认证会话、manager 版本隔离、QuitAct 提前注销、SignalR 首连注册/串行释放、GetSelfClub 必要保护,未发现新的已确认阻塞问题。Unity/真实 SDK 项仍待验收。
### R1 / P2:PFLoginAct 的异步登录和重试续体不随退出失效
文件:Client/Assets/Scripts/Stages/PFLoginAct.cs,初审行 77–98、128–144、238。
触发:登录尚未完成时退出,服务层世代校验使旧 Login 返回 Api;DoLogin 会继续调用 ReytryDialog,访问已退出场景的 dialog。或者重试成功后进入 Task.Delay(1000),期间退出,延时结束后仍调用 MailService.Init、iapService.Init 和 Unload。OnDestroy 为空,没有停止进度循环、作废重试回调或等待续体。服务层拒绝旧认证不等于入口 Act 的后续动作停止。
建议:给登录入口补注销/销毁生命周期校验;在每个相关 await 后以及重试按钮回调前确认当前入口有效;销毁时使等待和进度循环失效。测试须覆盖登录待完成时退出、重试成功延迟中退出、旧重试按钮回调,以及有效入口失败后正常重试。此修复限最小登录生命周期,不扩展外围业务。
## 测试证据核查
- MinimalLoginTests 直接编译 S101AccountSession 与 CustomServerMgr;Latest.log 记录 32 项通过。涵盖协议、错误、重试、旧响应、会话销毁、Cookie 容器轮换。它不编译执行 PlayFabUserService/AggUserService/PFLoginAct 的整体流程。
- ExitTests 直接编译 QuitAct,但 IUserService 和 Hub 是替身:4 组可证明 Logout 调用在 ReleaseAsync 等待之前,不能证明真实 SDK/PlayFab 的注销全局状态。
- RealtimeTests 使用真实 RTService 和替身 Hub,可验证首连绑定、订阅唯一、版本丢弃、等待释放;把替身 State 改成 Reconnecting 后改回 Connected 不等于真实网络重连。
- HomeLoginTests 提取生产 GetSelfClub 方法,覆盖空、非法、缺字段、未授权、旧响应及有效成员/无俱乐部;测试不调用线上会员接口。
- 活动/战令保护差异在配置缺失时提前返回,不重置或写回旧存档;有效配置刷新路径保留。实际首页/钓鱼仍待验收。
- 主 agent 记录的四轮 101→101→102→101 正式探测仅为独立会话登录、授权 Get、raw ClientWebSocket SignalR Test。已核对探测源代码,地址为 s101.local:18080,主动 Close/Dispose/Clear;该证据不能替代 Unity HubConnection 或渠道 SDK 换号。本审查未重复访问生产服务器。
- RuntimeCompile.log 与生成器支持“最新项目源码 Roslyn 编译”的结论;不等于 Unity 资源导入、打包、IL2CPP 或真机运行。
## 地址核对
S101AccountSession.DefaultApiUrl 与 DebugConfig 的 Svr101 API 配置均为 http://s101.local:18080/;CustomServerMgr 默认使用此前者,RTService 从其 ApiBaseUri 构造 gamehub。其他开发环境配置仍可以存在其他地址;当前使用 Svr101 的持久化配置需在实际 Unity 测试中确认。
## 未覆盖 / 待验收
1. Unity 主入口正常登录、失败重试、退出再登录、换号组合路径。
2. 真实渠道 SDK 在登录途中注销、迟到回调与全局账号状态。
3. Unity SignalR 首次业务消息、释放以及真实断网自动重连。
4. 首页/钓鱼原报错复测,存档内容不被清空或重置。
## 外围排除项
ClubService 除 GetSelfClub 外的创建/退出/申请/成员/签到/消息改动,俱乐部 UI,完整身份迁移,KV 写删及存档切换,PlayFab SDK 删除均不纳入本次通过条件。已有差异保留,不应整文件回退。工作区不等于已经拆分出“仅最小登录”发布包。
## R1 复审记录
复审日期:2026-09-21。已核对《仅最小登录-核对验证方案.md》步骤4专项裁决以及当前生产差异。
- IUserService/PlayFabUserService 新增只读 LoginLifetime;Logout 清空身份/Cookie 后先轮换新令牌再取消旧令牌。旧入口取消回调看到身份失效,新入口可使用新令牌。
- PFLoginAct 与同构 AggLoginAct 关联该令牌;await Login、输入、重试后检查取消。重试成功的 1 秒延迟使用取消令牌,不再在退出后走 Mail/IAP/Unload。
- 重试回调共用 submitted 门并先检查取消;同步完成、异步完成及重复按钮只会发起一次登录,使用 TrySetResult/TrySetException 避免完成两次。
- InputID 取消等待并移除自己的监听,重复点击无重复完成;OnDestroy 作废入口、释放关联令牌。PF 进度循环与两个入口的进度回调也检查取消。
- Agg 登录类型等待登记取消,渠道面板回调检查取消和任务是否已完成;选择渠道前先关闭面板再 TrySetResult,避免同步续体被旧 CloseLoginPanel 覆盖。
独立复跑命令(此审查实际执行,退出码0):
```powershell
dotnet run --project CodexOutput/upserver/LoginActTests/LoginActTests.csproj --no-restore --verbosity quiet
```
结果:PF 与 Agg 两组正常/重试/重复按钮/注销/销毁/迟到/延迟/异常路径通过;输入取消/成功及生产 Logout 令牌轮换顺序通过。测试从实际生产方法提取,用户服务登录、UI和SDK为替身;Agg OpenLoginPanel 与 OnChooseLoginType 属于静态核对,未由此测试执行。同步 UI 事件和真实 SDK 回调仍需要 Unity 场景补验。
结论:**关闭 R1。** 本轮新增生命周期修复属于最小登录范围;没有以此扩大俱乐部、KV 或 SDK 删除范围。此限定复审未发现新的已确认阻塞项;前述 Unity/真机待验收项原样保留。
## 2026-09-21 20:50 Unity后续补丁审查边界
本文件的独立R1复审是历史证据。后续真实Unity验收发现并修复五处缺陷,其方案和当前主会话限定review分别见《Unity重登缺陷-方案与评审.md》《Unity重登修复-限定代码审查.md》,运行结果见《UnityCliLoop最小登录验收-2026-09-21.md》。这些新补丁未获得新的独立agent复审,不能直接继承本文件的独立通过结论。