保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
2.9 KiB
2.9 KiB
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接线)。