保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
81 lines
4.5 KiB
Markdown
81 lines
4.5 KiB
Markdown
# M2 CP2A独立实施预复核
|
||
|
||
日期:2026-09-29。审查者:ZCode会话(M2全链审查者)。本轮只读+hash重算+源码核对+**独立复跑**;未修改生产/测试源码/共享文档。**预复核(非批末终审)**——Player 编译与`_cheatingScore`补审未完成,CP2A 不因本报告关闭。
|
||
|
||
## 受审hash核对
|
||
|
||
| 清单 | 结果 |
|
||
|---|---|
|
||
| `M2-CP2A-实施自验hash.json`(19项) | **19/19全部一致** |
|
||
| `M2-CP2A-Player编译阻断受审基线.json`(4项) | **4/4全部一致** |
|
||
|
||
## 总裁决
|
||
|
||
**预复核通过(有条件)**——合成验证层全部通过、实现符合方案合同;两项待完成项阻塞CP2A关闭:①Player编译(`_cheatingScore`单文件补审),②批末终审。
|
||
|
||
## 独立复跑
|
||
|
||
| 项目 | 主会话结果 | 本复跑 | 退出码 |
|
||
|---|---|---|---|
|
||
| KVGameLoadTests | 89组/1962断言 | **89组/1962断言/0失败** | 0 |
|
||
| KVContractTests | 42/42 | **42/42** | 0 |
|
||
|
||
## 逐项审查
|
||
|
||
### 启动分流与旧路径排除:确认
|
||
|
||
自验描述:Bootstrap捕获不可变模式→KV不创建PlayFabMgr→跳过PF登录/MMTest/YinDun/TapJoy/第二次S101登录。AGG KV启动时失败,Editor kv-loop后置许可走旧路径——与方案§2.1一致。
|
||
|
||
### 101/102准入与三传输:确认
|
||
|
||
请求前仅101/102→Prepare后核newCreate=false+非空+31模块Schema→失败不Apply不发布——双层门落实。三传输同一CookieContainer、独立handler、禁重定向、互不共享校验后才发送——与方案§2.2一致。
|
||
|
||
### 原handle同一性与CP1接口消费:确认
|
||
|
||
`LoadForGameAsync`→`TryGetCurrentGameHandle(epoch)`获取同一原对象→内部`KVHandoffReady`——CP1三接口全部有真实消费者。
|
||
|
||
### 双重阶段闸:确认
|
||
|
||
PFLoginAct不等API事件、不启Mail/IAP、不Unload;LoginStage.RequestNextAct再阻断FishingStage——与方案§2.3一致。
|
||
|
||
### 生命周期与关闭:确认
|
||
|
||
Logout/销毁/Application.quitting同步撤销→Registry排水;关闭故障维持阻断——与方案§2.3一致。
|
||
|
||
### 特别判断项(提示词要求)
|
||
|
||
**1. UserService加载窗口与Coordinator撤销竞态**:合成测试覆盖GameLoaded后Close失败阻断下一Context;同账号新epoch旧回调拒绝——自验89组包含此场景。**无已确认竞态缺陷**,但建议终审时关注`KVHandoffReady`的epoch过期清理时机(当前依赖Logout/退出同步撤销)。
|
||
|
||
**2. KVHandoffReady旧epoch滞留**:内部状态绑定epoch,旧epoch查询被拒——设计正确。唯一风险场景是"进程不退出但账号切换"——CP2A限定101/102且重启式重登(用户已接受),无进程内换号路径。**无阻塞**。
|
||
|
||
**3. PFLoginAct.OnDestroy+Application.quitting覆盖**:`OnDestroy`覆盖场景销毁,`Application.quitting`覆盖应用退出——两者覆盖主要生命周期路径。`OnApplicationPause`未列入——Editor验证阶段无暂停路径,Player正式启用后如需可CP2B补充。**P3级备忘**。
|
||
|
||
**4. 闲置实现**:CP1三接口在CP2A中全部有真实消费者——无闲置。新增`PlayerKVRuntimeSelection`/`PlayerKVRuntimeLifetime`为启动必需——非闲置。
|
||
|
||
## Player编译阻断补审:通过
|
||
|
||
`_cheatingScore`问题本审查独立核实:
|
||
- `FishingChallengeManager.cs:642`字段声明在`#if UNITY_EDITOR`内
|
||
- `:72`的连锁赋零`...=_cheatingScore=0`在所有目标执行——**非Editor编译时无声明→编译错误**
|
||
- 这是**既有源码问题**(非CP2A新增)
|
||
|
||
补审方案的正确性:
|
||
- 仅拆分一行:`_cheatingScore=0`单独置于`#if UNITY_EDITOR`——**最小改动**
|
||
- 不移字段、不改评分逻辑、不触碰其他模块——边界严格
|
||
- 4项受审基线一致——证据链完整
|
||
|
||
**建议主会话批准该单文件补审**,修复后Player编译应通过。
|
||
|
||
## P3清单
|
||
|
||
- **P3-1**:`OnApplicationPause`在Player正式启用后可能需要补充KV撤销路径(当前仅OnDestroy+quitting)——CP2B备忘。
|
||
- **P3-2**:Unity Editor编译269警告未逐条归因——建议终审时区分新增vs既有。
|
||
|
||
## 结论
|
||
|
||
**预复核通过。** 合成验证层全部确认(89组/1962断言+42/42独立复跑);实现符合方案合同。两项待完成:
|
||
1. `_cheatingScore`单文件补审——**本审查已批准该补审方案**,主会话裁决后编码
|
||
2. Player真实编译验证——补审编码后用Unity CLI Loop或等效手段
|
||
|
||
两项完成后做**批末终审**(可在加速模式下与后续CP2B合并为一次终点全量复核)。CP2A未关闭。
|