3.5 KiB
3.5 KiB
Unity 重登修复:限定代码审查
日期:2026-09-21。审查人:当前主会话。本次是运行时缺陷修复后的自审,不是新的独立 agent 复审;此前独立 R1 结论仍只覆盖当时差异。
实施前方案与历次补充裁决见《Unity重登缺陷-方案与评审.md》。当前源码 SHA256 见 uloop-repair-source-hashes.json;没有提交 Git。测试结果/Unity运行矩阵见《UnityCliLoop最小登录验收-2026-09-21.md》。
本轮五个生产文件
| 文件 | 本轮修改与核对结果 |
|---|---|
| PFLoginAct.cs | 仅输入模式重试重新调用 InputID;submitted 在 await 前设定,输入取消后不会调用 Login,固定配置与 Agg 入口不变。真实失败→重试失败→改101成功已执行。 |
| ActivitySentryManager.cs | 当前容器变化时使类型映射、类型键缓存失效;显式注册和懒加载均执行边界检查。同容器重复仍被拒绝。使用类型缓存不拷贝旧服务实例。 |
| QuitAct.cs | CancelAllRegisteredTimers 后调用已有 Timer.Destroy;注销仍在首个 await 前,RT释放顺序不变。对Stop失败/非注销路径的原有语义未重写。 |
| PlayFabMgr.cs | SyncData 未登录直接返回,检查发生在出队/交换字典之前;OnDestroy 保存现有PlayerPrefs并取消旧循环。保留已登录上传、账号本地键和既有数据比较规则。 |
| HomePanel.cs | 仅 LastShowPanel 捕获容器;开始及延迟后检查对象存活,延迟后拒绝旧容器续体。正常流程继续原来的显示调用。 |
验证与风险审阅
- LoginActTests:PF/Agg原生命周期回归,加无效ID重复失败/改ID成功、输入等待注销/旧按钮隔离,退出0。
- ExitTests:4种退出/Stop失败组合,新增先取消Timer再销毁断言,退出0。
- ReentryTests:直接编译实际ActivitySentryManager及Attribute源文件,容器替换的显式/懒初始化、同容器重复、索引恢复,退出0。
- LogoutStorageTests:提取生产SyncData/OnDestroy,未授权不出队且无上传、本地Save和取消、已授权上传,退出0。测试不会连接或写正式存档。
- HomeExitTests:提取LastShowPanel方法体,将async void改成Task便于等待;正常、对象销毁、容器替换三项通过。引擎存活判断使用替身,实际Unity回归另列。
- 实际Unity最新编译0错误、271警告;警告明细保留,无删除/隐藏日志。五文件diff空白检查通过。
- 正式地址未修改,S101AccountSession/DebugConfig及运行时证据一致为http://s101.local:18080/;RT仍SkipNegotiation=true且仅WebSockets。
- PlayFab缓存保护不保证现有同步机制的云端最终一致性;60秒比较策略/失败补传/跨设备等属于暂停的后续存档阶段。当前未证明完整游戏存档隔离。
- 没有主动操作奖励/资产/会员/KV写删,正常游戏登录和退出会执行其既有初始化与存档回调,因此不能将本轮Unity测试描述为“所有网络请求只读”。
裁决
限定静态自审与定向回归未发现这五处补丁新增的确认阻塞项。实际Unity连续回归以独立验收文档的最终证据为准,不能因本文件通过便把S4真实竞态、SDK/真机、真实断网、存档隔离或全玩法标为通过。
已有俱乐部外围差异原样保留;未全局替换UserId、未改服务端、未启动KV/SDK删除。后续独立审查若安排,应以这五个文件的本轮增量及上面证据为范围,不将旧工作区所有差异当作本轮新增。