Files
ft/CodexOutput/upserver/阶段4B3A独立实施复核-2026-09-24.md

63 lines
5.8 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.
# 阶段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通过。