9.6 KiB
阶段4B2修订2方案独立审查
日期:2026-09-23。审查者:ZCode会话。
身份披露:本审查者是4B2原初稿的编制者(初稿独立审查报告开头已披露并按作者自审采纳);未参与修订2及字段/模块合同的编写(修订2由主会话编制)。按修订2提示词§1,本报告属"保留参与关系披露的独立审查",结论供主会话裁决时结合披露权衡。
本轮只读+仅新增本文件;未修改方案/基线/原报告/共享文档/代码;未使用子Agent;未访问正式服;未运行Unity或任何测试(纯设计审查,下述"源码验证"均为只读抽查)。
受审版本
阶段4B2方案受审基线-修订2-2026-09-23.json共123项,本审查逐项重算SHA256——全部一致,无漂移。核心受审件:
| 文件 | SHA256(前16,完整值见基线JSON) |
|---|---|
| 阶段4B2游戏加载与内存隔离方案-修订2-待评审-2026-09-23.md | 基线一致 |
| 阶段4B2字段与模块加载合同-2026-09-23.md | 基线一致 |
| 阶段4B2初稿审查裁决与修订说明-2026-09-23.md | 基线一致 |
最终结论
通过(附2项P2裁决确认项与5项P3,无P1)。 修订2把字段清单、模块空态、单会话借用、有界观察、防写门、受控入口、意图语义、文件白名单和22条矩阵全部前置到编码前,未发现"留到编码时决定"的必要定义缺失。建议主会话逐条裁决P2/P3后批准实施。
原初稿15项闭环核对
| 原编号 | 状态 |
|---|---|
| P1-1键清单 | 设计层已响应:附件§2–§3固化两种主档格式、19槽与全部当前消费键(含M01–M31与NewPlayerDataDic附属键、同义冲突规则) |
| P1-2双会话 | 新方案替换原规则:单认证+internal AccountLease借用;不采纳双会话;修复了CustomServerMgr.ReplaceTransport无排水问题(版本隔离+Lease.Close) |
| P1-3关闭屏障 | 设计层已响应:有界观察(10s/5s,可配置1000–15000)+跨Root ShutdownRegistry+PreviousClosePending/Failed专用错误;明确拒绝"锁释放即绕过CloseFailed" |
| P1-4 PF写通道 | 新方案替换原规则:显式放弃PlayFabMgr零改动,guard前置拦截+白名单+PF行为回归要求 |
| P1-5 IsLogin旁路 | 设计层已响应:公共kv配置在任何认证前返回BackendNotEnabled;Agg捷径先判backend;受控入口永不返回Done |
| P2-1~P2-5、P3-1~P3-5 | 全部设计层已响应(严格完整主档判据、意图≤2项内存态Discarded、HotUpdate内Editor宿主+固定反射、附件§4写点裁决、配置入口捕获一次、拆编排类、5s/10s常量、PF行为回归+静态断言、TapJoy条件编译分层验证、"行为等价"措辞) |
A–J分组核查结论(全部含源码抽查)
A字段完整性:可审,通过。 抽查验证:LoadPlayerDataNew的newData.Split(',')槽位0–18与附件§2表逐槽一致(含slot4=pearl/slot11=diamond的别名、slot12/13地图、slot16–18小游戏计数);epdk/epbdk/estdk键名与M25–M27一致;NewPlayerDataDic附属键(vipL/ld/ad/bd/ct/rt)与源码1004–1127区解析一致。主档"完整19槽或完整旧19键"替代"任一特征键"满足"完整业务校验"要求;两种布局共存冲突→ConflictingRepresentations、不静默挑份,自洽。未发现附件遗漏的同步消费键(注释掉的MonthCard/Challenge等已按Unconsumed处理并明示)。
B业务内存:可审,通过。 附件§5对M01–M31逐模块给出空态/替换集合与精确文件;"同一组业务对象A→B缺键整组断言、禁止抽样"消除了初稿最大缺口。抽查验证副作用的处置依据属实:BargainPackData.LoadData→AddGiftFaceUIForce(BargainPackData.cs:134)、EventPotionDataManager.GetDataFromServer内含Init调用、CampDataMM SetIsFix默认isSave=true的写点(附件M07明确禁止误用)——"不调用旧总入口、新增纯Decode/Reset/Replace"的路线与这些源码事实吻合。Poisoned容器销毁、不重试,闭合。
C会话拓扑:可审,通过。 4B1PrepareCoreAsync内部建session(源码核实)与"禁止外部先登录再借Cookie冒充单会话"一致;Lease"Prepared且未Closing"gate内原子发行、active计数、撤销后丢弃200返回值、Close顺序(撤销→workSettled→Lease→Bridge→session);CustomServerMgr internal绑定+版本隔离+Clear先递增版本——替换transport旧缺陷不复用。4B1原语义(重复Prepare/首token/历史任务/Volatile发布顺序)合同保留并要求全量重测(B2-19)+独立复核——扩展闭合。
D有界观察:可审,通过。 10s登录/gate、5s Quit仅限观察者,排水任务移交Registry持续存在;gate超时与获锁竞争释放已设计;迟到Prepare禁止Apply;CloseFailed不可绕过且不提供清空按钮(人工恢复另审)——与4B1关闭屏障裁决一致,无互等环(观察者返回不等 worker)。
E副作用:可审,通过。 抽查验证PlayFabMgr风险面属实:OnApplicationPause(133)/OnDestroy(155)/PlayerPrefs.Save(159)/SyncData/SyncDataImmidiate全部列入guard前置拦截;guard在改字典/缓冲/PlayerPrefs/构请求之前检查、"guard命中≠成功"(立即写返回false、void抛固定异常);且明确guard是第二道检查,零副作用主保证来自纯Decode/Replace+替身计数——职责划分诚实。进入受控范围前要求PlayFabMgr无pending buffer,防旧队列跨账号泄发。
F受控入口:可审,通过。 公共kv→BackendNotEnabled(Agg捷径同样先判,源码证实Agg确有IsLogin提前返回);能力仅UNITY_EDITOR创建、缺替身在首请求前失败;LoadedForValidation不授IsLogin/IsAuthorized、InternalId保持0、不发布EvtAPISvrLoginSuccess——不冒充游戏迁移完成。
G意图/身份:可审,通过。 意图≤2项、同键去重、显式Discarded、不跨epoch迁移、不落盘;MMTest的PF NewlyCreated(分桶)与S101 NewlyCreated(空档分类)用途分离明确;linkedAccout全新集合合并、EAccoutUrl缺失空字典;CleanupFailed+OriginalError双检查进入KVGameLoadResult。
H载体与范围:可审,通过。 HotUpdate.asmdef存在(核实);UNITY_EDITOR整文件宿主位于HotUpdate内创建internal能力,Editor包装器仅反射固定RunAsync——不加InternalsVisibleTo、不改asmdef;离线宿主显式链接+Unity宿主链接真实源文件的分层避免复制逻辑;B2-12对UNITY_ANDROID分支的双编译定义处理明确,不冒充真机。
I PF回归:可审,通过。 因PlayFabMgr入白名单,方案已放弃hash等价主张,改为B2-01行为回归+静态核对(原InitData位置与时间校准后次序)+guard无租约直通——覆盖了初稿P3-3/P3-5。
J阶段边界:可审,通过。 受控入口永不Done、输出改 LoadedForValidation 是收紧而非删减:加载能力(纯适配器+编排+隔离)完整交付,仅最终接线延后至4B3/4D启用门;4B3(读写路由)/4C(消费)/身份/场景/tickets启用条件完整保留。
三项变化的分别裁决(提示词§4要求)
- 4B1接口扩展(Lease/元数据/Close排水):同意。设计保留4B1已批准语义并强制全量重测+独立复核;Lease不公开凭据、路由白名单限
__kv_validation/*、禁二次account/Login。 - PlayFabMgr及31模块扩围:同意。PlayFabMgr仅guard检查点、PF分支原路径+行为回归;模块仅增纯Decode/Reset/Replace且禁改PF原入口;"清单外同步消费视为设计差异先补审"守住边界。
- 公共kv禁止Done:同意。这是消除P1-5旁路的正确代价;受控验证链完整可测,未削弱交付内容。
新发现
P2-α|存量真实PF档兼容性是隐含产品政策,需用户显式确认。 附件§2自_declare"比原PF加载更严格、不声称所有历史PF档都兼容、不符合布局的真实档须走单独迁移"。本阶段仅用合成档验证(正确),但"真实玩家档可能MissingCore→阻塞进游戏且无迁移方案"是启用门前必须存在的流程,属产品级决策。建议主会话裁决时将其列为启用门显式前置(迁移方案另审),避免4B3/4D时才发现。
P2-β|M14 ClubService.cs白名单叠加。 该文件已承载最小登录期未提交改动,4B2再改动使diff叠加、审查负担增大。建议实施时对M14三处加载态改动提供独立最小diff说明(非方案缺陷,流程建议)。
P3:①Editor宿主对GContext容器的捕获/替换/恢复若遇未捕获崩溃(非finally异常)会污染编辑器状态——建议驱动入口顶层try-catch保底恢复;②附件M05空态取表InitWheelTicket依赖表快照版本——已由"Decode前捕获固定"覆盖,实施时断言空态来源同一快照;③KVLoginCloseObserveMs无效配置在受控入口拒绝——建议明确拒绝错误码归类(Input或GateBusy);④B2-06"每一种codec至少正反例"工作量大,建议实施按模块分组交付证据;⑤诊断"最多32条描述"——建议明确超出时的聚合策略(按模块计数汇总)。
结论重申
通过。 无P1;P2-α/β为裁决确认项而非方案缺洞;P3五项为实施细化建议。原15项全部闭合且多项以更优规则替代。建议主会话:①逐条裁决本报告(特别是P2-α的启用门前置);②核对123项基线hash(本报告已代验一致);③批准后按主方案§9检查点0–4实施,检查点1(Lease/Registry+4B1全量回归)先行。