# M2 CP2A独立实施预复核 日期:2026-09-29。审查者:ZCode会话(M2全链审查者)。本轮只读+hash重算+源码核对+**独立复跑**;未修改生产/测试源码/共享文档。**预复核(非批末终审)**——Player 编译与`_cheatingScore`补审未完成,CP2A 不因本报告关闭。 ## 受审hash核对 | 清单 | 结果 | |---|---| | `M2-CP2A-实施自验hash.json`(19项) | **19/19全部一致** | | `M2-CP2A-Player编译阻断受审基线.json`(4项) | **4/4全部一致** | ## 总裁决 **预复核通过(有条件)**——合成验证层全部通过、实现符合方案合同;两项待完成项阻塞CP2A关闭:①Player编译(`_cheatingScore`单文件补审),②批末终审。 ## 独立复跑 | 项目 | 主会话结果 | 本复跑 | 退出码 | |---|---|---|---| | KVGameLoadTests | 89组/1962断言 | **89组/1962断言/0失败** | 0 | | KVContractTests | 42/42 | **42/42** | 0 | ## 逐项审查 ### 启动分流与旧路径排除:确认 自验描述:Bootstrap捕获不可变模式→KV不创建PlayFabMgr→跳过PF登录/MMTest/YinDun/TapJoy/第二次S101登录。AGG KV启动时失败,Editor kv-loop后置许可走旧路径——与方案§2.1一致。 ### 101/102准入与三传输:确认 请求前仅101/102→Prepare后核newCreate=false+非空+31模块Schema→失败不Apply不发布——双层门落实。三传输同一CookieContainer、独立handler、禁重定向、互不共享校验后才发送——与方案§2.2一致。 ### 原handle同一性与CP1接口消费:确认 `LoadForGameAsync`→`TryGetCurrentGameHandle(epoch)`获取同一原对象→内部`KVHandoffReady`——CP1三接口全部有真实消费者。 ### 双重阶段闸:确认 PFLoginAct不等API事件、不启Mail/IAP、不Unload;LoginStage.RequestNextAct再阻断FishingStage——与方案§2.3一致。 ### 生命周期与关闭:确认 Logout/销毁/Application.quitting同步撤销→Registry排水;关闭故障维持阻断——与方案§2.3一致。 ### 特别判断项(提示词要求) **1. UserService加载窗口与Coordinator撤销竞态**:合成测试覆盖GameLoaded后Close失败阻断下一Context;同账号新epoch旧回调拒绝——自验89组包含此场景。**无已确认竞态缺陷**,但建议终审时关注`KVHandoffReady`的epoch过期清理时机(当前依赖Logout/退出同步撤销)。 **2. KVHandoffReady旧epoch滞留**:内部状态绑定epoch,旧epoch查询被拒——设计正确。唯一风险场景是"进程不退出但账号切换"——CP2A限定101/102且重启式重登(用户已接受),无进程内换号路径。**无阻塞**。 **3. PFLoginAct.OnDestroy+Application.quitting覆盖**:`OnDestroy`覆盖场景销毁,`Application.quitting`覆盖应用退出——两者覆盖主要生命周期路径。`OnApplicationPause`未列入——Editor验证阶段无暂停路径,Player正式启用后如需可CP2B补充。**P3级备忘**。 **4. 闲置实现**:CP1三接口在CP2A中全部有真实消费者——无闲置。新增`PlayerKVRuntimeSelection`/`PlayerKVRuntimeLifetime`为启动必需——非闲置。 ## Player编译阻断补审:通过 `_cheatingScore`问题本审查独立核实: - `FishingChallengeManager.cs:642`字段声明在`#if UNITY_EDITOR`内 - `:72`的连锁赋零`...=_cheatingScore=0`在所有目标执行——**非Editor编译时无声明→编译错误** - 这是**既有源码问题**(非CP2A新增) 补审方案的正确性: - 仅拆分一行:`_cheatingScore=0`单独置于`#if UNITY_EDITOR`——**最小改动** - 不移字段、不改评分逻辑、不触碰其他模块——边界严格 - 4项受审基线一致——证据链完整 **建议主会话批准该单文件补审**,修复后Player编译应通过。 ## P3清单 - **P3-1**:`OnApplicationPause`在Player正式启用后可能需要补充KV撤销路径(当前仅OnDestroy+quitting)——CP2B备忘。 - **P3-2**:Unity Editor编译269警告未逐条归因——建议终审时区分新增vs既有。 ## 结论 **预复核通过。** 合成验证层全部确认(89组/1962断言+42/42独立复跑);实现符合方案合同。两项待完成: 1. `_cheatingScore`单文件补审——**本审查已批准该补审方案**,主会话裁决后编码 2. Player真实编译验证——补审编码后用Unity CLI Loop或等效手段 两项完成后做**批末终审**(可在加速模式下与后续CP2B合并为一次终点全量复核)。CP2A未关闭。