Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP3A独立方案审查.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.3 KiB
Raw Blame History

M2 CP3A独立方案审查(含CP2A增量实施意见)

日期:2026-09-29。审查者:ZCode会话。本轮只读+hash重算+源码核对;未修改生产/测试源码/共享文档/方案/manifest。

受审hash核对

清单 结果
CP2A-C15补审后交付(20项) 20/20全部一致
CP3A受审基线(18项) 18/18全部一致

第一部分:CP2A补审增量实施意见

_cheatingScore修复经源码核实:

  • FishingChallengeManager.cs:70–74:ResetForKVLoad()中_cheatingScore=0已单独置于#if UNITY_EDITOR——与批准的单文件补审方案精确一致
  • 其余字段赋零在所有目标执行——原语义保持

CP2A增量实施通过。 Player真实编译未取得(CLI Loop动态Player编译被Restricted规则拒绝)——CP2A保持未关闭,此状态准确。


第二部分:CP3A前审结论

通过。 无P1/P2;P3三条不阻塞。可批准CP3A实施(主会话裁决后)。

方案核心评估

CP3A的正确性在于最小正确切口:只把CP2A交接的原handle送达两个已有B01验证的服务实例(SettingService+ClubService),不做其他任何扩展。这比"全面替换容器"或"新建全局路由"的方案风险低几个数量级。

同实例绑定设计(§2.4)是本方案的关键正确决策:登录前SubBoostrap已注册/初始化这些服务→不能替换实例(会留旧引用)→只能在**已有实例上单次绑定原handle。失败关闭,不回退PF,同进程不许重登。这是唯一安全的方式。

四问逐答(§6要求)

Q1:LocalNotificationService原实例绑定? **可以。**通知服务在登录前Init——沿用已初始化实例是正确选择(不重复请求系统权限/注册事件)。在途权限回调的竞态屏障:

  • 方案§3.3已要求"回调必须同时验证原Setting实例和其原句柄"
  • V03覆盖"在途回调不能跨绑定"
  • 建议补一条:回调验证应在await Init恢复后的第一次操作前执行(当前合同已隐含,落为显式断言)

Q2:ClubService构造时捕获PlayerKVRuntimeSelection可靠? **可靠。**时序核证:SubBoostrap.RegisterServices先注册RuntimeSelection→同方法内注册ClubService→ClubService构造时RuntimeSelection已在容器中。无竞态。如未来改为异步注册则需重审,当前同步注册无问题。

Q3:部分绑定失败后"原对象保留陈旧句柄+本进程拒绝重登"是否闭合? **闭合。**部分失败(如Setting绑定成功、Club绑定失败)时:

  • 已绑定的Setting保留原句柄——后续读写被原句柄的撤销机制拒绝
  • 未绑定的Club无句柄——正式KV分支的"无句柄拒绝"生效
  • 本进程拒绝重登——防部分绑定后尝试"修复"导致状态混乱
  • 不需要额外把所有实例同时置为不可用——两个拒绝路径(有陈旧句柄/无句柄)已覆盖
  • V05覆盖此场景

Q4:白名单和V01–V07是否足够?真实ClubService验证? **足够。**白名单5文件限定到方法/入口级别,禁改清单明确。

真实ClubService验证手段:

  • 合成宿主:编译真实ClubService.cs+真实SettingService.cs源文件+CP1/CP2A协调器→用合成Bridge/handle→验证绑定/读写/撤销——B01已证明此模式可行(B01Tests即为此类)
  • Unity CLI Loop Editor:实际容器/服务实例验证——CP2A已有89组先例
  • ClubSlice为历史切片不能替代——方案已明确

P3清单

  • P3-1:§3.2的"已有同一原句柄的重复调用可作检查后幂等"——建议实现时记录重复调用计数到诊断输出(便于发现意外多次调用)。
  • P3-2:§3.1的DefaultSettingService捕获"是否要求正式KV"——建议XML注释说明"此标志来自启动冻结选择,运行期不可变",防后续维护者试图动态改。
  • P3-3:V06"真实Player脚本编译若仍无不打包的CLI Loop方法"——建议CP3A实施时尝试Unity CLI Loop的build/compile命令带目标平台参数,如可行则同时关闭CP2A Player验证缺口。

结论

CP2A增量实施通过(_cheatingScore修复正确)。CP3A方案通过——5文件白名单+V01–V07可批准实施。主会话核hash裁决后按白名单连续实施,批末复核可按加速模式与后续合并。