# M2修订1独立审查:主会话裁决与新增阻断 日期:2026-09-29。受审报告:`M2-先移植后优化独立方案审查-修订1.md`,SHA256 `5D293D41D26A23859AFEC85674B57F21BBF90D6FE8FEE445E954A1AF21BFE8A0`。主会话独立复算15项受审文件长度与SHA256,**15/15一致**;受审方案hash `64CB30F2C0613BB59E12F5C00BF0A64230FEE5047715488FA02E87C1CE92C219`。报告及原受审材料保持原样。本裁决不批准生产代码。 ## 逐项裁决 | 报告项 | 主会话裁决 | |---|---| | 总体路线通过 | 接受“先移植、后优化”,Guard是9月28日迁移新增而非原PF语义;B02四入口等价关闭仍有效。总体路线通过不等于首批编码批准。 | | CP1–CP2有条件通过 | 接受“有条件”的限定;**条件尚未满足,暂不编码**。需补五项具体合同/白名单,且下述正式启动阻断未被报告覆盖;因此不采纳“约30–50行即可接正式玩法”的工作量推断。 | | P2-1五项 | 全部接受为编码前置:正式入口签名、Guard释放点、原handle出口、Player构建31模块绑定、非Editor正式工厂与配置来源。每项须有文件/调用顺序/失败路径/验收。 | | P3-1 Guard引用映射 | 接受,作为迁移期不改Guard的范围核对及CP5后续评估输入;不因表格本身扩大CP1代码白名单。 | | P3-2 PF缓冲/触发差异 | 接受,每个业务域记录旧PF与KV的真实触发差异,CP4停用组件前逐项销账。 | | P3-3 Player编译旧错误 | 限定接受“历史错误需单列来源”的事实;**不接受把有编译错误的Player构建记为通过**。CP1离线/Editor可明确未验Player;正式入口交付前仍须解决或隔离该错误并获得0错误构建证据,不能用白名单冒充可运行。 | ## 源码新增阻断:审查报告未覆盖的正式启动链 1. `SubBoostrap.cs:91`无条件`AddComponent()`,其`Awake`在无Guard时立即建立PF缓冲和40秒循环。`UserService.KVLoad.cs:27–32`的受控协调器配置却要求未唤醒的PlayFabMgr、`HasLiveInstanceForKVLoad==false`、`CustomServerMgr.IsFreshForKVLoad`。普通游戏启动后这些条件不成立;只在`LoadAsync`末尾释放Guard不能使正式路径可达。需要先明确按backend分流的组件创建/未启动证明,不许静默停用PF默认路径。 2. `UserService.KVLoad.cs:17–25`把精确`SaveBackend=kv`拒为`BackendNotEnabled`;`UserService.cs:189–203`普通`LoginCore`先走PF登录,`IsLogin`与`IsAuthorized`也按PF状态计算。`AggUserService.cs:68–75`在渠道SDK登录前同样先拒KV。正式入口必须设计认证、正常Done/授权状态与PF回退边界;不是协调器加模式参数即可完成。 3. `CustomServerMgr.cs:49–73,126–129`当前KV网络借用只允许验证,普通API请求在`kvOnly`抛错;`PlayerKVLoginContext.cs:398–399`更只准两条`__kv_validation`路由。正式KV游戏需要可用且会话隔离的业务API路由。不能把验证租约改名当正式传输,也不能恢复旧Cookie容器的无排水替换缺陷。 4. `PlayerKVGameplayBindings.cs:1`整文件仅在`UNITY_EDITOR && !SERVICE_HOST`编译;`LoginStage`与正常服务注册仍按旧路径。移除编译门不等于正式对象全部注册且静止,须明确容器时序和缺失时拒绝。 上述是**能否到达正式KV加载的前置条件**,并非CP5架构优化。原ZCode报告判断“模式参数加30–50行可实现”未分析这些路径,不能作为编码授权。先修订完整方案,把P2五项与四类启动前置一起列入精确白名单/验收矩阵,再送原ZCode复审;不重复开发B01/B02,不在未批准范围试写。用户要求完成后的代码干净清晰:不得以测试专用旁路、同名PF转发壳或永远闲置的新组件掩盖这些缺口。