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

31 lines
5.4 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 合批 C2b 实施检查点(2026-09-29)
工作仍在开发侧,继续已批准的合批 C2;此检查点不是新送审轮次。开工复核C2a与原基线组合2177项全部一致,原正式报告/manifest hash保持,代码范围仍为正式白名单。本次14个生产文件、4个测试文件变化,无新增源码路径,无服务器代码读取/修改。
## 实际完成
- 新迁42个business-store调用,累计64/202,剩余138及2个即时消耗调用。原受审224项台账不改字节;进度单独写M2-合批-C2调用迁移进度.json。全部生产调用runtimeVerified仍false,不能用替换/编译当作实际活动运行证据。
- EventTokenService两调用迁移。通过构造注入保留本次store;加载失败/坏JSON/存在空串或null不再默认为零余额。候选字典保存被接受后才替换内存,Add/Remove通知维持原语义,拒写不改余额、不发成功通知。批量清理对完整候选字典操作;存储仍是原TransitionData JSON。普通接受不代表云端确认,奖励动作确认仍待下一段。
- 旧game.AEventDataManager三调用迁移。固定注入store,Dispose后拒绝保存/读取并移除原订阅;活动消息在失效实例不继续。只有缺键才创建默认档,空/坏JSON/null报错,不再变成新活动存档。
- FishingEventData主体16调用及PVP/OneOne/OneTwo共11调用全部接共用store;原活动条件、动态原键、TurntableRoll、WheelLevelCount、Free/Operate计数及序列化保持。static Condition_NoRechargeDay同步取得已绑定FishingEventData的store,不建立全局新路由或寻找新handle。4个JSON读点共用类内ReadEventArchive<T>,仅明确缺键返回null,存在坏档报错。Break/Can/LuckMagic的原自定义字符串解析格式保留,不强制改成JSON。
- 魔药、弹珠、刮刮乐、锁链礼包、迪斯科礼包、存钱罐、EventPack各1处集中保存迁移,鱼竿配件分部3处保存迁移;新增属性由现有DI注入,PlayerFishData沿用C2a属性,不重复建store。原key、原序列化、remote参数和历史注释保留。
- FishingEventData资源加载、PVP段位弹窗补await后的旧store检查;两个礼包进入界面前检查固定store。其它未迁模块/回调不据此宣称已安全。
- AllRefresh保留逐活动尝试,但收集失败并向调用方抛出汇总异常,不再只写日志后继续报告整批刷新成功。该方法当前直接调用者是PlayerShopData;它不是TimeRefreshManager真实订阅全链已验的证据。初次跨日及其所有活动回调仍须后续全链验证。
## 验证、首败与边界
- ServiceHost NON_ANDROID与ANDROID+AGG均17组235断言通过,formalRequests=0;新增真实EventTokenService+真实store/原KVMgr/内存HTTP测试:坏档拒绝、读失败不当零余额、Guard拒写后余额/通知不变、增加/扣减原clamp与删除、批量更新/清理、原TransitionData远端JSON、同消费者PF路线、注销后缓存拒用。现有资料/票据/每日刷新回归继续通过。Android+AGG是宿主编译条件,非真实Android Player构建。
- 最初沙箱内两次宿主失败:首个本地写返回StorageError。独立工作区合成文件探针也证实File.Replace抛UnauthorizedAccessException,属于当前执行权限;没有修改KV缓存协议或用非原子写规避。经工具批准后沙箱外本地合成回归通过。
- CLI Loop初次被Node spawnSync EPERM阻止,不是编译成功。经工具批准后仍用uloop编译,最新Success=true、0错误、272警告,原始结果见M2-合批-C2b-unity-compile.json。无UnitySkills、Play、正式账号、付费和打包。
- scope git diff --check通过;原工作树保留,AggUserService未改。C2b累计交付47项hash `8F027C0677BE42099CFA7EA3ED53D86497DF55C9A7627C29006526CE7B7C0729`,原正式基线其余2130项保持;与原基线组合2177项最终核对通过。C2a清单保留为历史,不再拿它要求已批准代码保持旧hash。
- 本轮未重跑未改动的加载核心套件;C2a加载90组/2008断言证据仅作历史。本轮真实生产活动配置、两账号存档、初始化重入、全部异步链/奖励链、Player、kv-loop验证宿主注入兼容均尚未验。不能以本轮宿主夹具覆盖冒充这些结果。
## 下个连续开发段
1. 剩余138个业务调用、2个即时消耗继续迁移,优先TriggerPack/商店/动态活动模型,避免仅调用层清零而遗漏归属会话。
2. 按已审第6节在PlayerSaveStores内接同步奖励动作回执收集及真实消费者;Survey/Friend/Mail和实际按钮await、确认后成功展示、同会话重入防护、PlayerItemData嵌套展示处理仍未实现完。完整奖励故障恢复不宣称已解决。
3. 即时消耗源码已检查:FishingBehaviorB当前未等待消费确认就WaitForFishBiteED;FishingTurntablePanel当前只循环一次等待且不论成功都isDataSynced=true,并已先抽随机值。这两处须按已审方案一起修正真实调用链,不能只替换SyncDataImmidiate方法名。本轮未改这两个文件,也未记迁移完成。
4. 真实Chat/RT/初场景双模式验证、40秒暂停周期、旧验证宿主对新增store注入的适配、临时闸/易盾TapJoy恢复、闲置实现清理和PlayerKV延后命名继续列最终TODO。
两阶段闸保持,M2未完成。无需交用户或审核侧逐模块确认;继续开发,整批结束再做一次独立实施复核。