63 lines
5.8 KiB
Markdown
63 lines
5.8 KiB
Markdown
# 阶段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本报告完成独立复核部分。
|
||
|
||
## 已知事项裁决
|
||
|
||
1. KVSync 85/86与3C L7两项间歇首败:今日全部一次通过,未复现;根因未定挂账保持,不以今日通过宣称已消失。
|
||
2. NetworkTransport原build失败→复用旧依赖targets后通过:接受——依赖边界处理如实,非生产改动。
|
||
3. 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通过。
|