# 阶段4C2奖励面板点击穿透最小修复方案(待完整评审) 2026-09-24。依据:《阶段4C2第三次真实尝试与奖励确认记录-2026-09-24.md》及运行中实时探测实证。仅修复已实证UI缺陷;不改变奖励数据流、票据确认时序、Fault通道;未编码。 ## 缺陷与证据 - `FishingRewardPanel.cs:166-168`(组件初始化,KV模式):`canvasGroup.alpha=0; canvasGroup.blocksRaycasts=false; canvasGroup.interactable=false`——票据确认前面板不可见且不可点(设计要求"奖励Await前UI不可见")。 - `:31`(ConfirmKVRewardAsync内展示回调):`PresentReward(kvReward,()=>canvasGroup.alpha=1)`——**只恢复alpha**。 - 第三次真实运行(run 29520)实证:服务器侧奖励全链确认并展示(fishing-reward-confirmed→presented),但运行中探测 `FishingRewardPanel alpha=1 blocksRaycasts=False interactable=False`——面板可见而全部点击穿透,"收下"按钮(root_success/info/btn_play/btn_green→OnClickInHome)物理无法收到输入。0控制台错误(无异常,纯属性遗漏)。 ## 拟改动1(生产,唯一行为变化) `FishingRewardPanel.cs:31` 展示回调恢复全部三个交互属性: ```csharp PresentReward(kvReward,()=>{canvasGroup.alpha=1;canvasGroup.blocksRaycasts=true;canvasGroup.interactable=true;}); ``` 语义:**票据确认前不可见不可点(:167初始化不变);确认展示时同时恢复可见与可交互。** 不改:初始化、OnShow分段保存、ConfirmRewardAsync等待、kvPresentation(ApplySuccess)、OnDisable的Panel取消钩子(确认后仅置标志不Fault)、按钮回调本身。 ## 拟改动2(既有提取测试维护) - `PanelSlice.cs.txt`:shim `Canvas` 补 `blocksRaycasts/interactable` 字段(默认false模拟:167初始化后状态);切片内展示回调同步为与生产相同的恢复语句。 - `PanelTests.cs.txt`:现有断言保持;新增断言——pending期间 `blocksRaycasts==false && interactable==false`(钉住确认前不可点不变式);pending完成后 `blocksRaycasts==true && interactable==true`(红:现状切片只恢复alpha时失败)。 ## 验收 1. PanelTests红绿(修复前红、修复后绿);2. 固定验证45组171断言不回归;3. Editor/SERVICE_HOST双编译0错误;4. 静态diff:生产仅:31一行、切片/测试同步;其余受审文件字节不变(含controller-cancel修复后的FishingReward.cs/Validation hash)。真实"收下"点击闭环留待下一次用户授权运行。 ## 请独立评审裁决 1. 恢复三个属性是否完整(CanvasGroup还有interactableChildren等,本面板是否需要)? 2. 展示回调在PresentReward内同步执行(fishing-reward-presented审计与属性恢复的先后/原子性)是否有风险? 3. 红绿断言设计是否充分? 4. 是否批准这两处限定修改?