Files
ft/CodexOutput/upserver/阶段4B1实施复核裁决与关闭-2026-09-23.md

69 lines
6.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.
# 阶段4B1实施复核裁决与关闭
日期:2026-09-23。主会话核对时间:17:29 +08:00。
依据:[外部独立实施复核](阶段4B1独立实施复核-2026-09-23.md)、[实施批准](阶段4B1方案裁决与实施批准-2026-09-23.md)、[交付矩阵](阶段4B1交付与验收矩阵-2026-09-23.md)。用户转述审核者意见并要求确认;本轮确认实施复核已经落盘,完成主会话应承担的版本核对、逐条裁决及共享状态更新。审核者无需修改共享文档。
**最终裁决:接受4B1限定实施,4B1正式关闭,无待修复P1/P2。4B2/4B3仍需各自完整方案、独立审查和裁决;本次关闭不批准游戏接线、正式业务KV写入或打包。整个4B与G4尚未通过。**
## 1. 受审版本核对
主会话重新执行SHA256计算:`KVLoginContextTests/final-source-hashes.json` 的6项交付文件全部匹配,`baseline-hashes.json` 的68项既有文件全部未变。两份生产源码同时与独立复核报告的完整hash一致:
| 文件 | SHA256 |
|---|---|
| PlayerKVLoginContext.cs | 7552C331BCD7B5B51A9726085D25319E9D77653E5519EE76D7772EEB4B757A29 |
| PlayerKVLoginPrepareResult.cs | 108CA361C7153D19A08CD348B8325538019A86C426BDD80B907528399F22B290 |
scope中的UserService、PlayFabMgr、DataCenter、Stages、账户、4A/3A/3B源码以及旧测试项目无漂移。本轮仅修改文档,不改受审代码、测试或原复核报告。
## 2. 三条实施复核P3逐项裁决
以下编号带撇号,区别于方案审查P3-A/B/C和历史4A P3-1。
| 编号 | 主会话裁决 | 核对依据及后续边界 |
|---|---|---|
| P3-1' prepared发布顺序 | 接受为维护约束,无代码修复 | IsCurrent先Volatile.Read(prepared),准备路径先写session/Cookie/handle等字段,最后Volatile.Write(prepared)。现有发布顺序成立。后续若新增可并发读取的字段,必须保持发布前完成初始化;不能将prepared提前写入或把IsCurrent简化为历史Prepared结果。本约束列入后续4B2方案待办。 |
| P3-2' CloseFailed保留原始原因 | 采纳为4B2接线要求,无代码修复 | CompleteFailureAsync将CloseFailed与OriginalError、CleanupExceptionType及各阶段错误同时保留,符合合同。未来调用者必须先检查CleanupFailed并保持关闭失败屏障,再同时读取OriginalError和阶段错误用于诊断;不得因原始错误可重试而绕过失败Close新建context。后续4B2方案须显式写入并验收。 |
| P3-3' 首轮夹具失败记录 | 接受,无新增行动项 | 首轮21组/1失败、夹具修正后21组全过、最终23组全过的记录均保留;首轮故障源为测试注册到已解除链接的请求token,处理记录清楚。保留原始失败run,不用成功覆盖失败;不因此修改已通过的生产代码。 |
方案阶段P3-A/B/C亦已由独立实施复核确认落实:历史任务与快照语义明确、取消/失败等待真实收尾的XML说明、不同token仅诊断不替换生命期。此处接受落实结论,不再次修改方案或实现。
## 3. 独立证据及口径核对
- 已直接读取独立run `20260923090458_327462ece0b6468c9acf36c49732aa8a/result.json`:23组全部passed、failures=0、报告内273断言;加末尾5项脱敏检查,符合外部报告的278总断言。
- 原交付报告内274+5=279。逐用例比较仅 `B1-11-parallel-prepare-close` 从49变为48:24轮并发用例固定两项断言/轮,传输实际获准进入时还执行Handler断言。Close可能在传输进入前获胜,因此断言计数可变;两次均完成23组且失败0,不视作漏项。外部报告概述中的“49断言并发组”对应原交付run,本次独立run实际为48,原报告不覆盖修改。
- 外部回归42/86/29、4A18组、Review、3C离线8/8、KVLiveTests仅构建的命令与退出码采用独立复核报告记录;本主会话没有重跑,不冒充本轮实测。
- 独立强制Unity编译JSON为Success=null,其后Error日志0条;只能证明报告中的“调用强制编译后错误日志0条”,不写成Success=true或全项目0警告。同hash原交付编译明确Success=true、0错误/274其他文件警告、新模块0,继续有效。
- 68项范围hash、原失败记录保留及输出边界与独立结论一致。历史KVSyncTests偶发失败本次未复现,不代表根因已经定位或问题已消失。
## 4. B1-01~B1-16逐项裁决
| 编号 | 裁决 | 接受范围 |
|---|---|---|
| B1-01 | 接受 | 认证→Get→快照,同Cookie归属及关闭资源顺序。 |
| B1-02 | 接受 | 非法输入/提前取消/过期零传输,ID规范化。 |
| B1-03 | 接受 | 登录失败具体原因保留,失败不Get且session清理。 |
| B1-04 | 接受 | 初始Get、Busy、损坏、Conflict/Unknown/StorageError失败不返回伪空档。 |
| B1-05 | 接受 | 成功空字典仅为读取事实,不授权初始化或建档。 |
| B1-06 | 接受 | 同实例同Task、首token拥有生命期,不同token仅诊断。 |
| B1-07 | 接受 | 认证忽略取消时等实际排水,无提前Dispose。 |
| B1-08 | 接受 | Get实际收尾后关闭,再按调用方顺序打开另一context;不声称有全局跨实例强制屏障。 |
| B1-09 | 接受 | 读取边界复查、同号新epoch/Owner/Cookie隔离。 |
| B1-10 | 接受 | workSettled与对外结果分离,失败/Close无互等。 |
| B1-11 | 接受 | 关闭幂等、先Close、取消重入、竞争及历史快照失去授权;断言计数差异见§3。 |
| B1-12 | 接受 | 清理失败保留任务/资源/原错误,取消异常仍排水。 |
| B1-13 | 接受 | 工厂及归属委托异常安全收尾,包括Prepared后异常。 |
| B1-14 | 接受 | pending只读,Unknown拒读不重试,恢复语义未变。 |
| B1-15 | 接受 | 不可变快照、默认地址和公开面边界、结构化产物脱敏。 |
| B1-16 | 接受 | 独立回归及同hash原Unity成功证据有效,范围未越界;历史偶发失败待查保留。 |
以上仅关闭准备内核这一限定阶段,全部运行证据为合成/离线及技术编译,不代表实际游戏初始化或正式存档切换通过。
## 5. 后续准入与保持不变的边界
- 下一步是4B2游戏加载与内存隔离的完整方案:业务档校验、空档阻塞、初始化副作用、OnInitData订阅时序、401/退出接线、旧业务对象隔离,以及本次P3-1'/P3-2'的调用合同。该方案尚未开始编制或审查,本次不编码。
- 4B3普通读写路由、4C消费流程、身份专项、tickets有界历史和正式场景数据边界仍须独立完成,不能由4B1关闭替代。
- 正式地址固定 `http://s101.local:18080/`;Unity使用CLI Loop,不使用UnitySkills;暂不打包。此次没有访问正式服、运行测试/Unity或提交Git。
- 历史“尚未找到实施复核”的检查点是当时核对结果,保留追溯,当前状态由本关闭裁决覆盖。