46 lines
5.9 KiB
Markdown
46 lines
5.9 KiB
Markdown
# 阶段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未通过。
|