Files
ft/CodexOutput/upserver/P2-alpha-B两类历史空态兼容方案独立审查-2026-09-28.md

4.6 KiB
Raw Blame History

P2-alpha-B两类历史空态兼容方案独立审查

日期:2026-09-28。审查者:ZCode会话。独立性声明:未参与本方案编写;此前参与为P2-α-A方案与执行两轮审查(本方案三条P3附件即对该轮建议的落实)。本轮只读+hash重算+源码核查。

受审hash核对

P2AlphaNullCompatibility/design-review-hashes.json:1277/1277重算全部一致(含冻结配置/源码、142锚点附件、定位与102时间线、白名单JSON、方案与提示词)。

总判定

通过。可批准B1~B4实施。 无P1/P2;P3三条不阻塞。方案是"两条空态精确保留"与"通用框架"之间的正确最小解,且已预先吸收前轮全部三条P3与apphost教训。

八项逐条

1. 文件边界足够小且无遗漏强制消费者:是。 4个生产文件与两处改动一一对应(Schema两Decode、DecodedSave两DTO、ChallengeManager Replace条件、Bargain Replace selections);Raw保留由既有DecodedSave复制承担(无需改);序列化侧DoSave对null的行为经验证不改(T3);3个测试文件复用既有工程与固定入口。无通用框架、无新DTO体系外的结构。若不同意新增M15旗标(提示词第8问):替代要么把"键存在null"折叠进IsPresent(丢失缺键/null区分→违反显式空态原则)、要么在Raw层判空(Decode无状态、Apply需重读Raw——更大改动)——维持旗标方案。

2. M15三态区分成立:是。 本审查核实DecodeChallenge(:803–806)现状(缺键→Missing、其余严格);新合同"先原严格Json一次、仅token.Type==Null走ExplicitNull()工厂"精确且不触碰共用helper;explicitNull&&!present非法组合校验、对象字段仍严格、可选构造参数保留旧调用、DTO不序列化到服务器——闭合。

3. M15 Replace与前置限制:正确。 现状:79 !state.IsPresent ? null : new…扩展为"缺失或显式null→null"是最小改法;Reset先行由既有事务承担。142锚点附件诚实——首行即声明"近邻声明≠控制流支配证明";InChallenge:510"state0仍可能触发加载"、未证明场景入口(Road/场景)均保留限制未冒充安全;fresh/Reset→显式null与缺键的DTO/Raw存在性差异入测(T3)。

4. M22最小null接受:完整。 仅selections属性token.Type==Null接受、属性缺失仍被IntegerList拒绝(C# null≠JSON null的区分正确);其余14字段/PackType=3/IsPresent/错误分类原样;null不转[]、不重建、不删键;DTO/Apply/Snapshot三处null与深复制逐一定义(表四场景)。

5. T1~T8覆盖充分。 红测先行且仅精确改写两条期望(其余严格负例保留);比较器适配正确且必要——本审查核实:117 SameList直接取Count无法比较双null,方案仅在Bargain专用Same(:107)的selections子表达加null分支、其余14字段比较不变、并新增null/null相等与null/[]不等断言防漏检;T5明示dotnet <明确构建DLL>+hash记录(apphost教训落实);T6的101双诊断消失+第三问题即停边界明确。

6. 边界可执行:是。 失败停点(第三种拒档不扩大)、Editor准入不绕静态门、无Play/许可/远端、90064不假设仍可用、不用launch --restart。

7. 附件对应既有证据:是。 142锚点/A3未定位搜索记录/102分叉时间线均引用封存证据未重写历史;政策与26模块外键/Present不足保持未决;本方案非101导入或正式启用授权。

8. 批准B1~B4:可以。 B0已完成(本审查对象);B1裁决→B2红测+四文件最小差异→B3验证(T3~T8)→B4交付→B5独立实施复核。

P3清单(不阻塞)

  • P3-1:T1建议补一条断言:显式null样本的Raw值逐字节保留原始字符串(含空白变体),与"DTO旗标不反推Raw"互相印证(方案文字已承诺,落为显式断言更利于B5复核)。
  • P3-2:PlayerKVChallengeState.IsExplicitNull与ExplicitNull()工厂建议加XML注释注明"内部内存表示、不参与服务器序列化"(方案§3.1已声明,代码注释防后续维护者误用)。
  • P3-3:B3若101出现第三诊断,建议停点记录直接引用本方案§2"白名单扩展需停在新差异"原文+诊断JSON路径,形成标准停点模板(后续单元复用)。

结论

通过P2-α-B方案,批准B1~B4实施。 主会话核hash(已代验1277/1277)逐条裁决后按检查点推进;B4交付后交B5独立实施复核。本单元关闭仅覆盖两类空态兼容表示,不关闭整体P2-α/G4、不构成101导入或正式启用授权。