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

6.3 KiB
Raw Blame History

C3c 隔离边界修订与复审确认

2026-09-30。按用户“更新一下审核,重新确认”,结合原ZCode第三轮意见与实际跨账号探测,形成本次统一补充。原独立报告不由开发侧改写,本文件供审核端确认修订后的完整方案边界。

一、已确认的本人KV合同

Client/Assets/Scripts/Services/PlayerData/PlayerKVClient.cs:36的GetAsync只有keys/token,请求POST playerdata/Get,身份来自当前认证会话。正常请求示例:

{"keys":["LastLoginTimeUtc","LevelB"]}

示例只说明请求形状,不承诺这两个键目前已有值。不要传playerId、playFabId或userId选择其他账号。 原客户端未传这些字段,不存在需要删除的生产参数;此前添加参数仅在用户明确要求的只读探测中使用,没有写入生产代码。保留keys,不能把“去掉玩家ID参数”理解成删除所需键名或认证会话。

实测101请求102、102请求101,各用JSON三种目标ID参数及query playerId,8/8 HTTP200且只返回本人数据;本人前后摘要稳定。正常无目标参数的本人读取也已成功。因此无需再次测试删除参数能否读取本人,也无需为此新增迁移代码。

第三轮审查将Get/Set/Delete均限定本人账号,本次接受该合同边界;网络实测只覆盖Get,没有跨账号写入或删除测试,不能把它们写成已实测。结论不外推服务器没有其他公开资料接口。

二、对第三轮意见的逐项确认

第三轮意见 开发侧确认及实施限制
禁止客户端按目标ID逐个读他人KV 接受;不扩展PlayerKVClient,不切换/冒用好友登录会话,不增加客户端跨玩家KV接口
好友、他人资料由服务端内部读取KV后返回 接受职责方向;客户端消费已有好友/资料路由,仅做调用与DTO映射。服务端内部实现由对应开发侧处理,本客户端Agent不改服务器代码
LevelB写本人KV,供服务端聚合/资料读取 接受作为原统计能力的迁移方向;原计算、触发点、两统计名、调用者时序及错误语义保持。此项修订原R2中完全禁止本人KV统计写的旧方向,不恢复已撤回的临时副本+通用Flush方案;具体写入合同仍须审清
排行榜前50由服务端聚合 接受;不枚举玩家、不客户端拼榜、不把活动榜当等级榜。具体读取路由、统计名与结果映射仍待事实
公告/匹配走全局内容及协调接口 接受方向;保持原消费者和匹配时序,不猜私有键、不以结束匹配冒充迁移
整体审核通过后编码 继续执行;方向确认不等于完整接口、字段和文件边界都已获批

第三轮表中“客户端不新增跨玩家读取逻辑”应理解为不新增直接跨账号KV读取;已有好友搜索等业务请求仍然按原协议传目标UserID,不能误删friend/SearchFriend的PlayFabId参数或其他业务目标字段。

三、好友/公开资料的逐字段映射边界

这些是原消费者要求,不是声称服务器已新增的响应字段。返回可以采用兼容DTO,必须有实际协议或服务端确认后确定准确字段名。

原PF消费值 KV业务返回必须提供的同义数据 当前证据
FriendPlayFabId / PlayerProfile.PlayerId等玩家身份 目标新UserID;旧playFabId字段名可保留 好友列表与SearchFriend对101/102目标ID已实测正确
DisplayName / AvatarUrl 原昵称/头像资料,保留原默认昵称和事件流程 字段存在;SearchFriend样例内容为空,不据此宣称真实KV资料已投影
Statistics中Name=LevelB的Value 原触发点更新的同一复合统计分数 当前好友/SearchFriend未返回;普通level=1不能替代
Profile.LastLogin 对应好友的原语义时间,沿已定KV阶段方向核返回 现有样例未返回,源账号LastLoginTimeUtc也缺;不得伪造或改过滤
GetPlayLv读取的Lv 目标玩家普通等级,与复合LevelB区分 SearchFriend返回1,本人KV分别62/60;数据来源/同步关系待核,不直接采用错误值

原Profile/Statistics为空时跳过整条、LastLogin为空时保留原异常表现、列表排序/名次/事件/AGG顺序均不改。既有每日初始化先消费旧LastLoginTimeUtc再保存当前值的时序保持;第三轮提议服务端读取该键,不自动证明它与PF最近登录时间全部等价。缺键、值存在时的投影与更新时点须明确,不能为了补字段改变每日刷新逻辑。

四、本次复审只需收敛的事项

  1. 本人统计写:本人KV作为原统计持久化来源的实际键/序列化、全球与地区写入顺序及一次原调用的完成/失败映射;不得未经评审引入刷新无关存档、额外等待或重试。
  2. 好友与公开资料:GetFriendsList/SearchFriend等既有业务路由的LevelB、LastLogin、普通等级字段、缺键和失败返回;源数据与服务端响应是否同义。已有路由和目标ID成功事实无需重审。
  3. 等级榜:全球/地区统计的读取入口、前50、StatValue/Position/UserID及资料映射;保持原已知语义,不凭空添加同分规则。
  4. 公告和匹配:准确的现有替代入口及原结果映射。继续属于本次迁移目标,不默认停用或延期。

以上集中在同一C3c完整审查,不再要求用户重新决定是否使用KV、新ID或好友时间阶段方向。涉及服务端字段事实的部分需准确证据,不能由审核意见或客户端代码猜出来。

五、交付与下一步

请审核端在原报告中明确:本文件一至三节是否准确;第四节各项最终合同与允许文件/方法;是否已达到整体可编码,未达到则只列具体事实缺口。当前只记录方向和实测,未冒充整批PASS。

证据:跨账号Get脱敏JSON及结论、SearchFriend脱敏JSON及结论、当前PlayerKVClient源码、原ZCode第三轮意见,统一登记在本次复审增量hash。早先“SearchFriend仅离线”“好友时间待DB/KV重选”“客户端加目标ID读取KV”的旧叙述均不再作为当前执行依据。

本轮没有新网络请求、生产/测试代码变更、服务器修改、Play或打包。完整审核门槛保持。