Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-C3c第五轮状态核验与缓存联动边界-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

52 lines
5.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.
# C3c 第五轮状态核验与缓存联动边界
2026-09-30。用户要求确认“四项之外的内容已经更新”的状态。本轮只核验审核/源码/交付记录,不实施生产代码。
## 1. 已收到第五轮审核更新
独立报告《M2-C3c剩余SDK接线独立差异审查-2026-09-30.md》已追加“第五轮:四项服务端事实挂起后的可编码范围裁决”,章内标注16:58;实际文件更新时间与章节标注不同,以内容和hash识别,不能仅按文件日期判断先后。
本轮报告SHA256:`E0A9A124F98F36EED1CA902A14F6D890E5528A52D58B12C86183D2A26369560F`。原统一基线28/28、原C3c基线31/31、四项服务端交付清单13/13重新计算全部一致。报告新增第五轮不等于生产代码已变更。
## 2. 第五轮逐项核验
唯一获审生产文件为`Client/Assets/Scripts/Services/KVUserService.cs`;测试限定原ServiceHost中M2MergedGameplayTests接入及新增C3ProfileCacheTests,真实KV/PF服务对照。
| 项目 | 第五轮意见 | 主会话核验 |
|---|---|---|
| GetPlayerLv | 恢复原缓存合同:命中原值、未命中1,SetPlayerLv不改 | 目标接受;与下一项存在直接依赖,不能只改默认值就开工 |
| GetPlayLv | 维持现状不动,未加载继续InvalidOperationException,不提前接远端等级 | 行为目标接受,但“方法完全不改”与GetPlayerLv目标在当前代码上不能同时成立,见§3 |
| GetPlayInfo | 空ID返回null;同一缓存引用;缺项建原默认名占位;本人同步更新并发一次事件;他人走已存在SearchFriend异步更新 | 接受该范围性审核结论。按code>0且info!=null消费昵称/头像;不把level字段纳入远端等级迁移,不重设计资料系统 |
| SetPlayInfo(string,string,string) | 原替换缓存对象、不发布事件 | 接受,不改成更新旧引用或额外事件 |
| ClearPlayInfos | 原清空 | 接受;不增加新缓存层 |
| 测试 | 红测留痕、引用/事件/默认值/失败/SDK计数及PF对照,双条件宿主和CLI Loop | 接受;本轮测试文件尚不存在,未运行新测试,不把计划当通过 |
SearchFriend原昵称/头像的这段已获范围性审核,不再一概列为等待新服务端公开资料合同。好友LevelB/时间、真实远端等级等仍属挂起范围。第五轮文中FriendService.GetFriendData实际应对应现有GetFriendList,按禁止修改好友列表方法解释,不另造方法。
## 3. 一个必须澄清的实现联动
实际源码`KVUserService.cs:280–286`:GetPlayerLv未知玩家返回-1,GetPlayLv直接调用GetPlayerLv,再以level>=0决定成功或InvalidOperationException。
| 场景:未加载的他人ID | 当前行为 | 仅按第五轮字面修改GetPlayerLv后 |
|---|---|---|
| GetPlayerLv | -1 | 1,符合原PF缓存显示默认值 |
| GetPlayLv | 失败Task,InvalidOperationException | 成功Task,返回等级1;违反“维持未加载失败”及“默认1不能污染异步查询”的同一报告要求 |
这是源码可直接推出的冲突,不涉及服务端接口、不需要线上测试,也不是新增业务问题。本人直读路径同样需防止因共用getter改变而被顺带移除;不能仅测试他人成功就认定行为不变。
**建议在同一第五轮边界中澄清**:“GetPlayLv不动”指保持当前外部行为、不接新远端;允许在同一个KVUserService.cs内最小解耦其取值方式,使其继续按修改前本人直读/缓存/未知-1及level>=0判断,不再消费显示用默认1。不得新增接口、管理器、等待、重试或归一化;当前负数处理与异常也不顺手修改。另一可行收窄是暂缓GetPlayerLv改动,但会留下已识别的默认值迁移差异。
本轮**不自行把建议升级为已审许可**。不因此撤销GetPlayInfo等已明确结论,也不要求重审四项服务端设计。只需在原裁决中消除该相互冲突的两条约束,保留完整评审后编码要求。
## 4. 当前实施状态与剩余范围
- **已更新的是审核范围,不是代码已完成。** KVUserService仍为原待迁实现;C3ProfileCacheTests.cs不存在;受审源文件hash未变。
- 四项挂起:等级榜(含本人统计写)、好友列表LevelB/LastLogin与真实远端等级、公告、匹配;PlayerKVClient不改。四项接口提案已交付,不是已部署能力。
- 四项之外此前主干:独立KV登录/用户服务、个人存档、普通请求新UserID、问卷/邀请/邮件/商店/签到/活动等已有接线和离线验证记录;不等同所有线上业务已验收。
- 首场景双闸、开发冻结恢复、真实保存→退出→新进程恢复、Player/渠道验证及C4最终复核仍未关闭,不能说“四项之外全部完成”。
- 下一步在开发侧处理获审资料缓存/昵称头像范围;本次任务止于状态确认,未开始编码。缓存getter联动边界记录于本文件,不能按冲突文字机械实施。
## 5. 本检查点操作
只读审核及源码、核hash、更新状态/入口/TODO/日志和本核验记录。生产/测试/服务器代码未修改,正式网络请求0,未运行新编译/测试、未Play/打包。现有工作树保留;不向审核或服务器会话发送消息。