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

3.9 KiB
Raw Blame History

阶段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、不打包。