Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP2A独立实施预复核.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

4.5 KiB
Raw Blame History

M2 CP2A独立实施预复核

日期:2026-09-29。审查者:ZCode会话(M2全链审查者)。本轮只读+hash重算+源码核对+独立复跑;未修改生产/测试源码/共享文档。预复核(非批末终审)——Player 编译与_cheatingScore补审未完成,CP2A 不因本报告关闭。

受审hash核对

清单 结果
M2-CP2A-实施自验hash.json(19项) 19/19全部一致
M2-CP2A-Player编译阻断受审基线.json(4项) 4/4全部一致

总裁决

预复核通过(有条件)——合成验证层全部通过、实现符合方案合同;两项待完成项阻塞CP2A关闭:①Player编译(_cheatingScore单文件补审),②批末终审。

独立复跑

项目 主会话结果 本复跑 退出码
KVGameLoadTests 89组/1962断言 89组/1962断言/0失败 0
KVContractTests 42/42 42/42 0

逐项审查

启动分流与旧路径排除:确认

自验描述:Bootstrap捕获不可变模式→KV不创建PlayFabMgr→跳过PF登录/MMTest/YinDun/TapJoy/第二次S101登录。AGG KV启动时失败,Editor kv-loop后置许可走旧路径——与方案§2.1一致。

101/102准入与三传输:确认

请求前仅101/102→Prepare后核newCreate=false+非空+31模块Schema→失败不Apply不发布——双层门落实。三传输同一CookieContainer、独立handler、禁重定向、互不共享校验后才发送——与方案§2.2一致。

原handle同一性与CP1接口消费:确认

LoadForGameAsync→TryGetCurrentGameHandle(epoch)获取同一原对象→内部KVHandoffReady——CP1三接口全部有真实消费者。

双重阶段闸:确认

PFLoginAct不等API事件、不启Mail/IAP、不Unload;LoginStage.RequestNextAct再阻断FishingStage——与方案§2.3一致。

生命周期与关闭:确认

Logout/销毁/Application.quitting同步撤销→Registry排水;关闭故障维持阻断——与方案§2.3一致。

特别判断项(提示词要求)

1. UserService加载窗口与Coordinator撤销竞态:合成测试覆盖GameLoaded后Close失败阻断下一Context;同账号新epoch旧回调拒绝——自验89组包含此场景。无已确认竞态缺陷,但建议终审时关注KVHandoffReady的epoch过期清理时机(当前依赖Logout/退出同步撤销)。

2. KVHandoffReady旧epoch滞留:内部状态绑定epoch,旧epoch查询被拒——设计正确。唯一风险场景是"进程不退出但账号切换"——CP2A限定101/102且重启式重登(用户已接受),无进程内换号路径。无阻塞。

3. PFLoginAct.OnDestroy+Application.quitting覆盖:OnDestroy覆盖场景销毁,Application.quitting覆盖应用退出——两者覆盖主要生命周期路径。OnApplicationPause未列入——Editor验证阶段无暂停路径,Player正式启用后如需可CP2B补充。P3级备忘。

4. 闲置实现:CP1三接口在CP2A中全部有真实消费者——无闲置。新增PlayerKVRuntimeSelection/PlayerKVRuntimeLifetime为启动必需——非闲置。

Player编译阻断补审:通过

_cheatingScore问题本审查独立核实:

  • FishingChallengeManager.cs:642字段声明在#if UNITY_EDITOR内
  • :72的连锁赋零...=_cheatingScore=0在所有目标执行——非Editor编译时无声明→编译错误
  • 这是既有源码问题(非CP2A新增)

补审方案的正确性:

  • 仅拆分一行:_cheatingScore=0单独置于#if UNITY_EDITOR——最小改动
  • 不移字段、不改评分逻辑、不触碰其他模块——边界严格
  • 4项受审基线一致——证据链完整

建议主会话批准该单文件补审,修复后Player编译应通过。

P3清单

  • P3-1:OnApplicationPause在Player正式启用后可能需要补充KV撤销路径(当前仅OnDestroy+quitting)——CP2B备忘。
  • P3-2:Unity Editor编译269警告未逐条归因——建议终审时区分新增vs既有。

结论

预复核通过。 合成验证层全部确认(89组/1962断言+42/42独立复跑);实现符合方案合同。两项待完成:

  1. _cheatingScore单文件补审——本审查已批准该补审方案,主会话裁决后编码
  2. Player真实编译验证——补审编码后用Unity CLI Loop或等效手段

两项完成后做批末终审(可在加速模式下与后续CP2B合并为一次终点全量复核)。CP2A未关闭。