Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP1独立实施复核.md
Liubing\LB 6813da149a feat(upserver): 保存M2客户端KV迁移至本人统计写检查点
保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。
保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。

验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。
包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
2026-09-30 19:19:05 +08:00

47 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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完整设计**(正式启动/认证/工厂/绑定/路由五类接线——这是打通"正式可运行"的最大设计任务)。