# 阶段4B2检查点2值类型空态独立审查(D3) 日期:2026-09-23。审查者:ZCode会话。 **身份披露**:未参与本补审方案编写(由主会话编制)。延续性披露:原附件M21/M22/M24的null空态描述是**我此前修订2审查未发现的第三类附件缺陷**(继AD格式、FootPrint位宽之后)——三处均为"空态写成null但字段实为非Nullable struct"。本轮按源码逐项复核。 本轮只读+仅新增本文件;未改代码/方案/入口/TODO/日志/hash;无子Agent、无正式服、无PlayMode、无Unity执行。 ## 基线核对 `阶段4B2检查点2值类型差异受审基线-2026-09-23.json`共10项,逐项重算SHA256——**全部一致**。 ## 三处源码事实核实(全部属实) | 模块 | 方案断言 | 本审查核实 | |---|---|---| | M21 PiggyBank | `PiggyBankPackData.cs:14`私有`struct Data`、`:36`非Nullable `Data _data` | ✓ 精确匹配(14行`private struct Data`、36行`private Data _data`) | | M22 Bargain | `BargainPackData.cs:14`为`GeneralEventPackData _data`;`GeneralEventPackData.cs:3`为`public struct` | ✓ 精确匹配 | | M24 ShootingRange | `ShootingRangeData.cs:11`为`RawData _data`(`new RawData()`初始化)、`:335`私有`struct RawData` | ✓ 精确匹配 | **字段枚举核对**:M22的11个整数(currentEventID/redirectID/VIPLvlWhenEventActivate/purchaseCount/savingProgress/discountLvl/visualProgress/visualDiscountLvl/rodID/lastPackIDBought/packID)+2布尔(doNeedTrigger/isTriggered)+float inflation+`List selections`——与`GeneralEventPackData.cs:3–21`**逐字段一致**;M24可见字段(EventId/CycleId/RedirectId/AmmoCount四个int+RewardFlag/TargetFlag两个`long`位集)与方案枚举一致(CurrentStageIdx/ChainProgress/HasBeenOpened/Inflation在方案枚举内,抽查窗口未覆盖但已见字段全部吻合,且Int64位集按声明位宽清零的要求明确)。原附件null空态确实不可直接实现,非文件漂移。 ## 推荐修订评估:采纳(通过) - **存在标记+原类型清零**是三案中唯一同时满足"不改PF公开面"与"显式Missing/Present区分"的方案:改Nullable会迫使PF getter/方法连锁调整(否决正确);只清零无标记则无法区分缺键与Present零值记录(否决正确,且与附件§1"缺失才生成空态、存在坏值才失败"的既有原则一致)。 - Missing/Present语义与修订2合同自洽:缺键→Missing(保持空态);Present需先过严格Decode+各自配置准入(M21的4055001映射仅对存在载荷、M22的PackType=3、M24按Dormant规则)——"Present不能从ID非0推断"明确堵住了隐式推断。 - JSON文字null仍Malformed、不调用旧Load/Init/Update/默认建档、selections新集合不共享、M24 Int64不缩窄(吸收D2教训)、失败重置全部模块且不留true标记、Reset异常Poisoned——全部与既定事务合同一致。 - 范围:`GeneralEventPackData.cs`仅作只读类型证据不入白名单;M15–19/25–28等其余载荷已按声明核查为class,不扩大调整面 ✓。 ## 发现清单 **无P1/P2。** P3三条: - **P3-1**:三模块存在标记建议统一命名并集中断言方式(如`KVLoadPresent`+internal只读访问),与M23的`ulong`完整位集、M08的字典替换在诊断输出中同列"存在性/完整性状态"——便于B2-22证据汇总。 - **P3-2**:M21 Reset枚举中的`savingProgress`在原附件§5 M21行未列出(原行只列四字段+redirectID)——本方案已补全为八字段,建议合并下一正式附件版时同步校正原§5 M21行的字段列举,保持两处一致。 - **P3-3**:建议在下一正式附件版的版本历史中同样登记D3(沿用D1/D2合并先例),避免"原文+两轮覆盖层"三层语义叠加。 ## 结论 **D3通过。** 三处事实准确、字段枚举精确、修订方案在既有边界内闭合(不改公开面、不扩白名单、不改JSON格式与主档规则),必验用例覆盖同对象A→B全字段断言/存在标记/集合不共享/Int64清零/缺键与零值区分。建议主会话逐条裁决(含P3-2/3的附件合并细节)后并入下一正式附件版本,继续检查点2剩余模块。本次为设计差异补审:不重审D1/D2、不重做检查点1,不代表检查点2或4B2整体通过。