Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-纯平移主会话裁决与C2d实施记录-2026-09-30.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

54 lines
7.2 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 纯平移主会话裁决与 C2d 实施记录
用户在最新纯平移范围收缩及要求落规则后两次明确“审核完毕,继续”。本轮采用该用户确认作为当前方案审核完成与继续实施依据,不再次要求重复许可。当前磁盘无新独立报告,不宣称收到原 ZCode 新报告或伪造报告 hash。方案、规则与开工基线已冻结到配套 JSON。
## 完整范围裁决
- 采纳全流程纯平移,原 §6 中额外奖励聚合确认、等待 UI、旧业务缺陷修复和新的失败策略收回,不再作为本轮交付目标。原产品规则、存档键/格式和事件顺序为对照基准。
- 现有白名单内:核减这次迁移引入的多余行为,保留固定提供方、原 handle、身份接线及存储契约;不重构。对 HEAD 与正式基线可逐字节验证的文件,以原文加最小存储/身份替换生成候选;不直接 checkout、reset 或整树回退。无法匹配的文件只局部撤销本轮已证实改动。
- 白名单新增只批准 UserService.KVFishingValidation.cs 和 UserService.KVFishingRewardValidation.cs,限原隔离容器 store 注册/注入与原资源生命周期配套。使用原未启动 PF shell + PlayFabPlayerSaveStore 委托现有 kv-loop,原Owner/Guard/票据/断言不变;不创造生产容错或第二Owner。
- HomePanel 零修改;补单原同步发放、原异常处理和后台保存时序不动。Mail 批量旧枚举、钓鱼/转盘旧调用者时序等已被用户明确要求保留,缺陷记录移植后待办,不再修正。
- 移除失去所有实际消费者的本轮 PlayerSaveAction 等辅助实现属于回收此次多余改动;不删除原有有效实现。必要的原单次立即保存接口映射仍保留,不能借此改变调用者是否等待。
- 核减后的测试以迁移前业务为预期;仅删除针对已撤销新增行为的用例,保留原 core/Guard/票据/旧真实业务验证。正常与失败路径均检查,无正式请求、Play、服务器代码或打包。
## 初始检查点
C2c 组合2177项中2176项一致,唯一差异AGENTS.md为用户明确修改规则;两个追加fixture尚与原基线一致。现有工作树已保留。接下来先恢复原fixture依赖,再连续核减业务变化并编译/回归,不逐模块送审。
## C2d 实施检查点
- 已核减32个客户端源码文件及2个原宿主测试文件。明细由交付hash生成,不按Git HEAD整树回退。HomePanel不改;原正式报告、基线、白名单和224项原始台账保持原字节。
- 问卷/邀请恢复原同步领取签名、状态与通知顺序;商店/签到恢复原购买、补单及异常处理。邮件恢复原个人奖励与批量HasRead/HasReward处理。钓鱼与转盘仅替换原即时保存接口,原调用者等待方式、随机、动画和奖励顺序不变。Chat恢复原逻辑。
- 活动仓库、代币、水族馆、累计充值、配对游戏、回归活动、幸运任务、MiniBP、广告轮、扫荡、拼图及活动礼包恢复原空值、反序列化及异常处理。FishingEventData恢复原逐活动记录异常继续刷新,移除新增异常汇总。
- 移除无消费者的PlayerSaveAction及其store内收集状态;移除无消费者的ReadEventArchive新辅助方法。保留原存档格式、共同store与必要会话隔离,不清理仍有消费者的PF/AGG/Editor loop。
- 代币回到原“先改内存,后保存,再通知”;存档关闭时原业务的catch/default仍按原处理。底层读失败依然是失败、Guard照常拒写,不能把业务层保留旧catch误记为底层伪造读成功。新增加载错误策略不再跨层强迫业务更改。
- TimeRefreshManager的首次刷新结果及LastLogin哨兵适配保留:这是新KV资料时间戳写入前置,PF原捕获异常与事件顺序未变。玩家档31模块Guard/回滚、固定handle、退出撤销、Unknown保护均保持。旧kv-loop确认策略属于仍使用的既有验证路径,不受本次撤销新业务聚合影响。
- 两个原钓鱼fixture注册原未启动PF shell对应的PlayFabPlayerSaveStore,复用既有kv-loop票据。体力恢复场景也注入同一store。未删除原用例、未弱化原耗能/奖励断言、未添加生产空兜底。
## 验证过程与证据边界
1. 首次fixture编译通过后,奖励55组243断言通过;耗能恢复场景因尚缺store注入失败。补齐所有真实PlayerData场景注入后重跑,19组85断言通过(增加4条未启动PF shell生命周期检查)。失败原始输出保留。
2. 合并调用耗能与奖励超过CLI 180秒超时。底层各自result.json均成功落盘,超时后Editor未Play、loop未启用、无permit;随后按单组重跑取完整CLI结果,不把外层超时当成功。
3. NON_ANDROID与ANDROID+AGG宿主均18组254断言、formalRequests=0。相比C2c的20组262断言,删除的是已撤回的奖励聚合/强制等待测试;代币/活动/邮件预期改为原业务流程。核心Guard、票据、Unknown、PF路线、真实服务身份与关闭用例保留。
4. 最终Editor编译0错误269警告。警告数记录实测,不宣称旧警告已专项修复。真实Player、SignalR、线上账号、支付和打包未验;ServiceHost条件编译不代替Player构建。
5. 本批所有运行项仍不得标记全量runtimeVerified。最终单组与31模块结果见本批交付hash列出的原始输出。
## 用户调试配置恢复
用户在验证期间说明修改了调试目录debugconfig.json并要求更新回去。已由CLI读取实际persistentDataPath,仅将EventApiURL从开发服恢复为`http://s101.local:18080/`。其他字段深度对照一致,未运行会覆盖整套配置的Svr101菜单,未访问正式服务。配置位于工作区外,按工具权限流程写入;证据见M2-C2d-debugconfig恢复记录.json。
## 原缺陷登记(整个移植完成后才可另行授权处理)
- 邮件批量HasRead及后续HasReward筛选的旧语义,不在移植期改成RewardTaken或冻结奖励集合。
- 旧钓鱼即时保存的调用者不等待、旧energy负载,以及转盘失败后的原状态处理,不在移植期改随机/扣费/展示时序。
- 代币先改内存再保存、活动读档旧catch/default,以及跨游戏服邮件状态与KV存档的崩溃窗口,不在移植期增加事务、补偿或回滚。
- UI原来同步成功与后台保存的关系保持;不会重新引入“等云端确认才展示”或失败永久占用。
以上为保留原流程的明确裁决,不能当作新增业务缺陷已修复。改名仍在整个移植完成后;所有开发冻结最终必须恢复并验收。
## 最终离线检查点
单组CLI最终结果:耗能19组85断言;奖励55组243断言;M08-M23 28断言;B2-20真实31模块83断言、sameObjects=true、restored=true、forbidden=0。最终状态playing/enabled/ready/permitExists全部false。上述均离线,不改变真实运行未验结论。
C2d累计交付范围见配套hash:原2165项与12新增项组成2177项;相对C2c更新34个源码/测试文件、用户AGENTS规则及临时清理清单文档,其余保持。两fixture为本轮明确增量。后续C3真实场景及外部能力清单仍未完成,不需要为已经通过的常规核减重复送审。