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

32 lines
5.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 合批 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保存确认,奖励同步动作收集仍未完成。