3.7 KiB
3.7 KiB
阶段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为准 |
三、实施批准(限定边界)
- 生产唯一行为改动:
UserService.KVFishingReward.csCancelReward 在身份守卫后、a.Cancelled=true前插入一行:if(a.Ending && !a.Confirmed && ReferenceEquals(actor,a.Controller))return;(匹配文件紧凑风格;字节级插入保持行尾)。 - 验证维护:
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一次)。
- 其余文件(FishingUpdateSys.cs、FishingRewardPanel.cs、KVGameplayLoop.cs等)字节不变,以审查hash清单核对。
- 验收:先编辑验证文件并编译,在未应用生产守卫前运行固定验证取得红证据(新增主用例失败);应用守卫、编译后重跑全量固定验证通过(既有43组168+新增2组);Editor编译0错误;SERVICE_HOST编译exit0;静态diff仅两文件预期差异。
四、边界声明
修复不构成4C2关闭;真实收鱼闭环与新进程恢复需用户另行授权新运行。run 62216消耗的10点体力维持不补发。审查者对"Ending=false期间可能存在非退出性瞬时禁用"的残余风险提示保留为未实证事项,不在本次范围。