Files
ft/CodexOutput/upserver/阶段4R1报错修复验收与关闭裁决-2026-09-24.md

52 lines
5.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.
# R1报错修复验收与关闭裁决
日期:2026-09-24。依据:[编码前逐项裁决与最小方案](阶段4R1报错修复裁决与最小实施方案-2026-09-24.md)、[独立实施复核](阶段4最小真实玩法闭环R1实施独立复核-2026-09-24.md)。
## 裁决与实际改动
独立报告SHA256 `520C61DC28CCA763BAE400CF154C7FC28B2CA71F5A0F67159D38A8E0F42B5A63`;编码前受审210项全部一致。报告五项回答及P2-1/P3-1/P3-2已逐条接受,详见编码前裁决。本轮修复生产逻辑仅两处:
1. `PlayerKVSaveSchema.DecodePlayer`缺InfiniteBuildingData时默认字符串`"0"`,恢复原业务默认。已有字符串/空字符串原样,显式null仍拒绝,Reset仍清空;不在getter吞异常、不补写服务器键。
2. `QuitAct.OnStarted`只对Editor KV闭环模式,在原清理完成后阻止Unload自动重进;Registry Ready才自动停止Play,其他状态保留进程及排水任务。普通路径仍2秒Unload。保留CreateNew和全部claimed标记,不吞IOException。
建筑修订来自独立报告明确批准;退出衔接为用户明确要求修复后、主会话编码前完成的补充方案评审,不冒称独立评审覆盖该新增修订。未改排行榜、PlayerData getter、QuitStage、Bootstrap、服务器或SDK。
状态文档同步前对210项旧受审清单重算,变更为上述两个生产文件、PlayerKVEditorValidationHost固定验证host、PlayerSchemaTests、KVGameplayLoopTests.csproj和实施记录,其余清单项一致;随后入口/开发状态/TODO/机器todo同步关闭结果。最终差异见repair-baseline-delta.json,新增工具/证据列入repair-final-hashes.json。工作区其他Git差异是既有改动,不能归为本轮修复。
## 检查点1/2:先失败后修复
原实现红测:4B2缺键默认断言失败;Unity M01真实Replace失败;实际QuitAct测试模式五状态均仍安排Unload而失败。首败原输出保留,不覆盖。
| 验证 | 修复后结果 | KVGameplayLoopTests下证据 |
|---|---|---|
| 4B2全量 | 75组1716断言,0失败 | repair-building-green.log |
| B3A --all | 13组544断言,0失败 | repair-b3a-all.log |
| 实际QuitAct,Editor/普通模式×5状态 | 10组35断言,0失败 | repair-exit-green.log |
| SERVICE_HOST原退出分支 | 10组30断言,0失败 | repair-exit-default.log |
| 许可 | 15断言通过 | repair-permit.log |
| Unity真实M01/B2-20/装备链 | 168/83/28断言通过,均恢复 | repair-unity-regression.json |
| Unity编译 | 0错误270警告 | repair-unity-compile.json |
P2-1的旧值不泄漏、缺键Replace后实际InfiniteBuildingLevel==0、已有值/空串、显式null拒绝、Reset合同均覆盖。P3-2要求的全量三探针已补齐。
## 检查点3:102真实回归
- 新Unity进程`101820_639258292892095408`,登录前本地缓存不存在;只启用已有102许可,不重导45键、不装备/消费/领奖。正式地址仍`http://s101.local:18080/`。
- 06:49:24Z claim,06:49:32Z Ready。真实内存建筑数据和InfiniteBuildingLevel均`"0"`;装备30003、等级60、金币213645、珍珠445、钻石100。正常登录/排行榜调用期间Error为0,见repair-real-values.json、repair-real-login-errors.json。
- 正常IStageService切QuitStage;06:51:45Z closed,随后日志`KV loop ended; restart Unity before another run. Shutdown: Ready`。没有手动Stop。06:53:55只读Hierarchy Context为editor(非runtime),证明已自动结束Play且超过原2秒延迟。编辑器恢复PreBoot场景不等于运行态再次Bootstrap。
- 退出后原两类错误为0(repair-real-exit-errors.json)。第三进程仅一次claim、一次Ready、一笔同值NewPlayerDataDic本地写尝试;accepted不是HTTP次数。
- 前后只读备份`20260924T064749Z`→`20260924T065309Z`,101均0键、102均45键且逐字符串完全相同;InfiniteBuildingData仍不存在,未补写。见repair-server-comparison.json。
- permit归档至runs/101820_639258292892095408/permit-used.json,三个进程claimed及import-102.claimed保留。最后通过CLI正常退出Unity101820,gracefully;无活动许可、未打包。
### 验证工具限制如实保留
正常QuitStage的动态脚本await随自动结束Play未返回,CLI最终180秒超时;这不是游戏关闭失败,closed、Ready退出日志、非运行态Hierarchy及逐值对账独立证明关闭成功。动态执行槽因等待仍占用,已正常退出Unity释放;没有修改CLI、强杀进程或手动Stop来伪造通过。今后这类退出验证应分开发起请求与只读观察,不依赖跨Stop的await返回。
另一次只读状态查询使用CLI帮助中列出但Editor未注册的get-project-info,产生一条Unknown tool错误;repair-final-errors.json仅此工具错误。首次退出Error=0和最终工具错误分开保存,不清Console、不声称最终全部日志为0。
## 正式关闭范围
**R1最小真实玩法闭环正式关闭,两处用户报错已修复并完成回归。** 独立报告允许P2-1修复回归后关闭,其余P3处理完成。签到隐藏关闭按钮曾由CLI触发既有关闭回调、未领奖,这一辅助边界保留;原鱼竿选择/装备使用实际UI,不能称完全无辅助用户流程。
关闭只覆盖单账号、重启式重登的一条真实存档闭环。4B3整体/G4、完整B/C热换号、4C消费、P2-α存量档专项、身份/外围迁移及最终打包仍未完成;不因本轮修复自动开启全量KV。继续运行必须新Unity进程和有效许可,不能删除claimed重跑。