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

43 lines
4.6 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.
# 阶段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域名解析旧错误)不变。