Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-合批-C2a实施记录-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

5.6 KiB
Raw Blame History

M2 合批 C2a 实施检查点(2026-09-29)

工作仍在开发侧,继续同批 C2,不送本检查点单独审查。正式有条件 PASS 及裁决继续有效;原受审方案、manifest、白名单和224项台账不回写。C1复核2172项无漂移后开工。当前累计交付清单33项,SHA256 7DF87736B6204DFD1689606BF40514E9299FB86F8D7ED5B13B3572537370EFBE;正式原基线其余2144项保持原hash,源码均在获批白名单内,AggUserService未改。

本检查点已实现

  • 新增 IPlayerSaveStore 与 KVPlayerSaveStore/PlayFabPlayerSaveStore。LoginStage沿冻结选择注册,业务对象保留本次实例;KV在原handle交接后单次绑定,绑定前不可读写,退出同步撤销。未另建Owner、全局路由或模式开关。
  • Read区分失败、缺键和存在空串;Write区分接受与确认,保留remoteStore=false。KV仍直用KVMgr原四入口和原票据,结果保留LocalOnly/Confirmed/Superseded/Unknown/Cancelled;外来回执拒绝。PF走原缓存及SyncDataImmidiate,普通缓冲回执只报Buffered。PlayFabMgr仅增加委托原SyncData的内部FlushBufferedData,不增加PF定时器。
  • KV资料写入改共用store;单登录40秒调度在成功交接后开始、退出随LoginLifetime取消。FishingStage暂停调用固定store刷新,恢复后核旧lifetime,避免旧RT完成后再FetchMail。未把这些源码接线当40秒真实运行验证。
  • 22项业务调用已迁移:通用EventDataRepository三项、战令组合档一项、引导一项、PlayerData四项、PlayerFishData十项、SmallGameData三项。保留原键、原JSON/字符串及原remote参数;写入不接受则抛出,不继续成功分支。战令两处历史注释保持注释。
  • EventDataRepository使用构造注入的固定store;只有明确缺键才new默认档,存在空/空白/null或损坏JSON会报错,存档失败不再吞掉。真实仓库纳入合成宿主,模型仍为测试事件夹具,不能冒充所有生产活动运行。
  • 引导资源/延迟回调、体力恢复和评价面板补旧store检查;引导Dispose后迟到完成不继续更新界面。现有其它异步业务链仍待同批逐项迁移。
  • FishingStage在InitData/InitManager之后才保存初始化主档、确认当前待发写入、写LastLoginTimeUtc并确认。公开LastLoginTime仍保留进入本次登录前的值。TimeRefreshManager保留初始刷新成功标记,捕获到订阅者异常时标失败,KV不推进登录时间。真实首场景仍被双闸阻止,此段是已编译实现,未记运行通关。

验证和准确边界

  • ServiceHost NON_ANDROID与ANDROID+AGG均16组215断言通过,formalRequests=0。真实KVUserService/原Coordinator/原store/原KVMgr及真实EventDataRepository、TimeRefreshManager参与;网络、31模块中其它30模块、事件模型、配置和Rx宿主设施是夹具。
  • 覆盖原PF缓冲/立即确认及固定lifetime;KV缺键/错误/空串/本地写/覆盖票据/外来回执/Guard/禁止重绑;真实资料确认后发布、Unknown不更新、保存途中退出后迟到回包失效;真实活动仓库坏JSON拒绝及数据到原KV传输;跨日成功、异常、同日和缺登录时间哨兵。
  • KVGameLoadTests 90组2008断言0失败,run 20260929124717_40cff5b97587446bb1c9dd1b6ad5c2b1。本轮未改该套件生产加载核心,新增M2MergedContractTests用SERVICE_HOST隔离,只在ServiceHost编译。
  • 首次宿主编译暴露未接FlushBufferedData,补原方法委托后通过。Unity仅CLI Loop,初次完整编译0错误272警告;较C1的269多出的3条为既有IOSBuildProcessor/URPWater警告,另两条只是文件行号移动。后续增量compile可能返回0警告,不代表项目警告清零。最终原始结果见M2-合批-C2a-unity-compile.json。未以Editor编译冒充Player编译。
  • 作用域git diff --check通过;Unity已自动生成两个新存档文件.meta,保留GUID。原工作树改动未撤销,不读/改服务器代码,未Play/正式账号请求/付费/打包。

下一段直接继续 C2

  1. 继续180项business-store和2项即时消费调用;当前22项仅标源码迁移,逐业务runtimeVerified全部仍false。并行台账见M2-合批-C2调用迁移进度.json,原受审台账保持原字节。
  2. 迁活动代币、动态仓库/活动初始化、Survey/Friend/Mail及其实际UI调用;实现同步动作回执收集、确认后成功展示和同会话重入防护。当前通用store没有假装提供多键事务,动作收集和奖励故障恢复未完成。
  3. 补真实Chat/RT旧会话回调链、首场景真实模块初始化、40秒与暂停调度实际时序、PF/AGG及kv-loop业务回归;本轮未宣称这些已验。对首次跨日中订阅者自行吞错的更深层逻辑,仍需真实初始化链验证,顶层成功标记不是全链证明。
  4. PFLoginAct早退与LoginStage场景双闸保持;C3满足零PF及全链条件时同次解除,并处理PFLoginAct.OnDestroy临时KV注销。外部聚合榜/他人资料/好友列表/匹配能力依旧集中沟通,不阻塞客户端其余编码。
  5. PlayerKV命名延后、所有开发期冻结/忽略恢复、易盾/TapJoy移动端、闲置代码/反向依赖清理仍在最终清单;M2及奖励完整通关未完成。
  • C2a收尾补核:批量Flush不能仅凭无Blocked/Unknown就视为全部确认,现捕获调用开始时每键最终回执并逐张核对;await期间被后续写覆盖的旧回执保持Superseded,后续值需自己的flush。新增11键跨批覆盖回归通过,最终宿主两条件均16组215断言。该回执记录是本store保存确认,奖励同步动作收集仍未完成。