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

6.8 KiB
Raw Blame History

阶段4B1实施复核裁决与关闭

日期:2026-09-23。主会话核对时间:17:29 +08:00。

依据:外部独立实施复核、实施批准、交付矩阵。用户转述审核者意见并要求确认;本轮确认实施复核已经落盘,完成主会话应承担的版本核对、逐条裁决及共享状态更新。审核者无需修改共享文档。

最终裁决:接受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。
  • 历史“尚未找到实施复核”的检查点是当时核对结果,保留追溯,当前状态由本关闭裁决覆盖。