# M2 CP2B-T独立实施复核 日期:2026-09-29。审查者:ZCode会话(M2全链审查者)。本轮只读+hash重算+源码核对+**独立复跑**。 ## 受审hash核对 `M2-CP2B-T交付hash.json`:**9/9全部一致**。 ## 总裁决 **通过。CP2B-T可限定关闭**(主会话裁决后)。 ## 独立复跑 | 项目 | 交付记录 | 本复跑 | 退出码 | |---|---|---|---| | KVGameLoadTests | 90组/2012断言 | **90组/2008断言/0失败**(4断言差为并发时序波动) | 0 | ## 五项逐条 ### 1. 正式/验证租约隔离+路由+超时+Cookie+Close排水:确认 - **模式隔离**:租约继承capability创建时的formal标志——验证仅两精确路由、正式仅规范相对GET/POST、互相拒绝——三向隔离闭合; - **15秒超时**:源码核实`PlayerKVLoginContext.cs:428`——`if (formal) client.Timeout = TimeSpan.FromSeconds(15)`——**正式租约超时已落实(P3-1从前审已修复)**; - **同账号Cookie**:复用Context的CookieContainer,无第二认证; - **单租约Close排水**:lease的CloseAsync负责——与CP1/4A合同一致。 ### 2. 运输就绪时序+401/Logout/旧响应闭合:确认 - Apply前绑定但不发布→GameLoaded+CP3A交接后一次EnableKVBusiness——**方案§3.2时序落实**; - 401/403→同步禁用+递增SessionVersion→作废旧响应→再交Coordinator关闭——撤销顺序正确; - 同账号新epoch→旧响应不恢复旧身份——同epoch核验。 ### 3. 后台调度+主线程安全:确认 源码核实`CustomServerMgr.cs:43/114`——`ownerContext = SynchronizationContext.Current`(创建管理器时捕获)→401回调经`Post`调度到原服务线程。**前审P3-2已落实**。回调未设置Current时`ownerContext`可能为null——但CustomServerMgr由SubBoostrap在Unity主线程创建,`Current`非null——无卡住风险。 ### 4. PF旧分支/验证路由/RTService Cookie/阶段闸保持:确认 - PF发送分支原逻辑不变; - 验证租 lease仍限两路由; - Cookie仅在当前正式就绪租约返回——RTService消费(Connect读Cookie+SessionVersion)保持原边界; - LoginStage KV阶段闸继续阻断FishingStage; - **无闲置实现**——EnableKVBusiness有消费者(UserService.KVLoad调用/CustomServerMgr定义)。 ### 5. 本地验证证据范围:确认 - 90组/2012断言(本复跑90/2008/0失败)+ServiceHost双条件各10组/119断言+Unity Editor编译0错误; - **不冒充**:线上路由合同/公开身份/真实Player/SignalR/首场景——交付如实声明。 ## P3 - **P3-1**:断言数2012 vs 本复跑2008——4条为并发时序波动(非回归,同4B1先例)。 ## 结论 **通过CP2B-T限定关闭。** 正式KV普通业务请求运输层已恢复——CustomServerMgr的GET/POST及包装方法在正式模式下通过同一租约/Cookie发送。下一步:CP2B首场景(身份发布+Mail/Survey/排行榜/Friend/AntiCheat接线)。