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

5.9 KiB
Raw Blame History

阶段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补审方案和提示词。不将null随手改成Nullable或零值来绕过完整评审要求。

D1/D2成果保留;检查点2仍未完成,待D3裁决后继续其余模块,3/4不越序。P2-α启用前置保持,4B1关闭、4B3未启动、G4未通过。