Files
ft/CodexOutput/upserver/阶段4C2扣费前拦截诊断审查裁决与实施批准-2026-09-24.md

4.6 KiB
Raw Blame History

阶段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键逐值全同,已在审查报告记录,不误读为数据变化

三、实施批准(限定边界)

批准实施,且仅限以下范围:

  1. 生产源码唯一改动: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顺序、成功分支及其余门文字均不变。
  2. 既有测试维护:ConsumeControlSlice.cs.txt同步、ConsumeControlTests.cs.txt的shim类型收紧。
  3. 不新增:日志点、框架、源码文件、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域名解析旧错误)不变。