Files
ft/CodexOutput/upserver/P2AlphaNullCompatibility/B4-实施交付与验收.md

52 lines
5.2 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.
# 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与正式迁移政策没有关闭。未打包。