6.7 KiB
仅最小登录:限定代码审查
日期: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 测试中确认。
未覆盖 / 待验收
- Unity 主入口正常登录、失败重试、退出再登录、换号组合路径。
- 真实渠道 SDK 在登录途中注销、迟到回调与全局账号状态。
- Unity SignalR 首次业务消息、释放以及真实断网自动重连。
- 首页/钓鱼原报错复测,存档内容不被清空或重置。
外围排除项
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):
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复审,不能直接继承本文件的独立通过结论。