4.6 KiB
4.6 KiB
阶段4C2扣费前拦截诊断审查裁决与实施批准
2026-09-24。裁决人:接手主会话(用户授权接手PlayFab替换开发后的当前会话)。审查对象:《阶段4C2扣费前拦截诊断最小方案-待评审-2026-09-24.md》;独立审查报告:《阶段4C2扣费前拦截诊断方案独立审查-2026-09-24.md》。
一、hash复核
主会话独立复算 KVFishingRewardTests/preconsume-diagnostic-review-hashes.json 全部18项(python hashlib SHA256大写hex+字节数,绝对路径逐文件):18/18一致,0项不一致。与独立审查者Get-FileHash/sha256sum双重验证结果一致。受审基线成立,本轮裁决基于该冻结状态。
二、逐条裁决
| 项 | 审查结论 | 主会话裁决 |
|---|---|---|
| 问题1:证据只能定位到合并门,不能确定具体谓词 | 同意 | 接受。与首次真实尝试记录一致,维持"未定位根因"表述 |
| 问题2:六字段足够唯一解释七条件,不需新增状态 | 同意(含SubType等价表) | 接受。采纳等价关系:IsGeneralFish()⟺fishItem.SubType==1;IsPackItemFish()⟺SubType∈{21,22};fishItem/curFishData为null⟺对应ID输出null标记 |
| 问题3:仅改拒绝消息保持时序/副作用,存在null文本陷阱 | 同意 | 接受。P2-1采纳,见下 |
| 问题4:验收组合足够、批准范围正确(有条件批准) | 同意 | 接受有条件批准,条件见第三节 |
| P2-1:插值null输出空串,必须显式判null | 应修 | 采纳。并补充实现约束:Unity 2022.3为C# 9,插值孔内不允许双引号,故采用字符串拼接+显式三元判null(形如x==null?"null":x.ID.ToString()),禁止依赖?.插值的隐式空串;消息保留原文案前缀保证检索连续性 |
| P2-2:提取测试slice与shim须同步并重跑 | 应修 | 采纳。ConsumeControlSlice.cs.txt同步改后源码;ConsumeControlTests.cs.txt的shim FishingData.fishItem由object改为带int ID/int SubType的Item shim类(已核:测试仅fishItem=null一处赋值,类型收紧无破坏);重跑ConsumeControlTests全量断言。属既有测试维护,不违反"不新建框架" |
| P3-1:静态diff判据明确化 | 建议 | 采纳。判据固定为:生产源码仅FishingBehaviorB.cs第51行Stop字符串实参变化;第49~50行谓词与该文件其余部分字节级不变;无其他生产文件改动 |
| P3-2:注明诊断语义(状态全集,非最先短路项) | 建议 | 采纳,写入实施记录:SubType=21/22时条件2与条件6必然同真,六字段可推出各谓词真值但不标识短路顺序 |
| P3-3:注明ClaimFishingConsumption内存claim先于门 | 建议 | 采纳。"扣费前拦截"表述成立;门前的内存claim(Consuming=true,非扣费、无审计事件)在文档复述时注明 |
| P3-4:备份hash差异说明 | 建议 | 采纳。两份102备份SHA256不同仅因顶层at时间戳,45键逐值全同,已在审查报告记录,不误读为数据变化 |
三、实施批准(限定边界)
批准实施,且仅限以下范围:
- 生产源码唯一改动:
Client/Assets/Scripts/GampPlay/FishingB/FishingBehaviorB.cs第51行Stop(...)的字符串实参——替换为包含六字段(fishItem.ID、fishItem.SubType、curFishData.ID、IsFree、IsRetry、IsDuel)的诊断文字,null显式输出"null"(按P2-1拼接实现)。if谓词(49~50行)、throw/Stop结构、Stop顺序、成功分支及其余门文字均不变。 - 既有测试维护:ConsumeControlSlice.cs.txt同步、ConsumeControlTests.cs.txt的shim类型收紧。
- 不新增:日志点、框架、源码文件、await、事件、第二个Fault、局部变量语句;不放宽准入;不动v1/v2/v3权限、票据、奖励算法、配置。
验收条件(全部满足方可宣称本次诊断改动完成):
- 静态diff符合P3-1判据;
- ConsumeControlTests重跑全过(含七条件逐项
Calls==0前置门断言); - SERVICE_HOST编译exit 0;
- Unity Editor编译0错误。若当前Unity CLI Loop服务未启动,Editor编译证据待用户启动Server后补验;补验完成前不宣称"双编译通过"。
四、边界声明
- 本裁决批准的是诊断可观察性补充,不构成根因修复,不构成4C2验收,不构成任何真实运行授权。
- 下一次真实运行仍需:新Unity进程、新备份、核对实际操作范围,并向用户明确一次尝试;不自动连续付费。
- 4C2/完整4C/G4维持未关闭;既有保留限制(默认非Editor历史_cheatingScore错误、StorageError根因未定、PF域名解析旧错误)不变。