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

36 lines
7.8 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 合批 C2c 连续开发记录(2026-09-29)
本轮从 C2b 连续推进存档、奖励、消耗和异步会话,没有按模块新增送审。检查点是证据与恢复点,不是自动停止点。只有确实超出已审白名单的差异集中处理;正式报告与原受审基线保持原字节,既有工作树保留。未读取或修改服务器代码。
## 已实施内容
- 新迁 134 项业务存档,累计 **198/202** 经共用固定会话 store。另 3 项是 Club/Setting 已有原 handle 提示存档路线,其 PF 分支继续保留;最后 1 项是无实际消费者的 `BaseEventData.UploadData`,登记最终闲置清理,不为了增加计数迁移无用类。原 224 项受审台账不回写,进度另存。两个即时消耗的实际等待链已编码,均未称真实运行通过。
- Camp、TriggerPack、商店/礼包、Buff、签到、幸运任务、伙伴、小游戏、足迹、广告及其他动态活动模型接固定 store,保留原键/序列化。嵌套礼包/优惠券由既有父对象绑定同一个 store。仅缺键可初始化默认值;本次触及的 JSON 读取不再把空串、JSON null 或解析错误当新档。原自定义格式未据此宣称全部坏档边界已验证。FootPrint 更新保留原 KV 64 位高位。
- `PlayerSaveStores.cs` 内加入已审同步动作回执收集:收集窗口只包围同步 apply/主档保存,await 前解除;同键保留本动作最后回执,逐一 Confirmed 后才执行延期展示。旧会话、Guard、Unknown、拒写、LocalOnly、异动作覆盖均不能报告成功。先检查存档可用再改物品;失败保留动作占用,不自动重放、切账号或回滚。未新增 Manager、Owner 或事务协议。
- Survey 按 KV 十进制、PF 十六进制计算尾数,原 URL 与列表档保留。sid 重入拦截,奖励、领取标识和主档共同确认;真实 SurveyPanel 等待 Task。邀请奖励同样确认物品和最终 count 后才返回;实际 EventInviteFriends 等待领取结果,过期资源/链接回调不刷新新界面。
- 邮件固定用户/store,缓存仍以 UserId 隔离;Fetch/Send/UpdateState 回包先核生命周期再写缓存。批量领取改为 RewardTaken,请求前冻结去重未领集合与奖励定义,保留个人邮件 LureInflation。KV 结果未知时在请求邮件状态前拒绝;远端成功后确认物品保存,再返回 true。PlayerItemData 和 Inflation 内多处 ShowData 纳入同步动作延期展示。
- 商店抵扣券、订单成功奖励按实际同步调用栈收集连带存档;SDK/订单回调按原订单号防止同会话重发,异步 SKU/订单查询检查固定生命周期。**补单释放实际 HomePanel 调用尚未改 Task/await,不属于已完成奖励确认链**,见集中差异单。
- 俱乐部签到在请求前捕获用户/原俱乐部/奖励/store;远端成功后收集签到标记、奖励和主档,确认后才发成功展示与聊天通知。确认失败不解除本次奖励防重入。尚无该真实服务的完整端到端用例,编译不等于运行验收。
- FishingBehaviorB 等扣饵确认后才进入 WaitForFishBite;转盘等扣费确认后才抽随机值/启动动画,KV 奖励存档确认后继续展示。移除旧不论成功都置同步完成的路径;Unknown 不自动重扣。PF 即时主档保存使用现有 NewPlayerDataDic 的真实打包数据,未另造 energy 顶层字段。正式钓鱼/转盘均未运行。
- Chat 只消费本次用户生命周期,订阅去重并兼容 Init 时已授权,退出取消登录等待/重试,禁止旧会话重连与排队 UI 更新。原 RT 服务已有 SessionVersion/连接版本隔离,本轮未改 SignalR 协议,未运行真实 RTM/SignalR。SubBoostrap 的已有 Editor PF 直入注入域补共用 store,未放开 KV 直入。
## 验证与真实首败
- ServiceHost NON_ANDROID、ANDROID+AGG 各 **20 组 / 262 断言通过,formalRequests=0**。使用真实 store/KVMgr、Survey、邮件 Handler/Cache、EventToken、FootPrint 与伙伴存档类;HTTP、库存和配置等仍有夹具,不能替代生产奖励全链。新覆盖最终回执、跨批覆盖、重入、拒写、Unknown 不重放、提前展示、短十进制 ID、个人/批量邮件、旧回包、足迹高位与自定义档格式。
- CLI Loop Editor 编译最新 **Success=true,0 错误、272 警告**,原始 JSON 保留。不把 Editor/ANDROID+AGG 宿主条件当实际 Player 构建。
- 真实 Unity 固定入口 M08–M23 **28 断言**、B2-20 **83 断言 / 31 实模块 / 两 epoch / restored=true** 通过,非 Play。历史加载核心 90 组/2008 断言本轮未重跑,不混作本轮计数。
- **旧奖励回归没有通过**:`KVGameplayLoopSetup.RunValidationAsync("fishing-reward")` 首败为 `GuideDataCenter.Init:100` 空引用。旧 `UserService.KVFishingRewardValidation.cs` 手动 new Guide/Player 等对象,没有注册或注入新增 store。该文件在正式白名单外。没有以生产 nullable fallback、跳过 Init、削弱断言或删旧回归掩盖问题。实际首败、堆栈和运行目录均保留;退出检查 playing=false、compiling=false、enabled=false、ready=false、permitExists=false。
- 旧装备固定回归 **9 组/28 断言通过,formalRequests=0、restored=true**;旧 `fishing-consume` 未通过,首败为 MiniBattlePassDataProvider.GetMiniBattlePassRecord:143,调用来自 UserService.KVFishingValidation.FishingSubscribers.Bind:300,仍是隔离 fixture 缺 store。动态执行工具的外层 Success=true 只表示成功返回诊断文本,内部 FAILED 绝不当测试通过。该消费验证宿主与旧奖励宿主一并纳入最小差异;已通过的 UserService.KVGameplayLoop.cs 不请求扩大修改。
- 开发中曾出现 doPauseMultiDraw 字段误删导致 3 个编译错误、伙伴存档缺 using 导致 2 个编译错误,已修复后重编。测试夹具命名空间、MailStateInfo 反序列化方式、跨批覆盖构造曾首败,修的是夹具本身,不改生产协议迎合测试。动态代码 JsonConvert 产生重复程序集引用后改直接返回结果对象。
- 本地合成测试的 File.Replace 与 CLI Node spawn 在沙箱内受限,经工具批准执行原检查;未改原子缓存协议。没有自动审批拒绝、没有用 UnitySkills。范围内 `git diff --check` 通过。完整 hash 与白名单自核见本检查点 JSON。
## 待完成,不能凭本次通过销账
1. 集中补齐 HomePanel 实际补单 await,以及旧奖励/消耗验证宿主对新 store 的注入;必须先对这几条白名单差异完成明确审查,再改相应文件。详见《M2-合批-C2c集中边界差异与后续连续开发方案》。无须重审整套 KV 方案。
2. 逐真实奖励栈补齐尚未覆盖的异步延伸与 UI 失败/待处理展示。当前若干失败仅记录日志或返回 false,不能称完整体验通关;普通活动写入已迁不等于所有活动奖励都逐动作确认完毕。
3. 邮件、签到、订单仍有远端已消费但 KV 未落盘的跨系统窗口;单动作多键也无事务回滚。不得自动 AddItem 重放补偿,不称奖励完整通关。SDK 支付假实现不证明真实支付能力。
4. 真实初场景/PF 调用为零、两提供方初始化/40 秒保存/退出/重登、真实 Chat/RT、Player 仍待验证。两个阶段闸和 PFLoginAct.OnDestroy 临时撤销须在满足统一放行条件时同步清理,不能只移一闸。
5. 外部聚合榜单、公开资料、好友/匹配替代按原集中问题单继续;新 ID 与个人 KV 存储原则不再询问。移动端易盾/TapJoy、所有开发冻结/忽略路径、闲置实现、物理反向依赖和最后统一改名,全部按最终清理清单逐项销账。
所有生产调用 `runtimeVerified` 仍 false,M2 未通关。正式地址仍为 `http://s101.local:18080/`;未正式账号请求、Play、付费或打包。