Files
ft/CodexOutput/upserver/阶段4C2收线取消缺陷修复审查裁决与实施批准-2026-09-24.md

3.7 KiB
Raw Blame History

阶段4C2收线取消缺陷修复审查裁决与实施批准

2026-09-24。裁决人:接手主会话。独立审查:《阶段4C2收线取消缺陷修复方案独立审查-2026-09-24.md》;方案:《阶段4C2收线取消缺陷最小修复方案-待评审-2026-09-24.md》。

一、hash复核

主会话独立复算 KVFishingRewardTests/controller-cancel-fix-review-hashes.json 全部10项(SHA256大写hex+字节数):10/10一致,与审查者结果一致。该清单同时作为实施后"未改动文件字节不变"判据基准。

二、逐条裁决

项 审查结论 主会话裁决
重点1:守卫精确覆盖且仅覆盖FishEndCore拆除窗口(四情形核验,DuelAct路径在准入处已拒) 成立 接受
重点2:真实放弃经CancelFishing(Consumption.Actor)/QuitAct排水/Panel三路径,守卫不放行任何真实退出 成立(全库grep闭合) 接受
重点3:OnDisable/OnDestroy双钩子均覆盖且均应覆盖;帧尾Destroy时序下Confirmed不可能先为true;假想晚于Confirm则与既有"confirmed-normal-cancel-no-second-exit"语义一致 成立 接受
重点4:既有43组168断言零期望变化;新增组红绿边界成立但缺Ending=false对照 成立 接受,P2-1采纳
重点5:守卫后面板绑定→确认→展示全链可走通 成立 接受
重点6:验收组合足够;hash清单可作字节不变判据 成立 接受,P3-2采纳
P2-1:必须补"battle-controller-disable-still-cancels"对照组(Ending=false控制器disable仍Cancelled+Fault+Faults==1) 应修 采纳为实施条件,与主用例同批落盘
P3-1:绿用例补第二次CancelReward(Controller,"controller destroyed")模拟OnDestroy钩子 建议 采纳
P3-2:实施记录固化改后两文件SHA256并归档红测失败result 建议 采纳
P3-3:harness按Batch()模式直接置Ending,不真调BeginRewardEnding(其CheckRewardContext在harness下会NRE) 建议 采纳,按既有Batch()模式实现
P3-4:方案行号漂移说明;关键锚点与hash绑定为准 说明 接受,以hash为准

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

  1. 生产唯一行为改动:UserService.KVFishingReward.cs CancelReward 在身份守卫后、a.Cancelled=true 前插入一行:if(a.Ending && !a.Confirmed && ReferenceEquals(actor,a.Controller))return;(匹配文件紧凑风格;字节级插入保持行尾)。
  2. 验证维护:UserService.KVFishingRewardValidation.cs 在"confirmed-normal-cancel-no-second-exit"组后插入两组:
    • battle-controller-disable-still-cancels(P2-1对照:不置Ending,控制器disable→Cancelled && !Ready && Faults==1);
    • ending-teardown-pre-confirm-not-cancel(主用例:Batch()置Ending→两次控制器disable/destroy(P3-1)→不取消不断言故障→ConfirmRewardAsync→PresentReward一次)。
  3. 其余文件(FishingUpdateSys.cs、FishingRewardPanel.cs、KVGameplayLoop.cs等)字节不变,以审查hash清单核对。
  4. 验收:先编辑验证文件并编译,在未应用生产守卫前运行固定验证取得红证据(新增主用例失败);应用守卫、编译后重跑全量固定验证通过(既有43组168+新增2组);Editor编译0错误;SERVICE_HOST编译exit0;静态diff仅两文件预期差异。

四、边界声明

修复不构成4C2关闭;真实收鱼闭环与新进程恢复需用户另行授权新运行。run 62216消耗的10点体力维持不补发。审查者对"Ending=false期间可能存在非退出性瞬时禁用"的残余风险提示保留为未实证事项,不在本次范围。