Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-最终通关前临时门控与忽略路径清理清单-2026-09-29.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

49 lines
9.4 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更新(覆盖下方C2c新增项)**:PlayerSaveAction及失败永久占用已撤回且辅助实现删除;HomePanel await提议已撤回,保持原流程;Chat新增重试/取消改动已撤回。旧耗能/奖励宿主依赖已补齐,不再等待逐项补审。原UI体验改良不作为迁移任务。F1/F4/F6/F7/F8/F9最终运行与渠道清账仍未完成;不能因恢复原业务而把阶段门或真实验收项销账。详见C2d实施记录及交付hash。
更新:2026-09-29。状态:**待逐项解除与验收,不构成任何生产代码修改批准**。本清单落实用户要求:凡为加快开发而临时冻结、跳过、忽略或以合成路径替代的处理,必须在完整确认通关前恢复为经评审的真实处理;不能把“阶段限定通过”当作完整通关。每个解除动作先完成相关方案的完整评审、主会话明确裁决及精确开发边界,再编码、验证,并在每个检查点更新开发日志。
## 最终硬门槛
M2 整体完成/正式默认启用/全链通关的裁决,必须同时具备:①下表每个开发期临时门控已有经评审的正式实现或明确产品范围内的等价处理;②静态重扫没有未登记的 `return`、空实现、默认成功/空结果、`#if`、禁用组件、测试替身或旧 PF 回退造成的业务遗漏;③真实目标 Player、实际账号与渠道、登录→首场景→代表业务保存→退出→新进程恢复、异常/过期/旧 epoch 的运行证据;④旧 `PlayFabMgr` 自动执行与运行调用、直接 PlayFab SDK/Prefab/反射引用按迁移范围清零,闲置实现和无消费者接口清理完成;⑤独立实施复核、受审/交付 hash 复算和主会话逐项裁决完成。任何一项待定,都只能记为限定阶段进度,不能宣称完整通关。当前用户要求暂不打包,打包/真机项仍作为后续最终门槛保留,不能以未打包的验证代替。
“放开”指恢复真实业务能力并保留正确的安全约束,**不是**无条件删去账号准入、会话租约、Guard、epoch 或路由限制。若产品决定某功能在最终交付范围外,须有明确范围裁决、不可达证明和对用户可见行为的验收;不能只留一个静默 `return` 或空结果来算完成。
## 已定位的开发期冻结/忽略路径
| 编号 | 现状与源码/依据 | 解除条件与归属 | 当前状态 |
|---|---|---|---|
| F1 阶段跳转 | `Client/Assets/Scripts/Stages/LoginStage.cs:114` 在正式 KV 选择时直接 `return`,阻止 `FishingStage`。这是 CP2A 为隔离未迁首场景设置的临时闸。 | CP2B 逐项完成线上合同、首场景依赖与公开身份/授权时机的完整评审和实施;验证真实登录至首场景及退出恢复后,按批准方案替换此闸。 | **待解除;现在不得提前开。** |
| F2 登录公开状态 | `Client/Assets/Scripts/Services/UserService.cs:110` 的 `IsLogin` 明确排除正式 KV;`UserService.KVLoad.cs` 在加载后只交付内部原 handle。`AutoRestart` 等下游仍依赖公开状态。 | CP2B 明确 `IsLogin`/`IsAuthorized`、`InternalId`、会话生命周期和 `LoginTime` 的发布时间与旧 epoch 失效语义;对所有消费者验收,避免只改布尔值。 | 待设计/验收。 |
| F3 加载接收者 | `Client/Assets/Scripts/Services/UserService.KVLoad.cs:198` 对正式 KV 的 `OnInitData` 接收者直接抛错并返回;登录前也拒绝已有未审接收者。 | 盘清并迁移真正需要的接收者,规定一次发布、顺序、撤销和失败语义;无消费者者删去闲置路径,保持未授权订阅失败关闭。 | 待 CP2B/CP3 逐项清账。 |
| F4 首场景自动调用 | [CP2B 客户端线上合同待核矩阵](M2-CP2B客户端首场景线上合同待核矩阵-2026-09-29.md)列明 Mail、Survey 两读两写/奖励、排行榜直接 SDK、AntiCheat、Friend、Club、登录天数/动态活动、AIHelp 与 AutoRestart。现靠 F1 阻断,不能视作已迁。 | 从可信线上合同核精确 route、身份、响应、幂等/奖励顺序和错误处理;每项保留/迁移/产品下线要有裁决及运行证据,再允许进入首场景。 | 全部待 CP2B;本机服务器源码不可作线上合同。 |
| F5 KV 下普通服务器请求 | `Client/Assets/Scripts/Core/CustomServerMgr.cs` 的 `kvOnly` 一律拒绝普通 `CustomServerPost` 及包装方法,是用户确认的**移植期临时门**;原实现允许普通业务请求。 | 按[CP2B-T 方案](M2-CP2B-T正式KV普通业务请求恢复完整方案-待独立审查.md)让正式 KV 在 GameLoaded/原句柄交接后用**同一账号 Cookie 与租约**正常发送普通请求,保持加载期拒绝、旧 epoch/401/退出失效;实际业务路由及响应另随功能验收。最终不得残留 KV 全局普通请求拒绝。 | [CP2B-T运输限定关闭](M2-CP2B-T独立实施复核主会话裁决与限定关闭-2026-09-29.md):全局普通请求拒绝已在正式就绪后解除;真实业务/线上响应未验,F5最终清账仍待,阶段闸保持。 |
| F6 旧存档/SDK 业务 | `PlayFabMgr` 仍有旧自动生命周期、读写入口和 Editor loop;调查矩阵仍有大量旧调用及直接 SDK。 | CP3 按业务域替换读写与消费,CP4/CP5 清零正式 KV 路径的旧调用和自动组件,移除闲置实现/引用,核三态结果与奖励停止点。 | 待分批迁移;已完成的 CP3A 两提示键仅算局部。 |
| F7 验证替身与开发服务 | `PlayerKVGameplayLoop`、验证 capability/本地模拟 Get 是 Editor/合成验证;`EmptyMailService` 目前未见生产注册,`DevIAPService` 在非 AGG 登录注册。 | 终审逐个证明只在测试/明确开发渠道可达;正式渠道若依赖空服务或开发支付服务,须有经评审的真实替代。删除最终闲置实现,不能用合成断言代替真实业务。 | 待渠道与打包前静态/运行核查;不把既有 DevIAP 一概判为缺陷。 |
| F8 渠道与首批账号 | `PlayerKVRuntimeSelection.cs` 拒绝 AGG、只准 101/102 且要求固定地址与现存 KV 档;这是已裁决的首批安全边界。 | T04/T05 和渠道验收时决定其他历史账号、新账号及 AGG 的支持或明确产品排除范围;制定迁移/建档和防覆盖政策,再另审扩大名单。 | 首批边界继续保持;**不得**为“放开”而自动扩员/建档。 |
| F9 验收欠证 | CP2A 缺真实 Player 脚本编译证据;CP3A已[限定关闭](M2-CP3A独立实施复核主会话裁决与限定关闭-2026-09-29.md),但 Editor 直开真场景仍未验证;当前未真实运行正式 101/102。 | 按各批审查与验收计划补证;最终做全链和异常恢复验收。Unity 自动化只用 CLI Loop,暂不打包,不以 Editor/ServiceHost/合成替代 Player 或正式运行。 | 整体未关闭。 |
## 保留的安全约束与清账方式
- `PlayerKVGameLoadGuard`、原 handle/epoch 一致性、账号租约撤销、`CustomServerMgr` 的 `kvOnly`、401/403 与旧回调隔离是正确性边界;是否调整实现须另案完整评审,不因“解除开发冻结”直接删除。
- Editor 直开 `InternalEditorBoost.Init()` 只允许精确 PF,拒绝 KV/未知启动,是开发入口隔离;最终核实其不会伪装成正式 KV 验收或进入正式包。`PlayerKV*` 命名按用户裁决在整体移植完成后再独立处理,见[命名盘点](M2-KV命名一致性只读盘点-2026-09-29.md)。
- 每个后续批次把新出现的临时 `return`、`throw`、`#if`、空实现、屏蔽请求、模拟数据、禁用服务登记到本清单,注明引入原因、责任批次、解除前置、受审 hash 与验收证据。最终收尾先做全仓静态重扫和运行路径审计,逐项划掉并在[开发日志](../../开发日志.md)留检查点;未列出的新绕行也不能默认通过。
固定正式地址 `http://s101.local:18080/`。本清单只依据当前客户端和既有审查文档,不访问或修改本机服务器代码;线上合同必须另取可信证据。保留现有工作树,不在此文档检查点修改生产代码。
## 合批正式前审P2-2:移动端KV平台初始化
- [ ] KV链恢复易盾OnYinDunLogin(新PlayerId)并验证移动端真实上报。
- [ ] KV链恢复TapJoy初始化,使用第31模块已解码余额,验证旧回调/退出隔离。
当前按正式审查推荐暂缓,桌面首批不调用上述平台链;PF原逻辑保留。此项是临时路径,不得在移动端完整通关前忽略。
## C2c 连续开发新增清账(未通关)
- [ ] Survey/邀请/邮件/签到/商店失败的实际 UI 待处理反馈逐一验收;不得把仅日志或 false 当完整体验。
- [ ] PlayerSaveAction 的失败占用是防止重复发奖,不是可以永久冻结的完成状态;完成原 pending/unknown 恢复验收后确定恢复入口,禁止自动 AddItem 重放。
- [ ] 补单实际 HomePanel await 与旧验证宿主注入缺口集中补审后实现;旧 fishing-reward 当前真实首败,不能删用例/跳过 Init。
- [ ] BaseEventData<T> 无调用者,最终清理源文件及对应 meta 前完成范围核实;保留仍使用的 PF/AGG/kv-loop。
- [ ] Chat 退出取消、RT/初始化真实双模式回归及所有活动异步奖励延伸继续验证,未因本次普通存档覆盖即销账。
详见 M2-合批-C2c实施记录-2026-09-29.md 与集中边界差异方案。未新增开发性功能冻结,既有两阶段闸仍须统一解除。