Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-纠偏与底稿独立审查.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

80 lines
5.3 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架构纠偏意见与设计底稿独立审查
日期:2026-09-29。审查者:ZCode会话(B02全链审查者)。独立性声明:未参与纠偏意见或底稿编写;B02四入口实施复核为本审查者产出。本轮只读+hash/源码核对。
## 总裁决
**纠偏意见:接受。设计底稿:方向正确,尚不可批准编码(底稿自身也如此定位)。**
## 一、架构纠偏意见审查
### 依赖方向问题确认
本审查源码核实:`Core/KVMgr.cs`使用`using game.PlayerDataStorage`并调用`PlayerKVGameLoadGuard.Reject`——而`PlayerKVGameLoadGuard`位于`Services/PlayerData/PlayerKVGameLoadGuard.cs`,由`PlayerKVGameLoadCoordinator`(加载编排层)控制。**这确实是底层存档入口对上层编排规则的反向依赖。**
### 纠偏的责任归属分析:准确
纠偏意见正确指出:
- B02的目标是"逐字行为等价搬迁"——guard检查从原PlayFabMgr**原样搬入**KVMgr——这是**等价性的要求**,不是架构认可;
- **"等价复核PASS证明等价和兼容,不证明层级设计正确"**——这是对我B02复核结论的准确限定。我在复核中确认的是行为等价(逐行比对),没有评估架构方向——因为我审查的合同就是等价搬迁;
- 主会话主动撤回"等价→可沿此结构扩展"的推论——**正确的自我纠错**。
### 推荐路线评估
三方案比较合理。推荐方案("存储模块内薄KVMgr+下沉准入契约"):
- **不新增全局当前账号或第二套缓存**——仅把guard状态抽为存储模块内的准入契约;
- 上层加载编排调用Enter/Exit,KVMgr只查同模块状态——**依赖方向修正**;
- 改动面最小(不需要抽取Handle/Owner/结果类型到Core接口);
- 不采用方案2(接口抽取改动面大)和方案3(保持现状继续强化反向依赖)——**否决理由正确**。
### 一项补充
"是否移动guard本体或抽出共享最小状态,须以21处guard引用和加载竞争测试为边界做完整设计"——本审查核实guard引用分布(PlayerKVGameLoadCoordinator/EditorValidationHost等),确认21处引用的存在。建议后续完整方案中**先做一个guard引用映射表**(每处引用的文件/用途/是否需要保留),作为准入契约设计的输入。
## 二、设计底稿审查
### 关键发现确认
**1. 正式句柄交接缺口——底稿最重要的发现。**
本审查核实:`PlayerKVLoginContext`内部持有`handle`(私有),其`TryAcquireAccountLease`提供的是**账号网络租约**(HttpMessageHandler),不是`PlayerKVGameSessionHandle`。`PlayerKVGameLoadCoordinator.LoadAsync`成功只返回阶段证据。`PlayerKVGameplayBindings.Bind`受`UNITY_EDITOR && !SERVICE_HOST`限定。
**结论:当前没有任何Player构建的正式路径能从受控加载获得可写KV句柄**——这是4B3C的核心缺口,底稿正确识别为"任何旧调用方都不能简单从受控加载结果取到可写Owner"。
**2. 224候选盘点更新——准确。**
当前扫描2109文件→224语法候选/81文件,与旧calls.json完整映射(丢失0/新增0)。分类:待迁移200/保留PF 13/已有限定4/B关闭待C 3/排除4——总数匹配。
**3. `UpdateUserDataValue`167处/`GetLocalData`51处的文本快照**——与此前B3盘点口径一致。底稿正确声明"两种扫描器口径不同,不相加、不当完成率"。
### 四波分流评估
| 波次 | 范围 | 判断 |
|---|---|---|
| M2-A 正式Owner交接+低风险状态 | 先设计正式句柄交接→B01模式扩展 | **正确的首波**——正式交接是A/B/C共同前置 |
| M2-B 核心进度 | 等级/鱼竿/地图/引导/奖励 | 参考修订1但不重排——用户最新意图 |
| M2-C 活动/商业/延迟回调 | 69个活动关联+商店/广告/支付 | 最复杂——涉及消费/奖励合同 |
| M2-D 身份/加载/生命周期收口 | CompareDatas/正式Load/组件退出/SDK清理 | 最终收尾 |
**依赖方向**:"正式Owner交接须先于A/B/C确定"——正确;"M2-D默认启用须等T08/C多键恢复"——P2-1正确承接。
### 底稿尚不可批准的原因(底稿自身声明一致)
1. 200个待迁移项尚未按业务方法归并(§4第1条)
2. M2-A的真实无消费状态组未判定
3. 正式句柄交接的具体设计未完成
4. guard下沉的具体方案(本体移动vs抽共享状态)未定
5. 文件白名单未编制
## 三、审查侧建议
1. **M2完整方案的最小可批准单元**:建议首份可审方案覆盖"架构纠偏(guard下沉+KVMgr归位)+正式句柄交接+M2-A首批普通标记"——三者互相依赖,一起设计一次审查比拆三份各自审更高效。
2. **guard引用映射表**:作为M2方案的必备附件——21处引用的文件/用途/控制方向/是否需要随guard迁移。
3. **修订1资产复用**:185源码锚点+2400Drop盘点保留为M2-B参考——不重做已有工作。修订1的业务合同(队列不提前扣费/随机一次/多键票据确认)在M2-B实施时按需纳入,不作为前置。
## 结论
**纠偏意见接受;底稿方向正确,待补全为完整方案后一次性审查。** 主会话下一步:补全正式句柄交接设计+guard下沉方案+M2-A首批白名单→交一份合并方案→独立审查→裁决→实施。