Files
ft/CodexOutput/upserver/阶段4B2方案独立审查-2026-09-23.md

64 lines
8.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.
# 阶段4B2方案独立审查
日期:2026-09-23。审查者:ZCode会话。**重要披露:本审查者同时是受审方案的编制者**(作者自审性质的独立审查报告),主会话裁决时应知悉此身份并按其对结论权重自行斟酌;本报告以提示词§0"设计完整性门"为准绳从严审查,发现不因作者身份而淡化。本轮只读+仅新增本文件;未改原方案/共享入口/代码,未用子Agent,未访问正式服,未运行Unity(纯设计审查)。
## 受审版本
| 文件 | SHA256 |
|---|---|
| 阶段4B2游戏加载与内存隔离方案-待评审-2026-09-23.md | `8992B17D8B1DEAAA99D7DFDCC76AE2D21112FC259C675F6EDEB9205643C9803C` |
| 其他AI审查提示词-4B2方案-2026-09-23.md(含§0设计完整性门,本次按此版执行) | `3E667B519C57F48E3462C1EFB44A5BF2E481C1A5DD2DD2C467EFCCBF3EED9AD3` |
实际读取:方案全文、前置链(4B1关闭裁决/4B分期/阶段4分期)、4B1/4A四个生产文件、方案§1全部源码(UserService登录链/InitData/SetMMTestValue/LoginApiServerCore/401订阅/Logout、AggUserService、DataCenter.PlayerData.LoadPlayerData与模块分发、PlayFabMgr.CompareDatas/GetLocalData、QuitAct)、调用盘点、模块InitData消费清单与CampDataMM写入点核对。作者自审补充(S-1~S-9)一并纳入对照。
## 最终结论
**退回补全。** 方向与架构正确(后端开关、插入点、五Verdict校验、副作用暂存思路、白名单边界均可保留),但按提示词§0"必要细节未明确时应退回补全,不留到编码时决定",存在**5项P1级必要定义缺失**。补全后可快速复审,无需推倒。
## P1发现(必要定义缺失,阻塞批准)
**P1-1|主档完整键集与逐模块重置规则留在实施检查点,违反"完整评审后编码"。** 位置:方案§3"完整键清单由实施检查点1固化"、§5检查点2。依据:4B分期对4B2的审查要求原文为"单独列**完整加载字段/模块**、缺失与损坏策略、默认值来源";提示词§0明确禁止以"编码时再确定"代替设计裁决。实际模块清单(本审查核实):`PlayerShopData`、`PlayerFishData`、`FishingEventData`、`BuffDataCenter`、`CampDataMM`(DataCenter.PlayerData.cs:593–607)、`BattlePassData`(:862)、`FishingBoxData`(:697,嵌套解析)及`LoadPlayerDataNew`链——方案§3只列锚点。修改建议:方案正文必须包含①全部消费模块及其存档键清单(含PF模式现用键名);②每模块"缺键=回默认"还是"合并累积"的语义标注与残留风险结论;③特征键判定规则收紧(见P2-1)。
**P1-2|双认证会话归属未裁决。** 位置:方案§3加载门。依据:KV流程同时存在两个已认证S101会话——`UserService.LoginApiServerCore`创建并`UseAccountSession`给CustomServerMgr的`apiSession`,与`PlayerKVLoginContext`内部自建的session(4B1"拥有一个新建的S101AccountSession")。方案未裁决:双会话是否为最终形态(vs扩展4B1注入既有session——4B1方案明确说该扩展"必须在4B2/4B3方案中明确");Logout/401时两者的处置顺序;双登录的服务端影响;Done是否要求两者皆成功。修改建议:方案新增"会话拓扑"小节,明确选定双会话并给出顺序合同(如:注销时代际失效→撤KV context→关apiSession;Done要求API登录+KV Prepared二者皆成),或选定注入式并走4B1扩展差异评审。
**P1-3|关闭屏障的失败恢复未设计——存在登录门死锁路径。** 位置:方案§6("关闭任务并入下次登录await")、QuitAct有界等待。依据:4B1合同为CloseFailed后实例永久阻塞、新context须await旧Close成功;若旧Close因忽略取消传输而长期挂起或faulted,下次登录在await处**无限阻塞**。Quit超时(方案未定值)后同进程再次登录同理(提示词§0点名)。修改建议:方案必须设计恢复策略并写入矩阵,例如:登录门await旧Close采用有界等待+超时进入专用阻塞错误(保留证据、提示重启/人工处理),或定义"仅当旧Close已faulted且缓存锁已释放时可跳过等待"的可判定条件;同时给出QuitAct超时常量与超时后状态记录。
**P1-4|KV模式下PlayFabMgr写通道未处置。** 位置:方案§4/§7(禁改PlayFabMgr)与"KV成功后不镜像PF"已裁边界。依据:PlayFabMgr为MonoBehaviour单例,Unity受控加载中Awake必启40秒定时器;DataCenter各保存点(体力恢复等)仍经`UpdateUserDataValue`写PF。方案只声明"写路径4B2不接",未回答受控运行期旧写通道如何静默。修改建议:二选一并写入方案:①受控验收严格限定"加载段+断言窗口内零脏写触发",并给出该窗口内可能的脏写触发清单及其排除论证;②正式差异评审允许PlayFabMgr最小改动(后端开关短路),放弃"零改动"承诺。不允许留到编码时决定。
**P1-5|IsLogin提前Done与401后台重登构成KV门旁路。** 位置:方案§3加载门未覆盖。依据:`UserService.LoginCore`开头`if (IsLogin) return Done`——PF已登录且API已授权时直接Done,**不经过KV准备门**;401订阅的`_ = LoginApiServer()`后台重登恢复InternalId后,IsLogin再次为真,同样旁路。KV模式下该路径会让游戏以无KV快照状态进入Done。修改建议:方案必须定义KV模式下IsLogin提前Done的条件(如要求"当前代际内已有Prepared成功"状态位),并把401后台重登后的KV context重建(或明确不重建则禁止Done)写入§6合同与矩阵。
## P2发现
**P2-1|特征键"任一组命中"判定偏宽松**(作者自审S-3,复核成立):孤立进度键而模块大档全缺的残档可判Valid。建议收紧为"至少一个模块大档键+至少一个进度键双命中"或等价规则,并入P1-1的键清单。
**P2-2|暂存意图生命周期未定义**(S-2):存储载体(内存/本地)、进程退出丢失是否接受(MM实验分组回退影响需显式裁决)、诊断形式、"未落盘"标记如何防止4B3前被误读。
**P2-3|Unity受控验收的替身注入机制未定义**(S-4):internal工厂跨程序集不可达;B2-20须在白名单内给出机制(Editor反射装配宿主/仅离线宿主验证+Unity仅验编译与开关行为),并同步调整矩阵措辞。
**P2-4|初始化间接写入清单不全**:方案只逐项处置了MMTest×3与Agg渠道标记;模块InitData链内是否触发写未经盘点。本审查抽查CampDataMM:`SetIsFix`含PF写但InitData传`isSave:false`(安全),证明"逐模块必须逐一验证"而非可假定。要求方案把"LoadPlayerData→OnInitData同步可达的全部写点清单+逐项处置"列为方案正文内容(非检查点)。
**P2-5|开关读取时点未定**(S-5):应明确"登录流程入口读取一次、会话内固定;配置热更改不生效于当前会话"。
## P3发现
- P3-1|UserService改动面集中(S-6):给出"拆PlayerKVLoginFlow编排类"备选的明确取舍,而非仅留问题。
- P3-2|QuitAct超时值未定(S-7):给默认常量并进配置。
- P3-3|PF模式等价证据偏弱(S-8):补静态断言(原InitData调用位置仍在PF分支)。
- P3-4|InitTapJoy的UNITY_ANDROID条件编译在离线宿主不可测(S-9):指定验证载体。
- P3-5|措辞:路线表中"行为与现状逐字节等价"应为"行为等价"(代码新增分支判断,非逐字节)。
## 方案§10五问逐答
①开关等价性:机制可行,但需P2-5时点定义+P3-3证据补强;②特征键判定:**不满足**,按P2-1收紧并落实P1-1清单;③暂存边界:**未完整定义**(P2-2);④白名单可审性:基本清晰,UserService改动面建议按P3-1再权衡;⑤矩阵与启用门:**存在旁路**(P1-5),关闭屏障死锁路径未覆盖(P1-3)。
## 退回补全清单(修订版方案必须包含)
1. P1-1:完整模块/键清单+逐模块缺键重置语义+收紧后的特征键规则(正文)。
2. P1-2:会话拓扑小节(双会话裁决+注销/401顺序合同+Done双成功条件)。
3. P1-3:关闭屏障失败恢复设计+Quit超时常量+对应矩阵项。
4. P1-4:PF写通道处置裁决(收窄受控范围或PlayFabMgr差异评审)。
5. P1-5:IsLogin提前Done/401重登的KV门条件(正文+矩阵)。
6. P2-1~P2-5各自的最小定义。
修订后按本提示词快速复审(重点仅上述各项),通过再交主会话裁决批准实施。