3.9 KiB
3.9 KiB
阶段4C2收线取消缺陷修复实施记录
2026-09-24。实施人:接手主会话。依据:《阶段4C2收线取消缺陷修复审查裁决与实施批准-2026-09-24.md》(独立审查《阶段4C2收线取消缺陷修复方案独立审查-2026-09-24.md》,10/10 hash基线)。缺陷实证:《阶段4C2第二次真实尝试与收线取消记录-2026-09-24.md》及用户提供的完整堆栈。
实施内容(完全在批准边界内)
- 生产唯一改动:
UserService.KVFishingReward.csCancelReward 在身份守卫后插入一行独立守卫: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路径均保持原语义。 - 验证维护(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八行新增。
- 其余源码(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、不打包。