5.8 KiB
阶段4B3A独立实施复核
日期:2026-09-24。审查者:ZCode会话。
独立性声明:未参与4B3A实施(实施由主会话完成);此前参与为4B3分期与4B3A方案设计审查(受审对象为主会话编制的方案)。本轮只读+复跑取证;仅新增本报告与KVSaveRouteTests/review/目录日志;未改生产代码/共享文档/作者封板。
受审hash核对
| 项 | 结果 |
|---|---|
KVSaveRouteTests/checkpoint4-delivery-hashes.json(清单自身SHA256 2F52213215E638C0…)共320项files |
320/320逐项重算一致 |
checkpoint4-boundary-audit.json |
2101项源码基线中仅PlayFabMgr变化;新增源码=KeyReadResult+SaveRouteEditorValidationHost;oldPlayFabBytesUnchanged=true机器记录 |
PlayFabMgr剥离新增块 vs PlayFabMgr.before.txt |
本审查独立剥离比对:内容在行尾归一后一致(唯一差异为1个空行,系本审查剥离启发式残差;before.txt本身为混合行尾270CRLF/313LF);与交付方机器记录互证。第31行HasLiveInstanceForKVLoad存在于before(4B2期产物),非本次越权 |
复核结论
接受4B3A交付。无P1/P2。 建议:主会话核对hash与逐条裁决后关闭A;4B3B/C仍需各自完整方案与评审,未批准编码;P2-α等启用门保持。
代码审查
四入口(PlayFabMgr.cs:314–360)与已批方案§3逐条吻合:guard优先(ReadLocal/Update/Sync)→null/输入校验→原样透传;ReadKV单次ReadLocalSnapshot+Ordinal查询三态(失败Found=null/缺键false/空串true);Write透传StateResult/Ticket/LocalCommitMayHaveSucceeded;Flush/Wait命中guard返回结构化零计数(null handle区分Validation);无Instance访问、无重试、无新全局机制。PlayerKVKeyReadResult不可变+构造器防御(error==None&&!found.HasValue拒绝)+P3-3三态XML注释落实。
四条P3落实核对:P3-1(tmp目录finally删除+无残留断言,WriteCases.cs:58)✓;P3-2(裁决如实限定"无打包期链接实测,仅条件编译表面+源码扫描")✓;P3-3(XML注释7–11行)✓;P3-4(裁决明确B3B合同"Blocked后中止并走原归属恢复,不换句柄重试")✓。
独立复跑(全部本会话执行,真实退出码;日志在KVSaveRouteTests/review/)
| 命令 | 结果 | 退出码 |
|---|---|---|
KVSaveRouteTests --all(默认/AndroidProbe/PlayerProbe三探针) |
各13组/544断言/0失败 | 0×3 |
| NetworkTransport build+Dependencies.targets | 通过 | 0 |
| KVGameLoadTests(4B2离线) | 75组/1715断言/0失败 | 0 |
| KVContractTests/KVSyncTests/KVSyncCoordinatorTests | 42/86(今日一次通过)/29 | 0×3 |
| KVLoginContextTests(4B1) | 23组/279断言 | 0 |
| KVStage3CTests --offline | 8/8(今日一次通过) | 0 |
| KVLiveTests仅build | 通过 | 0 |
| Unity compile | 0错误 | 0 |
Unity fixed-route(先--compile-only再执行) |
success=true,34断言,auth=2/gets=2/writes=1/formalRequests=0/restored=true | 0 |
Unity B2-20(先--compile-only再执行) |
success=true,83断言,restored/fullB220=true/31真实模块/forbidden=0 | 0 |
审查事故披露(本审查自身)
首轮复跑两次构建失败(CS0101重复PlayFabMgr)——系本审查污染:为做剥离字节比对,我把review-stripped*.cs等分析文件放在了测试项目目录,被SDK默认通配编译。移出后三探针全部一次通过。教训已计入:SDK风格项目目录内不得放置任意.cs分析文件(建议后续评审工具输出一律用项目外目录或非.cs扩展名)。交付自身构建干净,该失败与交付质量无关;首败日志保留于review目录作证。
B3A-01~19逐条
依据交付矩阵、五类复跑与代码审查:01~19全部通过。要点:01/02三态与输入/guard优先(代码逐行核实);03两个Snapshot错误映射(其余状态按已批"沿用旧回归+源码审计"分层,交付未冒称端到端重造);04–06写语义/localOnly双向/null不删;07真实File.Replace的StorageError注入+AfterReplace沿用3A五阶段回归+facade原样return审计;08–11水位/取消/票据归属;12 A→B句柄隔离(B缓存与请求计数断言);13关闭竞争保留接受事实;14 guard计数;15字节比对(双记录);16 PlayerProbe非编辑器表面;17 Unity实际HotUpdate调用;18回归全绿(两项间歇首败今日未复现,挂账保留);19本报告完成独立复核部分。
已知事项裁决
- KVSync 85/86与3C L7两项间歇首败:今日全部一次通过,未复现;根因未定挂账保持,不以今日通过宣称已消失。
- NetworkTransport原build失败→复用旧依赖targets后通过:接受——依赖边界处理如实,非生产改动。
- 4B3A无生产调用者:确认(facadeReferences审计+PlayerProbe表面);通过≠业务接通,C属生命周期、B属业务归属,均未批准。
P3清单
- P3-1:评审/工具产物不得落测试项目目录(本次审查事故佐证)——建议写入后续评审提示词模板。
- P3-2:
PlayFabMgr.before.txt为混合行尾——建议未来before快照统一写出为CRLF或LF单一风格,减少字节比对的启发式成分。 - P3-3:四入口在Player构建中的链接期观察按裁决如实留白(无打包期)——4D/最终包阶段补链接证据即可。
结论
接受4B3A交付;无P1/P2;P3三条仅记录。 主会话核对本报告hash(已代验320/320)并逐条裁决后可关闭A,随后进入4B3B完整方案设计(不因A通过自动放行)。P2-α真实档专项+用户产品确认、4C、tickets、身份、4D启用门全部保持;本报告不宣布4B3关闭或G4通过。