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

20 lines
2.5 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 正式测试账号互加好友执行边界
用户明确批准“是的,允许你互相加好友”,并补充必要时可使用103–110。本次先用已有101、102;扩展账号权限不自动修改客户端正式准入101/102规则,也不代表本次已创建103–110。
## 执行前核查与裁决
- 已有FriendService.AddFriend构造MySelf(PlayFabId、AvatarUrl、DisplayName、Level)、MyFriendCount和FriendPlayFabId;AcceptFriend使用Status=1、接受者PlayFabId、邀请者FriendPlayFabId。请求继续使用旧字段名,值为新UserID,遵循原UI邀请/接受顺序。
- 本轮批准的是具体正式账号测试操作和脱敏证据,不是C3c剩余生产源码编码许可。无新增抽象、无生产代码修改;不重新提交用户已经批准的好友操作。
- 分账号独立Cookie登录,不附带playerProfile;核state=0、newCreate=false。只读本人KV中的Lv、DisplayName、AvatarUrl、InfiniteBuildingData、LastLoginTimeUtc,为原AddFriend请求取得真实值。Lv无可用值时不编造等级提交。
- 先读取双方好友关系。若已互为好友,直接取样。否则101向102发送一次原AddFriend;成功后重读关系,若未直接互为好友,由102接受101邀请一次,再核双方列表。错误/超时不盲目重发写操作,先读回状态。
- 昵称/头像缺键沿已有KVUserService默认规则,已有值原样使用。MyFriendCount来自真实当前好友列表。保留其他既有好友。
- 日志记录HTTP、业务Code、双方关系和单项字段结构;不保存Cookie、凭证或玩家昵称/头像正文。可以记录测试UserID、数值等级和时间用于等价比较。
- 不删除本次关系,便于后续客户端验证。用户授权好友关系写入;不顺带发KV Set/Delete、UpdateProfile、领奖、付费、Play或打包,不读改服务器源码。
## 验证目标
双向好友关系实际存在;取得当前friend/GetFriendsList的非空单项结构,核PlayerID/昵称/头像/Level或LevelB/建筑等级/LastLogin。缺字段如实记录,不因好友成功就认定资料全部齐全或后端一定由KV实现。
预检补记:首次仅读Lv不能取得101真实等级,未发出好友修改请求。依据现行PlayerKVSaveSchema.DecodeCore,补读NewPlayerDataDic并优先取19槽newData的第0槽;若同时存在旧Lv,要求值一致。此为实测驱动读取现有存档格式的修正,不改生产解析器,不把现代档缺少独立Lv当坏档。初次失败JSON保留,后续证据另存final。