Files
ft/CodexOutput/upserver/阶段4C2收线取消缺陷修复实施记录-2026-09-24.md

35 lines
3.9 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》,10/10 hash基线)。缺陷实证:《阶段4C2第二次真实尝试与收线取消记录-2026-09-24.md》及用户提供的完整堆栈。
## 实施内容(完全在批准边界内)
1. **生产唯一改动**:`UserService.KVFishingReward.cs` CancelReward 在身份守卫后插入一行独立守卫:
`if(a.Ending && !a.Confirmed && ReferenceEquals(actor,a.Controller))return;`
字节级插入(CRLF保持),raw diff 精确为 `284a285` 一行新增,其余字节不变。语义:Ending已置位且票据未确认时,控制器自身的disable/destroy(FishEndCore→DestroyUI(FishingPanel)的正常拆除窗口)不构成放弃;战斗中(Ending=false)、确认后、Panel与Consumption.Actor路径均保持原语义。
2. **验证维护(P2-1/P3-1/P3-3落实)**:`UserService.KVFishingRewardValidation.cs` 在"confirmed-normal-cancel-no-second-exit"组后插入两组:
- `battle-controller-disable-still-cancels`:不置Ending,控制器disable→断言 Cancelled && !Ready && Faults==1(钉住保留的真实放弃保护);
- `ending-teardown-pre-confirm-not-cancel`:Batch()置Ending→两次控制器disable/destroy(模拟OnDisable+OnDestroy双钩子)→断言不取消不断言故障→ConfirmRewardAsync→PresentReward一次→断言确认并展示完成。
按harness既有模式直接置Ending(P3-3),未真调BeginRewardEnding。raw diff 为 `122a123,130` 八行新增。
3. 其余源码(FishingUpdateSys.cs、FishingRewardPanel.cs、KVGameplayLoop.cs等)零改动。
## 验证证据(全部基于最终字节)
| 门 | 结果 | 证据 |
|---|---|---|
| 红证据(修复前) | 新增主用例按预期失败:"Reward validation: ending teardown window is not a cancellation";其前的对照组通过 | diagnostic-impl/fix-red-validation.json(未应用守卫,仅验证文件改动) |
| 全量固定验证(修复后最终字节) | **success=true,45组171断言**(原43组168+新增2组3断言),两组新用例均passed | diagnostic-impl/fix-green-validation.json、fix-final-validation.json |
| Editor编译 | 0错误(三次:验证文件后/守卫后/守卫独立行后) | fix-validation-compile.json、fix-guard-compile.json、fix-final-compile.json |
| SERVICE_HOST编译 | exit0、0错误(注:一次exit1系工作目录错误CS2001找不到源文件,非代码错误;从Client目录重跑通过) | fix-final-service-host.log |
| 静态diff | 生产`284a285`一行;验证`122a123,130`八行;其余8项清单文件字节不变(8/8复核一致) | controller-cancel-fix-review-hashes.json基线+diagnostic-impl备份diff |
| 最终hash | UserService.KVFishingReward.cs `40EE14EB…93F9`(20093字节);UserService.KVFishingRewardValidation.cs `4CC10F91…F35`(42357字节) | diagnostic-impl/fix-final-hashes.json |
过程注记:守卫首次插入与`a.Cancelled=true;`同列一行,按裁决"一行守卫"要求改为独立行后重新编译并全量复验(45/171绿);一次验证调用恰逢编译域重载窗口("Unity server is starting"),等待后重试成功,非验证失败。
## 边界与下一步
- 本修复仅关闭"完成路径自拆除被误判为放弃"的缺陷;run 62216消耗的10点体力维持不补发/不退款。
- 审查者保留提示:Ending=false期间可能存在的非退出性瞬时禁用未实证、不在本次范围;如未来真实运行复现,另立方案。
- **修复后的真实收鱼奖励闭环(拉杆→收鱼→奖励保存→新进程恢复)仍需用户另行授权新进程运行。** 4C2/完整4C/G4未关闭。
- 固定 http://s101.local:18080/,Unity CLI Loop,不用UnitySkills、不打包。