Files
ft/CodexOutput/upserver/阶段4B2检查点2首批实现与证据-2026-09-23.md

46 lines
5.9 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.
# 阶段4B2检查点2首批实现与证据
日期:2026-09-23。**局部实现记录;检查点2尚未完成,不是4B2交付验收。** 用户通知审核更新并继续;当前D1/D2报告hash仍为已裁决版本,11项裁决交付文件开工前全部一致,无新增审核阻塞,按正式附件进入实施。
## 1. 实现范围
| 文件 | 本轮实际变更 |
|---|---|
| Services/PlayerData/PlayerKVSaveSchema.cs(新) | RFC JSON语法预检+Json.NET重复属性/类型检查、严格Int32/UInt64/有限浮点/时间解析、现代与旧19核心字段及重叠别名校验;D1成就三种表示全校验后规范比较;D2完整UInt64解码。仅内部模块codec,不提供完整Valid/进入游戏接口 |
| Services/PlayerData/PlayerKVDecodedSave.cs(新) | 捕获文化/表ID/枚举/时钟/InitWheelTicket的只读副本、纯核心/成就/FootPrint状态;诊断按模块/字段排序保留前32条,全部错误按模块/代码累计,TotalErrors/OmittedDetails无原值 |
| DataCenter/AchievementDataManager.cs | 新增内部纯Decode/Reset/Replace和只读验证访问;替换整字典、为每项创建独立数据值,不调用旧loader/Init/Save/事件;原PF方法不改 |
| Services/FootPrintService.cs | 新增内部纯Decode/Reset/Replace、完整ulong字段及只读验证访问;显式unchecked低32位投影;Reset完整值和旧视图一起清零;公开枚举/接口及PF原方法不改 |
| Services/PlayerData/PlayerKVEditorValidationHost.cs(新,UNITY_EDITOR) | 固定M08-M23局部验证,使用真实模块对象、同对象A→B、try/catch/finally及结构化错误;两对象构造和纯入口不Resolve/替换GContext,无后台工作 |
| Client/Assets/Editor/KVGameLoadValidation.cs(新) | 固定HotUpdate类型及RunAsync方法反射、固定caseId白名单;不接受任意程序集/成员/代码/URL |
| CodexOutput/upserver/KVGameLoadTests | 显式链接新增纯源码;新增SchemaTests,旧19组继续跑;没有改原4B1或其他旧测试源码/csproj |
Unity路径除Editor包装器外相对`Client/Assets/Scripts/`,四个新增Unity文件均有meta。M01/M02目前只做核心字段纯codec,未声称其真实PlayerData/SmallGame对象Apply完成。M08/M23完成上述局部纯入口验证,完整guard/事务/服务编排/跨模块失效验证仍待检查点2后续及3/4。
## 2. 验证记录
证据均在`KVGameLoadTests/`,原输出及实际退出码分别保留。
| 验证 | 结果 | 证据 |
|---|---|---|
| 首轮离线 | 29组/0失败/289断言 | checkpoint2-codecs-first.log及exit.json;run 20260923120231_d8129b66bc174855a41c3e1728f08e47 |
| 严格JSON补充后离线 | 29组/0失败/294断言 | checkpoint2-codecs-strict.log及exit.json;run 20260923120634_703908f0dfd048afb788c39577eee8e5 |
| 最终离线(补齐基础codec正反例) | 30组/0失败/313断言 | checkpoint2-codecs-final.log及exit.json;run 20260923121325_341437bbc7f2486b82126a8abe6fdea3 |
| 原4B1全量原宿主 | 23组/0失败/279断言 | checkpoint2-4B1-regression.log及exit.json;run 20260923120919_c0d6c2f883944335a378589e4f0e3eef |
| Unity最终编译 | Success=true、0错误、271条其他文件警告,本轮变更文件0警告 | checkpoint2-unity-final.log及exit.json;首轮274警告日志保留,不声称修了旧警告 |
| Unity真实M08/M23 | success=true,28条断言,fullB220=false | checkpoint2-unity-M08-M23-final.log及exit.json |
| KVLiveTests | 仅build,0错误/0警告、退出0 | checkpoint2-live-build.log及exit.json;没有run |
最终30组=检查点1的19组+新增11组Schema测试。并发发行/关闭中的附加断言可能随合法竞争结果变化,不能用跨run总数差异推断失败。新增用例覆盖每个核心槽坏值、19槽长度、货币别名/UInt64边界/位掩码、残缺/冲突/未知配置、文化歧义、只读快照、AD三种表示/重复枚举别名/坏旧不回落、FootPrint全域及坏值、有界诊断。自审确认Json.NET会宽松接受单引号/裸属性名/尾逗号,增加语法预检并加入反例;文化时间解析使用NoCurrentDateDefault避免隐式读取当天日期。最终补齐JSON合法转义/数字及非法语法、有限浮点/NaN/Infinity/溢出/千位分隔正反例。
M08真实对象逐项断言Id/Target/day、只读访问不泄露可变值、坏Decode不污染A、同对象B缺失后整字典为空。M23真实对象覆盖0、低位组合、2^31、2^32、UInt64.MaxValue,断言完整值/低32位视图,并逐次在同对象上缺键归零。
Unity通过C盘项目的CLI Loop执行,运行前IsPlaying=False。局部宿主不触碰共享容器,未执行全部31对象/写入guard/容器替换与恢复,因此**不勾选完整B2-20或零副作用全链验收**。没有进入PlayMode,没有本轮正式服请求或打包。编译原始日志含本地路径,不宣称原始工具输出是脱敏业务日志。
## 3. 源码边界与未完成项
相对修订2原123项基线,120项不变,3项变化是上一检查点已批准的Context以及本轮M08/M23;旧测试、ClubService、主方案/原附件均未变。新文件及最终证据hash见`KVGameLoadTests/checkpoint2-increment-source-hashes.json`。后续阶段不能用本批30组替代原4A/42/86/29/Review/3C等完整回归,完整矩阵仍待检查点4。
继续映射其他模块时集中发现M21/M22/M24原字段均为非Nullable struct,而附件要求null。三处原源码hash与开工基线一致,未修改这些模块或GeneralEventPackData类型。具体证据、推荐“存在标记+字段清零”合同、各字段枚举及真实对象验收要求已落盘[值类型空态D3补审方案](阶段4B2检查点2值类型空态差异补审方案-2026-09-23.md)和[提示词](其他AI审查提示词-4B2值类型空态差异-2026-09-23.md)。不将null随手改成Nullable或零值来绕过完整评审要求。
D1/D2成果保留;检查点2仍未完成,待D3裁决后继续其余模块,3/4不越序。P2-α启用前置保持,4B1关闭、4B3未启动、G4未通过。