Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP2B-T交付与待终审-2026-09-29.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

29 lines
3.5 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 CP2B-T 正式 KV 普通业务请求运输交付与待终审
日期:2026-09-29。状态:**实现及本地合成验收完成,待一次独立实施复核和主会话终裁;不代表 CP2B 首场景或整体 M2 完成。** 编码前的[完整方案](M2-CP2B-T正式KV普通业务请求恢复完整方案-待独立审查.md)已按 7/7 hash 独立补审,并由[主会话逐项裁决](M2-CP2B-T完整审查主会话裁决与实施白名单-2026-09-29.md)批准精确白名单。
## 实际交付
- `PlayerKVLoginContext.cs`:原租约继承 capability 创建时固定的 formal/validation 模式。验证模式仍只接受两条精确验证路由;正式模式只接受规范相对 GET/POST,拒验证、再次认证和专用 playerdata 路由。正式租约沿用原账号 Cookie 和关闭排水,并把业务超时设为旧 `CustomServerMgr` 的 15 秒。
- `CustomServerMgr.cs`:`BindKVForGame` 仍在 Apply 前绑定但不发布业务;只在同 epoch 的 GameLoaded/CP3A 原句柄与三原实例交接后一次 `EnableKVBusiness`。普通 GET/POST 及现有包装方法走同一租约,不再受 KV 全局拒绝门阻挡。`Cookie` 仅在当前正式就绪租约返回同一 CookieContainer;401/403、退出/清理先禁用、递增版本并作废旧响应,禁止同一租约再次发布。后台普通请求先调度到创建管理器的同步上下文,避免在 HTTP 响应线程直接撤销 Unity 服务。PF 发送分支保持原逻辑。
- `UserService.KVLoad.cs`:正式原句柄和 Setting/Club/Notification 交接后发布运输就绪;正式 KV 专用 401 事件走 `LogoutFormalKV`,退出和异常先禁用运输再撤销 Coordinator。不改公开 `IsLogin`、`ApiPlayerId` 或跳场景闸。
- 合成测试覆盖正式/验证隔离、同 Cookie、15 秒超时、方法/路径/JSON、未就绪零发送、普通 GET/POST、404、401、后台主线程交接、在途旧响应、同账号新 epoch、重复发布拒绝、Close 失败关闭屏障及旧 PF 回归。产品代码未保留仅供测试读取超时的属性。
## 本地验证
| 检查 | 结果 |
|---|---|
| KVGameLoadTests | 90组、2012断言、0失败 |
| ServiceHost 非Android | 10组、119断言、正式请求0 |
| ServiceHost Android+AGG | 10组、119断言、正式请求0 |
| Unity CLI Loop Editor 编译 | Success=true、0错误、272警告;见[结构化核验](M2-CP2B-T-Editor编译核验.json) |
| 范围与空白 | 本批白名单内 `git diff --check` 无空白错误;保留原工作树 |
验证全部使用本地合成 handler,没有调用正式 101/102、业务路由或本机服务器代码。沙箱直接写既有 `obj` 被拒,测试在获准的本地命令环境完成;没有改服务器或打包。
## 仍待的独立边界
批末独立实施复核须重点核:正式就绪时点及只发布一次、401/403 的会话版本和 UserService 撤销时序、后台回原线程、Cookie/RTService 既有消费者、Close 幂等及新 epoch、验证租约与 PF 旧分支不回归;核交付清单字节数/hash,指出白名单漂移与闲置实现。若报告发现实质问题,先按最小增量裁决再修改代码。
本批**不证明**线上 Mail/Friend/Club/AntiCheat 等路由或响应合同、`IsLogin`/`ApiPlayerId` 正式发布、SignalR 真连接、真实 Player 脚本编译、`FishingStage` 全链或最终通关。当前 `LoginStage` KV 阶段闸继续阻断,固定正式地址 `http://s101.local:18080/`;Unity 自动化仅 CLI Loop,不用 UnitySkills,暂不打包。`PlayerKV*` 命名和剩余开发期临时路径按最终清单在整体移植后处理。