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

37 lines
3.7 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》。
## 一、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期间可能存在非退出性瞬时禁用"的残余风险提示保留为未实证事项,不在本次范围。