Files
ft/CodexOutput/upserver/阶段4C2扣费前拦截诊断实施记录-2026-09-24.md

38 lines
4.3 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。实施人:接手主会话。依据:《阶段4C2扣费前拦截诊断审查裁决与实施批准-2026-09-24.md》(独立审查见《阶段4C2扣费前拦截诊断方案独立审查-2026-09-24.md》,18/18 hash基线)。本记录为批准范围内的限定实施与验证证据。
## 实施内容(完全在批准边界内)
1. **生产源码唯一改动**:`Client/Assets/Scripts/GampPlay/FishingB/FishingBehaviorB.cs` 第51行Stop(...)字符串实参。if谓词(49~50行)、throw/Stop结构、Stop顺序、其余门文字均未动。新消息保留原文案前缀,追加六字段:fishItem.ID、fishItem.SubType、curFishData.ID、IsFree、IsRetry、IsDuel;null按P2-1显式三元输出"null"(C# 9不允许插值孔内双引号,采用字符串拼接实现)。
2. **既有测试维护(P2-2)**:`KVFishingRewardTests/ConsumeControlSlice.cs.txt` 同步同一throw表达式;`ConsumeControlTests.cs.txt` shim新增`Item{ID=1,SubType=1}`类,`FishingData.fishItem`由`object`收紧为`Item`(已核测试唯一赋值点为`fishItem=null`,兼容)。
3. 未新增任何日志点、框架、源码文件、await、事件、第二个Fault、局部变量语句;未放宽准入。
## 验证证据(四项验收条件全部满足)
| 条件 | 结果 | 证据 |
|---|---|---|
| 静态diff(P3-1判据) | **通过**:raw diff仅`51c51`一行;原文件混合行尾(CRLF+LF)完整保留(Edit工具首次写入曾整文件统一CRLF,发现后已恢复备份并改用字节级替换) | `diagnostic-impl/FishingBehaviorB.before.cs`(改动前备份)与当前文件diff;`file`确认当前仍为CRLF+LF混合 |
| 既有消费入口提取测试 | **通过**:`PASS 27 assertions`,七条件前置门(free/retry/duel/pack/special/missing-fish/missing-item)逐项`Calls==0`保持,新消息表达式编译并执行 | dotnet run ConsumeControlTests.csproj 输出 |
| SERVICE_HOST编译 | **通过**:exit 0,0 error(仅既有警告类别) | `diagnostic-impl/service-host-compile.log`(Unity Roslyn csc.dll -noconfig @service-host.rsp,cwd=Client) |
| Unity Editor编译 | **通过**:uloop compile Success=true/ErrorCount=0;首次执行为实际增量编译(输出仅既有警告,无error),复核调用0/0 | `diagnostic-impl/editor-compile.json`;uloop连接Unity 42620(CLI Loop服务运行中) |
## hash记录
- 改动前基线:FishingBehaviorB.cs `0A76743E…9BE8`(99010字节,与审查清单一致)。
- 改动后:FishingBehaviorB.cs `6581E2EF316B764F0E7B984B4A8040B93087A467FA374AA0E5E979D356580A04`(99384字节,+374字节即诊断文字)。
- 本批改动文件hash快照:`diagnostic-impl/implementation-hashes.json`。审查清单`preconsume-diagnostic-review-hashes.json`保持为改动前历史基线,其中FishingBehaviorB.cs一项因本批准改动自然失效,其余17项不受影响。
## 按裁决采纳的语义说明(P3-2/P3-3/P3-4)
- 六字段报告的是**状态全集**:可推出七个谓词各自真值(IsGeneralFish⟺SubType==1;IsPackItemFish⟺SubType∈{21,22};对象null⟺对应ID输出"null"),但不标识哪个析取项最先短路;SubType=21/22时条件2与条件6必然同真。
- 该门位于第48行`ClaimFishingConsumption`(内存claim Consuming=true,非扣费、无审计事件)之后;"扣费前拦截"表述成立,复述顺序时注明此内存claim先于门。
- 首次尝试的两份102备份SHA256不同仅因顶层`at`时间戳,45键逐值全同(独立审查已ConvertFrom-Json逐值验证),hash差异不是数据变化。
## 边界与下一步
- **本诊断补充不构成根因修复**:尚无新的真实运行,七个条件中哪项触发仍未观测。不构成4C2验收,4C2/完整4C/G4维持未关闭。
- 下一次真实运行需:用户明确授权一次尝试、新Unity进程(或经核对的可复用进程)、新备份、核对实际操作范围;不自动连续付费、不重导102、不删claimed。
- 运行后读到的六字段值将直接判定触发条件;若证明是不支持类型自然命中(如抽中特殊鱼),保留原门并归档;若证明实现错误,另按已审范围定位修复,不改概率/鱼数据/输入逻辑。
- 既有保留限制不变:默认非Editor历史_cheatingScore编译错误、偶发StorageError根因未定、PF域名解析旧错误。