4.3 KiB
阶段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<int> 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整体通过。