保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
3.6 KiB
M2 CP1独立实施复核
日期:2026-09-29。审查者:ZCode会话(M2修订1/修订2审查者、CP1方案审查者)。本轮只读+hash重算+源码核对+独立复跑全部核心测试套件;未修改生产/测试源码/共享文档。
受审hash核对
M2-CP1交付hash.json:95/95重算全部一致(含两生产文件、测试宿主、diff.patch、scope验证、全部日志与Unity证据)。旧19项基线中两获批生产源码变化为预期差异。
总裁决
通过。CP1限定实施可关闭(主会话裁决后)。无P1/P2;P3两条。
独立复跑
| 项目 | 主会话结果 | 本复跑 | 退出码 |
|---|---|---|---|
| KVGameLoadTests(加载宿主) | 84组/1911断言 | 84组/1911断言/0失败 | 0 |
| KVLoginContextTests | 23组/279断言 | 23组/278断言/0失败(1断言差为环境时序,非回归) | 0 |
| B02RouteTests --all | 13组/544断言 | 13组/544断言/0失败 | 0 |
清理失败3进程(prepare/schema/apply)按交付记录5/8/8断言通过——本复跑未重跑(需--no-build,重建后hash变化会混淆交付基线,按提示词"区分交付与自建产物"处理)。
七项逐条
1. 原handle来源与安全:确认。 TryAcquireGameHandle(:62–74)——先在gate外查IsCurrent(注释正确说明"可调用外部代码并同步重入CloseAsync"故在gate外),再gate内检查closing/revoked/prepared/handle.Epoch——不暴露Cookie、不创建新Owner。身份回调异常时!IsCurrent返回false——安全。
2. 共用主体与验证语义保留:确认。 LoadForGameAsync复用现有Prepare/Decode/Apply主体(同一个loginGate信号量+同一个transaction),forGame参数区分返回状态枚举(GameLoaded vs LoadedForValidation)——原LoadAsync行为完整保留。
3. 成功时序:确认。 交付描述的顺序(Apply返回None→notify完成→token/context/epoch/Violations复核→获取原handle→释放Guard→发布GameLoaded)经代码检查与84组/1911断言覆盖——不只凭测试名认定。
4. TryGet/Revoke竞争:确认。 TryGetCurrentGameHandle(:81–89)在closeGate内检查closing/epoch/gameHandle;Revoke在关闭排水前同步清除gameHandle引用——获取后关闭由既有Handle/Slot撤销机制拒绝。
5. Guard释放边界:确认。 释放后如果关闭故障,handle已交出——由既有Close屏障(Context的CloseAsync→Bridge.Close→session Dispose顺序)保证资源不泄漏;加载宿主的清理失败3进程测试覆盖此路径。
6. 白名单与无关改动:确认。 生产仅改Context+Coordinator两文件;KVMgr/Guard原样(B02RouteTests 544断言全过佐证);接手时已有19份Client改动保留。
7. 合成环境限定:确认。 三接口仅合成测试宿主可达——CP2未批准,"CP1通过不批准CP2编码"边界清晰。三接口反射探针被CLI Restricted正确拒绝——不绕过、保留限制说明。
P3清单
- P3-1:Context测试断言数278 vs 交付记录279——1条差异为并发时序计数波动(4B1先例),非回归;记录不改结论。
- P3-2:CP2设计输入建议在主会话关闭CP1时同步启动——CP1交付文档已列出三接口的CP2消费点(启动分流/正式登录/业务操作获句柄),可直接作为CP2设计的起点输入。
结论
通过CP1限定实施。 主会话核hash(已代验95/95+独立复跑120组/2733断言全绿)裁决后关闭。下一步:CP2完整设计(正式启动/认证/工厂/绑定/路由五类接线——这是打通"正式可运行"的最大设计任务)。