Files
ft/CodexOutput/upserver/B3BatchMigration/M2/M2-CP3A联合独立审查主会话裁决与实施边界-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

25 lines
4.1 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 CP2A 增量与 CP3A 联合独立审查主会话裁决
日期:2026-09-29。审查报告 [`M2-CP3A独立方案审查.md`](M2-CP3A独立方案审查.md) 为 4423 字节、SHA256 `FC6D1AD044327F1FC69818318755F16F7962F916CA8BE52BF2D89BA7DC8FCCC7`。主会话重算 CP2A-C15 交付 20/20、清单 SHA256 `575AE946452078011CCD068303217377E0AA98C0EF0B0A1103F19D527B6D6E4D`;CP3A 受审基线 18/18、清单 SHA256 `F7311D9D923A61E8F665B021184C9C969C551EC1DDD96D2F23BF2F9CD1C98D49`,均无漂移。方案 SHA256 `BA94F8B1F7CA43D2D99C181BF5AAC04B2312073498F6C3046D84D291733FE113`。报告仅作独立意见,以下为实际开发裁决。
## 裁决
1. **CP2A 单文件补审增量接受。** `_cheatingScore` 仅在 Editor 条件声明时清零,其余字段全部目标仍清零,符合已批准补审。此结论仅覆盖代码增量。真实 Player 脚本编译仍无通过证据,CP2A 不关闭;既有 `LoginStage` KV 停留闸保持。
2. **CP3A 前审通过,收窄批准实施。** 仅批准[完整方案](M2-CP3A原句柄正式业务发布与B01提示接线完整方案-待独立审查.md)第 3–5 节的原实例一次性绑定与 B01 `ShowNotice`/`IsOpenClubRed` 两键,生产文件上限为 `UserService.KVLoad.cs`、`SettingService.cs`、`ClubService.cs`、`ILocalNotificationService.cs`、`SubBoostrap.cs`。测试可在方案列出的合成宿主及固定 Unity CLI Loop Editor 验证入口按实际编译需求增改。不得改 `LoginStage`、KVMgr、Guard/Owner/Handle、Coordinator、API/协议/服务端、Schema、场景/Prefab或打开 `FishingStage`。PF 默认路径保持。若实现发现白名单外必需修改或合同不成立,停在代码变更前补审。
3. **纠正审查报告 Q2 的时序证据。** `SubBoostrap.RegisterServices` 只先注册 `PlayerKVRuntimeSelection`;正式主路径的 `ClubService` 注册发生在之后的 `LoginStage.StartAsync`,并在 31 模块 `PlayerKVGameplayBindings.Bind` 解析时构造。顺序结论可以接受,但“同一方法内注册 ClubService”的表述不准确。实现必须在 Club 构造时检查容器确有冻结选择;正式模式不得因解析异常或空选择默认 PF。
4. **纠正审查报告 Q4 的测试事实。** 现有 `B01Tests.csproj` 编译 `ClubSlice.cs`,不是当前完整 `ClubService.cs`;报告称“B01Tests 即编译真实 ClubService”不成立。CP3A 实施验收必须新增能执行当前真实 `ClubService` 的合成或 Unity CLI Loop 固定验证,不能以切片绿测代替。
## P3 逐条裁决
| 意见 | 主会话裁决 |
|---|---|
| P3-1 同 handle 重复绑定计数 | 不引入常驻计数/新运行状态;重复绑定检查后幂等并以专项测试观测次数,异常重复在诊断中记录即可。避免为两键接线扩大状态面。 |
| P3-2 冻结选择注释 | 接受。在正式出生标志/绑定方法附近用简短注释写明来源和不可重绑;不加无用接口。 |
| P3-3 CLI Loop build/compile 带 Player 参数 | 现有 CLI Loop 命令清单只有 `compile`,没有 `build`;此前 `execute-dynamic-code` 调用 Player 编译被 Restricted 在执行前拒绝。可核 `compile` 的公开参数,但不得猜测目标参数、绕过 Restricted 或打包;在可用能力不足时继续标 Player 未验,不作为 CP3A 代码实施阻断。 |
## 实施与验收顺序
CP3A-C0 先在批准测试范围写**真实对象与原 handle**的失败用例,覆盖正式未绑定拒绝、原容器实例、在途通知回调、部分绑定失败与注销陈旧;记录红测。C1 按五文件白名单连续实现,原对象、epoch 与关闭屏障不变。C2 跑 B01 实际受影响回归、CP2A 加载/ServiceHost、真实 ClubService 固定用例及 Unity CLI Loop Editor 编译;核无 PF 回退、无额外 S101 请求、阶段仍停留。C3 封存交付 hash 并批末复核,可与下一个相邻合同的实施复核同次完成。每一检查点更新开发日志。正式 101/102 不操作,不打包。
服务端边界另据用户最新指令:本机服务器代码不可改且不能代表线上版本;CP3A 不依赖其契约。CP2B 正式路由/响应与身份仍须线上依据,未审前不开放场景。