Files
ft/CodexOutput/upserver/阶段4C2引导准入最小补充方案-待评审-2026-09-24.md

6.6 KiB
Raw Blame History

阶段4C2引导准入最小补充方案(待完整评审)

2026-09-24。**仅申请调整4C2原方案的引导准入条件。尚未编码、未获批准,不是4C2关闭申请。**原奖励保存合同、旧许可边界、101/102授权和一次真实消费上限全部保持。

1. 问题与选择

真实102缺少7组特殊技能引导,原方案“所有相关引导完成”的门会拒绝所有普通捕鱼。七组均为None触发条件,GuideDataCenter.InspectTriggerGuide的switch默认continue;它们主要由 FishingEventData.TargetGuidance显式触发。不能只凭None就放行:原控制器StartFishSpSkill、ShowSpSkill、ShowFrostSkill、DamageProtectionEnd确实存在显式入口。

候选 裁量
继续要求全部11组完成 保持最保守,但现有专用档无法进入真实验收;不通过改测试档完成引导
放开所有未完成引导并依靠事后停机 不接受;可能先推进引导或写档,扩大副作用范围
仅无特殊技能的原生普通鱼,精确排除不可触达的7组 推荐;改Editor测试准入,保持自然选鱼、战斗及引导原行为,不改生产引导模块

不改鱼概率,不强制鱼ID,不重抽。自然抽到不满足条件的鱼就在消费前停止;不能付费失败后再跑第二次。Map102配置中存在满足条件的普通鱼(例如10211的FishSKillList为空、FishEscape.SpSkillID=-1),这只是静态可行性证据,实际每次仍检查当前运行对象。

2. 精确准入合同

在原PrepareFishingReward扣费前门内,以及原CheckRewardContext的S1/S2/S3检查点,追加/调整以下规则:

  1. 保留普通SubType1、非免费/重试/固定鱼/对战/礼包/活动游戏、已有备份Map键、巡游/额外收集/礼包/挑战/活动稳定性等原门。
  2. curDefine与curGroupDefine必须为空,guidanceGroupDefines完整可读;相关引导配置异常/未知直接拒绝。
  3. 相关引导默认仍要求完成。唯一允许未完成的名字固定为:FishSkill01、Pollution01、FishSkill02、FishSkill03、FishSkill04、Egyptian01、EasterFish01。每组运行时必须仍是None触发、首节点是FishingPanel_Advanced,且整个相关组配置与本次冻结的GuidanceConfig基线一致。新增组、改名、改触发条件或其他不一致均拒绝;不以“所有None”代替白名单。
  4. 使用当前选中的真实 curFishData,逐个检查 FishSKillList与FishEscape:对象/列表必须可读,所有SpSkillID均须≤0,且运行时TbFishSpSkill.GetOrDefault(id)均为空;有任何可解析特殊技能或正ID即拒绝。不忽略暂时不触发的HP/时间条件,不只检查第一个技能。
  5. fishingData.fishSpSkillData、superDashSpSkillData、dirtyStuckSpSkillData必须为空。当前控制器从同一curFishData的完整技能与逃跑项生成事件,不额外建立技能框架或改原技能流程。复核者必须确认没有其他路径注入特殊技能/触发上述7组;发现遗漏则退回此方案。
  6. 新条件在扣费前执行,现有CheckRewardContext继续核对原鱼/物品/地图/鱼竿/倍率及活动。奖励阶段的Guide通知仍原样发布一次,之后实际活跃引导必须仍为空;不能禁用通知、调用MarkGuideFinished/GMClearGuide或保存新引导记录。
  7. 因角色/条件动态变化失败时沿用原Fault/排水合同。已经消耗的费用不回滚、不重试、不补发;段外写/未知结果原规则不变。

配置完整性实现采用窄的固定基线:读取GuidanceConfig原资产hash,并比较当前相关11组的序列化投影(名字、触发条件/参数和完整节点字段)。不改资产;不新增公共配置验证框架。投影与源码字段由评审确认后固化在新增reward文件/固定host中,不能只比较组名而漏掉运行时节点改变。

3. 修改边界与顺序

批准后仅调整已新增的 Client/Assets/Scripts/Services/UserService.KVFishingReward.cs 的引导/普通鱼预检及 UserService.KVFishingRewardValidation.cs 固定测试;如验证需要,原7旧源码白名单的现有门调用处只能补同一检查,不改原引导或技能算法。新增资料只在KVFishingRewardTests。需要新增业务文件、改GuideDataCenter/事件算法、引入新服务器键或启用新活动必须再评审,不能由本补充概括授权。

  • R0:受审hash核对,独立结论逐条裁决,明确允许修改的两个新文件;裁决前当前严格门保持。
  • R1:保留当前真实102被拒绝证据;先测试新边界,再实现局部预检。
  • R2:补齐原C1/C2未完成验证、当前奖励host及实际入口回归、Editor/SERVICE_HOST编译;默认非Editor历史错误仍单列。
  • R3:更新真实运行允许字段矩阵、新只读备份、当前Tables/guide/活动/服务时间预检及CLI脚本,全部满足后才创建v3许可。
  • R4:按原C3执行一次新真实UI消费/收鱼/确认后展示/正常Quit/新进程恢复;最终独立实施复核才关闭4C2。

每个检查点更新开发日志、入口、状态、TODO;不创建自动付费循环。

4. 必测与否决条件

项 必须满足
七组当前缺失+普通无技能鱼 预检可过,GuideSaveDataDic/服务器GuideSaveDataNew不变,无引导推进
四个普通组任一未完成 扣费前拒绝
未知相关组、None改其他类型、节点/触发参数漂移 拒绝;不能靠磁盘资产hash掩盖运行时对象变化
任一普通技能项、最后一项或FishEscape带正SpSkillID/可解析技能 拒绝,原消费入口未被调用
当前三类特殊技能对象任一非空 拒绝
S1后、S2后、S3前活跃引导或技能状态变化 原动作失败,无第二次费用/奖励,不掩盖已经发生的部分写
正常原Guide事件 发布一次、实际开启/推进零次;不新建Guide键、不改原引导档
原奖励合同回归 鱼数量一次倍率、金币/次数原公式、最终main/Map/任务原票据;Pending无结果、Confirmed一次显示,取消与故障无重放

必须保留中间报告列出的未覆盖项和StorageError未定根因。若独立复核认为无法在此白名单证明7组不可触达,退回并保持待运行;不能选择“先跑一下看会不会触发”代替批准。

5. 评审材料

原方案及审查/裁决、阶段4C2实施进展与准入阻塞-2026-09-24.md、KVFishingRewardTests/offline-guide-gate-final.json、guide-details.json、真实备份及固定host拒绝证据。当前源码/资料基线冻结于 KVFishingRewardTests/guide-supplement-review-hashes.json;当前严格门仍应存在,不能把新方案当成已实施结果。