Files
ft/CodexOutput/upserver/最小登录收尾-第二轮验收结果.md

67 lines
7.4 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 21:40。C:/projects/ft/Client,Unity 2022.3.62f2c1,Unity CLI Loop 2.2.0。正式 API **http://s101.local:18080/**。范围以《当前阶段范围裁决-仅最小登录.md》为准。
## 结论
本轮补齐三个真实 Unity 登录退出时序场景,并通过快速 101→102→101 回归。测试发现的声音释放、地图初始化和旧阶段异步退出问题已按专项评审做最小修复;最终三轮运行时错误均为 0,实际 Hub Test=OK。已完成主会话限定代码自审,尚无覆盖本轮补丁的新独立复审。
**可执行的本轮 Unity 收尾通过;整个阶段不标为全部验收完成。** 真实渠道 SDK/真机、真实 HTTP 故障与断网恢复、完整存档隔离及必要玩法仍有未验收项。当前仍依赖 PlayFab 存档,没有迁移 KV 或删除 SDK。
## 证据矩阵
| 验收项 | 实际结果 | 证据(本目录) |
|---|---|---|
| 正常登录、非法 ID 更正重试、同号重登 | 前轮实际通过,本轮不重复开发 | UnityCliLoop最小登录验收-2026-09-21.md,uloop-final-reentry-run-03.log |
| 登录等待中退出 | 实际提交101,AuthorizedAtExit=false时进入QuitStage;旧身份/Cookie清空、令牌取消;旧输入事件触发后仍未授权,最终LoginStage,错误0 | acceptance-during-login-fixed-result.json、acceptance-during-login-fixed-errors.json |
| 失败弹窗旧重试按钮 | 退出后旧事件连续触发两次,无身份恢复/场景回流,错误0 | acceptance-old-retry-result.json、acceptance-old-retry-errors.json |
| 登录成功延迟中退出 | 捕获AuthorizedAtExit=true且SceneAtExit=LoginStage,立即QuitStage;最终LoginStage未授权,错误0 | acceptance-success-delay-result.json、acceptance-success-delay-errors.json、acceptance-success-delay-settled.json |
| 快速101→102→101 | 修复后同样快速时序三轮错误0,未靠延长初始化等待隐藏问题 | acceptance-progress-destroy-fixed-run.log;acceptance-progress-101/102-after.json、对应errors.json |
| Cookie及旧身份/Hub释放 | 两次退出旧身份清空、CookieJarReplaced=true/NewJarCount=0、SessionAdvanced=true、OldHubConnected=false | acceptance-progress-102-exit.json、acceptance-progress-101-exit.json |
| 实际SignalR | 最终101,Connected=true,实际IRTService.Publish的Test返回OK;不是业务推送或断网重连证据 | acceptance-final-hub.json |
| 核心进度抽查 | 101返回后抽查字段完全相同;102身份/进度不同;不等同完整存档隔离 | acceptance-progress-101-before.json、acceptance-progress-101-after.json、acceptance-progress-102-after.json |
| 首页入口 | 实际点击战令打开未解锁预览,社交页打开俱乐部页,无新的业务异常;未购买/领奖/入会 | acceptance-battlepass-*、acceptance-social-* |
| 最终状态 | FishingStage、101/InternalId2、Authorized=true,地址正确;原始Error日志0 | acceptance-final-state.json、acceptance-final-errors.json、acceptance-final-ui.json |
退出脚本走生产 QuitStage;不把停止 Play 或清缓存当注销。登录使用实际输入控件/EventSystem,竞态测试使用已观察按钮的公开 onClick,并非真实渠道 SDK 登录。首次成功延迟退出返回时处于 BoostrapScene,后续 settled 证据才确认最终 LoginStage。
### 核心字段抽查
| 账号 | 等级 | 金币 | 钻石 | 鱼竿ID | 战令状态 |
|---|---:|---:|---:|---:|---|
| 101(前后相同) | 62 | 36550472 | 0 | 20001 | 30701029,Active=false |
| 102 | 60 | 213645 | 100 | 20001 | 30701023,Active=true |
101 的过期/缺失活动路径本轮未复现此前 GetActivateItemId、FishingEvent not found、BattlePass 空引用。礼包有效性为 false;未操作奖励或验证所有道具/任务数据。正常游戏初始化可能执行已有同步回调,因此不能声称全过程网络只读。
## 发现与最小修复
实施前评审:《最小登录收尾-第二轮验收方案.md》《登录提前退出声音释放-修复方案与评审.md》。代码边界共四文件:
1. SoundService.Release:声音未初始化即退出的空引用;补可空依赖、有效句柄和重复释放保护。
2. FishingAct:旧地图初始化 await 返回后继续操作已失效场景;补捕获原登录生命周期及销毁检查,释放迟到资源。
3. FishingBehaviorB:缺鱼竿清理空引用、已销毁对象的迟到手部/鱼饵/鱼竿资源;只补初始化退出保护。
4. FishingStage:旧阶段各异步续体/进度回调保护;框架先卸载场景再启动 QuitAct,故 base.StartAsync 异常过滤同时检查旧对象已销毁或令牌已取消。存活且未取消的阶段错误仍抛出。
没有修改框架 DLL、正式地址、鱼概率/奖励、存档机制、俱乐部、KV 或工具包。前轮五文件修复和外围未提交改动保留。
### 验证与限制
- Unity 最新编译成功:0 错误、271 警告(acceptance-final-compile.json)。SoundExitTests 与 MapExitTests(8项)通过;后者只提取指定生产方法/片段,依赖使用替身,不代表完整玩法测试。
- 四文件 diff 检查通过;最终源码 SHA256:acceptance-round2-source-hashes.json。限定自审:《最小登录第二轮-限定代码审查.md》。旧独立 R1 审查不覆盖本轮补丁。
- 最终 Warning 总数236,完整消息保存在 acceptance-final-warnings-all.json;包括活动注册、红点和动画配置警告。未全部处理,不宣称零警告或所有玩法健康。最新成功轮没有观察到新增 FishingStage 取消 Warning;该异常过滤的确定分支覆盖来自定向测试。
- 所有失败证据保留:acceptance-before-map-guard、acceptance-before-stage-catch、acceptance-before-destroy-filter。修复后重进 Play 加载新代码,不清控制台冒充通过。
- 关闭战令预览时 ULoop 点击工具在按钮自行销毁后读取对象名称,产生工具 MissingReference;预览实际关闭。acceptance-social-errors.json 保存原堆栈,不算业务修复或隐去的原始错误。最终新 Play 轮 Error=0。
## 剩余验收及下一步
| 项目 | 当前缺口 | 下一步 |
|---|---|---|
| 真实渠道SDK/真机 | 用户明确安排最终再统一打包确认;本轮未测,不阻塞当前Editor验收 | 最终打包后验证渠道退出、换号与迟到SDK回调;当前不打包、不索要APK |
| HTTP401/超时恢复 | 本轮仅实际非法输入纠错;未注入真实传输故障 | 在可控且限定目标进程的环境注入,再验证失败状态和重试 |
| 真实断网自动重连/业务推送 | 当前非管理员,未执行系统断网;没有用主动Disconnect/Connect冒充自动恢复 | 安排仅影响C盘测试客户端的网络故障环境及对应推送 |
| 钓鱼玩法及完整存档隔离 | 已进场景/抽查核心字段;未抛竿、领取或全面比较存档 | 用户核对账号进度并补必要玩法验收;禁止用重置/覆盖存档制造测试 |
| 新独立代码review | 本轮完成主会话自审,尚无新独立复审 | 需要时将本报告、四文件diff与方案交给另一个审查任务 |
当前 Editor 保留 **PlayMode、101/FishingStage**(21:40取证),Hub正常,供人工复测。后续先补上述验收条件,发现新的范围内问题再专项评审并编码;不自动扩大到KV/俱乐部/SDK删除。没有Git提交、推送或发布,未操作D盘Unity。