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

33 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.
# 最小登录第二轮:限定代码审查
2026-09-21,当前主会话自审,未开展新的独立agent复审。实施前裁决见《最小登录收尾-第二轮验收方案.md》《登录提前退出声音释放-修复方案与评审.md》。
## 本轮生产边界
| 文件 | 核对内容 |
|---|---|
| SoundService.cs | 只修改Release:未初始化的淡入淡出字典/订阅/池依赖可空,有效Addressables句柄才释放并清空。正常释放仍执行。 |
| FishingAct.cs | StartAsync捕获现有LoginLifetime,在奖励、FishingData初始化及地图等待后拒绝旧续体。LoadMapByCurID把加载结果先保存在局部变量,旧生命周期只释放该结果,不挂载旧地图;手部/鱼竿/弹窗await后再检查。 |
| FishingBehaviorB.cs | SetIKTarget允许鱼竿尚未创建。手部/鱼饵/鱼竿资源完成后,如果Unity对象已经销毁则释放本次迟到资源,避免写回已销毁对象。 |
| FishingStage.cs | 首登各await和进度回调检查原LoginLifetime/对象存活。仅在旧Stage已销毁或原会话取消时捕获base.StartAsync内部失败并记录Warning;存活且未取消的当前阶段失败仍抛出。迟到调试Console实例释放。 |
本轮不修改正式地址、身份映射、PlayFab存档比较规则、鱼概率/奖励、俱乐部/KV、SDK删除或ULoop工具包。与上一轮五处修复分别记录,没有整批回退其他改动。
## 已验证的代码边界
- SoundExitTests真实Release方法:未初始化、部分/完整初始化、取消及重复释放通过。
- MapExitTests真实LoadMapByCurID前半段:正常加载、等待中注销、等待中销毁;迟到资源只释放、不应用,通过。
- MapExitTests真实SetIKTarget:无鱼竿、无IK、正常设置通过。
- MapExitTests真实FishingStage try/catch片段:正常完成、取消后的旧失败停止、对象销毁但令牌尚未取消时停止、当前会话失败继续抛出,通过。框架IL证实旧场景卸载早于QuitAct注销,不能仅依赖取消令牌。
- 实际Unity编译最新0错误/271警告,acceptance-final-compile.json;四文件diff空白检查通过,SHA256为acceptance-round2-source-hashes.json。
- S4三项已取得真实Unity阶段入口证据:等待中退出、旧重试按钮、成功延迟中退出。后续新地图保护不改PF登录/SoundService已测逻辑;快速换号最终结果单列在第二轮验收报告,不在此预判。
## 风险及结论边界
1. 这是最小登录/首进场景/退出清理的限定补丁,不能宣称所有钓鱼玩法异步操作都已处理。
2. 对资源服务内部加载过程的所有并发组合、真实渠道SDK/真机、实际HTTP401/超时和断网自动重连,仍需对应环境验收。
3. 旧Stage销毁或取消后底层句柄错误按Warning留痕,是限定的旧阶段退出策略;不是通过无条件catch隐藏当前账号启动失败。最新成功运行未观察到此Warning,因此异常过滤分支的确定覆盖来自定向测试,不能称真实运行必定命中过该分支。
4. 测试宿主引擎/Addressables依赖为替身;完整Unity效果以实际运行记录为准。
21:40最终回归:快速101→102→101三轮错误0、最终实际Hub Test=OK;核心字段前后相同,完整存档隔离仍待验收。限定静态审查与定向测试未发现当前增量的新增确认阻塞项。最终运行验收结论由《最小登录收尾-第二轮验收结果.md》记录;旧R1独立审查不覆盖本轮四个文件。