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

4.3 KiB
Raw Blame History

阶段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域名解析旧错误。