Files
ft/CodexOutput/upserver/阶段4C2奖励面板点击穿透最小修复方案-待评审-2026-09-24.md

36 lines
2.8 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》及运行中实时探测实证。仅修复已实证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. 是否批准这两处限定修改?