Files
ft/CodexOutput/upserver/Unity重登修复-限定代码审查.md

34 lines
3.5 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.
# 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删除。后续独立审查若安排,应以这五个文件的本轮增量及上面证据为范围,不将旧工作区所有差异当作本轮新增。