5.2 KiB
P2-α-B实施交付与验收
2026-09-28,主会话。B1~B4完成,待B5独立实施复核,尚未关闭本兼容单元。 原101/102本地样本均Valid,未导入或真实启用101。
实际改动与原因
仅原白名单4个生产文件,文本diff合计新增18行、删除5行(含替换与注释),没有新生产文件或通用框架:
| 文件 | 改动 |
|---|---|
| PlayerKVSaveSchema.cs | M15仅四种JSON空白包裹null→既有StrictJsonSyntax验证原文→ExplicitNull;其余原Object(Json)。M22仅允许存在selections属性的JSON null |
| PlayerKVDecodedSave.cs | M15内部IsExplicitNull/工厂及非法组合检查、说明不参与服务器序列化;M22 null保留、非null仍复制为只读列表 |
| FishingChallengeManager.cs | Replace的一个条件扩展,显式null物化为业务null;活动/场景/计分/保存/Reset逻辑不改 |
| BargainPackData.cs | Replace的一个列表赋值兼容null;其他14字段、存在标记、Snapshot调用与Reset不改 |
共用Json与StrictJsonSyntax实现、DecodedSave的Raw复制保持原文。7文件前态在before;每文件diff及B2-source-diff-summary.json、B4-scope-verification.json可复核。其他待解决模块/生命周期问题没有顺带改动。
测试只改3个已批准文件:ActivitySchemaTests、D3SchemaTests、原EditorValidationHost。Bargain专用Same新增列表null比较分支,通用SameList不动;固定case内读取实际私有_data值验证原SaveData序列化形状及可变列表隔离,未调用SaveData、没有新增可传入任意目标的反射/CLI入口。
评审与首败保留
- 原方案1277/1277基线一致,八项与三P3裁决批准。
- 原方案遗漏Json拒根null的前置条件:B2先发现并停止生产编码,修订1补审接受,1301/1301基线一致,四项与两P3裁决后恢复;原文与两轮清单/报告不覆盖。
- 红测:构建成功,旧生产代码下77组/1717断言,3组目标兼容断言失败;不是编译失败或apphost误用。原始B2-red-*全部保留。
- 绿测:77组全部通过,1783断言;B2-green-*记录精确DLL hash/实际时间/run。未重跑无关收费玩法或奖励单元凑覆盖。
T1~T8验收
| 项 | 实际结果与证据 |
|---|---|
| T1 M15 | 缺键/JSON null/对象旗标区别、含空白Raw逐UTF8字节保留、模块外键保留、输入不变/Raw拷贝独立;非法组合及C# null/字符串null/非JSON空白/注释/多token/注入等拒绝;共用Json("null")仍拒绝。B2-green-result.json |
| T2 M22 | null/[]/非空列表与14字段保持、缺属性及错误元素拒绝、null不绕PackType、DTO非空深复制、Missing仍空集合。B2-green-result.json |
| T3 实际挑战对象 | 原M15-M26-M27固定case,63断言成功;fresh与已存在对象经Reset到空态,state0/ShouldOpen=false/null序列化,M26/M27回归;不启动Init或活动场景。B3-unity-activities.json |
| T4 实际礼包对象 | 原M21-M22-M24,146断言成功、restored=true、formalRequests=0;顺序替换null/[]/[7,9]、Snapshot字段比对、null比较不漏其他字段、实际数据序列化、集合拷贝与重置。B3-unity-bargain.json |
| T5 离线全量 | 77组/1783断言全部通过;包括原严格语法/其他Schema/事务与生命周期回归。B2-green-build.log、B2-green-tests.log |
| T6 完整事务与样本 | 原B2-20成功83断言、31真实模块/两epoch、sameObjects/restored=true;原固定Inspect下101 55键Valid/0诊断、102 45键Valid/0诊断,无第三问题。B3-unity-full-load.json、B3-source-inspection.json |
| T7 编译 | Editor Success=true、ErrorCount=0、WarningCount=272(原始警告保留,不称零警告);SERVICE_HOST exit0、0错误/2警告,警告指向未改的UserService及Stubs。B3-unity-compile.json、B3-servicehost-* |
| T8 边界 | 4生产+3测试白名单,未发现范围外受审文件变化(共享状态更新除外);883项cfgData/Tables不变,原备份hash不变,Unity末次错误日志0,无Play/run/permit,11 claimed保留。B3-verification-summary.json、B3-final-unity-errors.json、B4-scope-verification.json |
B2-20输出auth=2/gets=2是隔离模拟事务的认证/读取计数,不是正式网络请求;本轮未执行s101/PlayFab数据接口操作。Inspect仍是sourceOnly/syntheticDescriptor/usesLocalUtc,本地实际UTC窗口见B3-source-inspection-window.json。没有伪称真实认证、服务器时间或所有玩家兼容率。
样本与限制
| 样本 | 原SHA256 | 本次 |
|---|---|---|
| PF101,55键 | E6EB3E656B62A3535FDB8F0DC517321A4C3E32F3A8D95385A2B7D5C0AA8222EF | 两类目标拒绝消失,Valid/0 |
| PF102,45键 | 827F36084648449CEFAFB96B3CE62093DF70B8A87E33A526DA5B03A9C135A377 | 保持Valid/0,未重新导入 |
Valid仅指现有Schema范围和当前冻结配置下的解码。26种模块外键、5种未定位键、真实身份/权威源/并发与恢复政策、未验证挑战入口和热换号均保持既有边界。M15 null安全只涵盖获审受控加载前态,不推导任意场景可达安全。
当前4C2及P2-α-A保持关闭;本次B4交付之后交B5独立实施复核,主会话核hash逐条裁决后才关闭两类空态兼容单元。整体P2-α/G4与正式迁移政策没有关闭。未打包。