Files
gplan-2/reports/需求卡片-改写族孤儿机制与退役名清退批-2026-11-05.md
T

33 KiB
Raw Blame History

需求卡片·改写族孤儿机制与退役名清退批(2026-11-05)

来源:待办清单条目「damage_controller 按序改写族——内容孤儿机制与退役名注释层」(2026-11-04 登记,来源=会话提及)。 唯一事实源:design/gdd/systems/跨局循环/锻造工坊.md v0.13 §满级特效扩展位(本期已按本批口径订正)+本卡「现状事实」所列代码读数;机制处置与注释口径的裁决记录=2026-11-05 会话,用户裁「只要有问题的都要改」,退役内容名一律清退、零现役注册的改写分支一律摘除。 验收档:中(一处玩家可见明细行文案换代+若干不可达分支摘除;不写存档、不改乘区公式与数值表)。 估时:2.25–2.75 个工作日(T0 0.25+T1 0.5+T2 0.5+T3 0.5–1+T4 0.25+T5 0.25 加总)。切分预案:T3 注释面若单轮改不完,按文件切成 T3a(core 八件)/T3b(schemas+sim+tests),两张各自收尾,不并进 T1。


1 目标与完成定义

做完这五件事算完:

  1. 主角先手攻击的四个改写分支摘除——它们零数据表行注册,游戏里从不执行。
  2. 连带收窄两处引擎词表:EFFECT_KINDS 摘 spike、DO_KEYS 摘 trade_hit/trade_atk,并同批补负域探针取证。
  3. game/ 注释面退役内容名清零(42 行/13 文件),只换名不换职责陈述。
  4. 三处挂退役件名的玩家可见文案改中性机制文案(其中一处今天可达),一处 sim 死匹配删除。
  5. 产出物两份写齐(实现报告+反哺点清单),代码域闸全绿,改前改后对拍逐位一致。

判据总口径:本批除第 4 项文案外全部是非行为改动——零现役注册行=分支不可达=删了也不改变任何一帧输出。这条不靠感觉,T0 用三条 grep 读数坐实。

2 设计事实源

  • 设计线闭合凭据:design/gdd/systems/跨局循环/锻造工坊.md v0.13(2026-11-05)§满级特效扩展位——本批订正该节四处陈述,其中重甲反震与长枪先手连击两条候选的代价档由「零新代码」改判「需新代码」,效果类型闭集词数不再抄进文档。
  • 机制处置裁决:本卡所属待办条目「实况」段所载 2026-11-05 会话裁决。
  • 代码现状取证:本卡第 3 节全部带 文件:行号,无一条凭记忆。

3 现状事实

3.1 四个改写分支零注册(本批要摘的)

分支 代码位置 触发条件 现役注册行 退役名注释
命中交换 game/core/damage_controller.gd:297-302(命中侧)、:351-353(增伤侧) kind=modify_ticket 且载荷带 trade_hit/trade_atk 0 行(game/data/tables/ 全域零命中) :285-286、:341、:350(矿工重锤)
免掷恒折扣 :305-309 kind=modify_ticket 且 mode=armor_rewrite 0 行 :287(专注)
满层必中与倍乘 :310-313(必中置位)、:368-372(倍乘) kind=modify_ticket 且 mode=spike 0 行 :288(厚积薄发,行内含 spike)、:342 与 :368
轻甲折扣档改善 :320-323 +私有函数 _discount_shift_up(:623) kind=modify_ticket 且 mode=discount_shift 0 行 :288、:622(猎弱本能)

穿线键 spike_ready 出现在 :282、:310、:313、:325、:369 五处,随分支一起消失。

克制点数面(mode=clamp_bonus)有现役一行注册:game/data/tables/feats.tres:853-857 淬毒刃纹(kind=modify_ticket/mode=clamp_bonus/delta=2)——不摘,_ctx_clamp_delta(:333-338)与 clamp_check 发射点(:315)保持原样。

3.2 两处词表在册

  • game/core/effect_engine.gd:30 EFFECT_KINDS 含 "spike";该常量实数 32 词(本卡现读,摘后 31)。全仓按 kind == "spike" 派发效果的代码不存在——spike 只在词表与注释里在册(另两处::30 词表、:452 「任意真族(任一命中即生效):spawn_spell、spike」注释)。
  • game/core/effect_engine.gd:82 DO_KEYS(现 26 键)含 "trade_atk", "trade_hit";执法点在 :417(if not DO_KEYS.has(String(k)) 出域即拒绝)。摘后 24 键。
  • attack_segments 不属本批:它已随架构审查整改甲案整链退役(grep -r attack_segments game/ 仅命中 game/tests/unit/data_config/effect_kind_retired_test.gd:3 的注释),本批只把它在 GDD 里的错句一并订正(见第 6 节)。

3.3 注释面退役名全仓扫描读数

名单来源=design/content-archive/道具退役素材库.md 两张表的「原名」列,共 41 名;减去表内仍作为现役 display_name 出现的 1 名(淬毒刃纹)=40 名。扫 game/ 全域 .gd/.tres/.md 命中 53 行/13 文件,无一条落在 .tres 数据表里。

文件 注释面行号(本批改) 字面量行号 字面量处置
game/core/damage_controller.gd 109、138、285、287、288、328、341、350、394、424、622 — —
game/core/reward_grant.gd 2、130、183、221 189、226 两处都改中性文案(T4)
game/core/settlement/grant_segment.gd 127、128、232、240、265、279、283、351、362、373 166 玩家可见标签改中性(T4)
game/core/reward_roller.gd 1、41、46、86 — —
game/core/effect_engine.gd 64、65、157、452 — 452 随 T1 摘词改写
game/core/battle_orchestrator.gd 258、538 — —
game/core/action_economy.gd 82 — —
game/data/schemas/treasure_item_table.gd 20、122 — —
game/sim/adventure_monte_carlo.gd 75 — —
game/sim/level_autoplay.gd 415 421 死匹配删除(T4);415 随删该处注释
game/tests/unit/core/meta_progression_forge_test.gd 677、690 694、697、699、700 断言串随 T4 文案换代(申报见第 8 节)
game/tests/unit/battle_settlement/variant_placement_test.gd 239 — —
game/tests/unit/core/treasure_items_test.gd — 31、33、35 不动——StubDB 自造夹具名,不宣称内容现役

字面量合计 11 行:本批动 8 行(三文件的四处文案/死串=reward_grant:189/:226、grant_segment:166、level_autoplay:421,加锻造测试四处断言串 694/697/699/700),其余 3 行夹具名保留。注释面 42 行全改,另加 effect_engine.gd:452 一句随摘词改写=本批改写 43 处。

3.4 玩家可见文案三处

  • game/core/reward_grant.gd:226:mine_hit 减半路径发射的结算明细行标签——"惊巢反制——危险格挖掘惩罚减半(%d→%d)" % [...],载荷 "effect_id": "nest_counter"。惊巢反制 与 nest_counter 都是退役件名(素材库表一 :18),而这行文案是玩家能看见的,且这条路径今天可达(有现役锻造锋行驱动——meta_progression_forge_test.gd:694-700 正在钉它)。
  • game/core/reward_grant.gd:189:_cell_removal_open 空集拒绝 reason——"爆破工兵包:3×3 区域内无可移除危险格(须未揭示且未封印)"。该通道 cell_removal 在册(game/data/schemas/treasure_item_table.gd:26、消费点 reward_grant.gd:160-161)但零现役数据行(game/data/ 全域零命中),所以 reason 今天不可达;文案仍挂退役件名。通道本体不进本批(见第 5 节),本批只清文案。
  • game/core/settlement/grant_segment.gd:166:mine_hit 订阅中 kind=open_ticket 且 channel="reflect" 的行开单,明细标签硬编码 "惊巢反制·反弹",归因串 "attune_nest_counter"。"reflect" 在 game/data/tables/ 二十一张表逐张 grep 零命中 → 今天不可达,与 :189 同类问题(标签挂退役件名)。reflect 渠道本体不进本批(见第 5 节),本批只清标签与归因串。

3.5 一处 sim 死匹配

game/sim/level_autoplay.gd:421 用 String(row.get("display_name", "")).contains("雷区图谱") 捕高光事件,:415 是配套注释。雷区图谱 零现役行(game/data/ 零命中)→ 该条件恒 false。

3.6 既有测试面读数(决定本批要不要改测试)

  • 四个 mode 与两个键在 game/tests/、game/probe/、game/sim/ 零命中(grep -rn "trade_hit\|trade_atk\|armor_rewrite\|discount_shift\|spike" game/tests/ game/probe/ game/sim/ 空)。摘分支不动任何既有断言。
  • armor_roll 有既有断言:game/tests/unit/battle_settlement/roll_multiplier_test.gd:125 _smoke_armor_roll()——它测的是护甲骰与折扣读数,不是订阅消费。所以掷点面 :293 _armor_roll() 与发射调用 :296 _fx_hits("armor_roll", ...) 都保留(armor_roll 在 effect_engine.gd:13 事件词表在册),只删 :305-309 消费环,ar_hits 局部变量随删。

4 设计契约

  • 🔴 契约 1|零现役注册坐实才许摘:T0 三条 grep 读数必须全为零——game/data/tables/ 内 spike/armor_rewrite/discount_shift/trade_hit/trade_atk 各 0 行、tree_rules 面 0 行、effect_kinds 面 cell_removal 0 行(后者只作记录,本批不摘通道)。任一数非零=该分支可达=停卡 L3 呈报,禁直接摘。
  • 🔴 契约 2|注释改写只换名不换职责:42 行注释逐处保留「这段在做什么、按什么序、为什么这样取」的陈述,把退役件名替换成机制语言。整行删除、成片缩写、或删注释换 gdstyle 行数绿=违规(先例:宿主行数压至 999 时「禁删注释凑行数红线未碰」)。
  • 🔴 契约 3|文案换代禁碰数值与发射序::226 只改标签字符串,[int(row.power), half] 取值、emit_cb.call 参数位序、"effect_id" 载荷键一律不动;:189 只改 reason 前缀,{"ok": false} 形态不动。
  • 🔴 契约 4|词表收窄与负域探针同批:摘 EFFECT_KINDS 的 spike 与 DO_KEYS 的两键,必须同批落 T2 探针;只摘词不取证=本卡未完成。
  • 🔴 契约 5|禁留空壳:spike_ready ctx 键、ar_hits/shift/trade_hit 局部变量、_discount_shift_up 函数随分支即删,禁保留空返回、别名或「以后可能用」的成员凑机检文本。
  • 🔴 契约 6|实现批禁写文档:design/ 整个目录、待办清单.md、体验验证清单.md、game/tests/README.md 一律不写;要改的文档句子全进第 6 节与反哺点清单。
  • 🔴 契约 7|零新增数值:本批不引入任何玩法数值,不改 .tres 表值。MC 与 verifier 零跑(无数值改动零跑)。

5 范围边界

做:3.1 四段分支+穿线键+_discount_shift_up;3.2 两处词表摘名;3.3 注释面 43 处;3.4 三处文案;3.5 一处 sim 死匹配;3.6 消费环 armor_rewrite 删而发射点留;T2 负域探针;T4 断言串随动。

不做,去向写明:

不收件面 为什么不做 去向
EVENTS 零订阅词普查(含 armor_roll 发射点去留) 与「改写分支」不同轴,是事件词表整体普查 待办清单本批同登条目「效果通道与事件词的零现役普查」
effect_kinds/渠道零现役清退(cell_removal、mine_hit_halve、open_ticket 的 channel="reflect" 行族) 通道在册、有消费点、只缺数据行——判「删通道」要连同 schema 词、归因标识与拒绝文案整体裁 同上条目,与 iter52 孤儿函数清退批同族
GDD 其余仍提退役内容名的句子(systems/冒险循环/奇物.md、systems/战斗循环/地图战斗资源.md、术语表.md、00-游戏概念.md、03-内容规模.md) 属文档面用语,不属代码批 反哺点清单,文档批落文
game/tests/unit/core/treasure_items_test.gd:31/33/35 三个退役件名夹具 StubDB 自造行,不宣称该件现役;改名动的是测试面 无——保留
attack_segments 词表补摘 已随甲案退役,本批只在 GDD 订正错句 无——已完成
结算明细标签是否入表(文案硬编码在 :226) 涉及「呈现文案归属」规范裁决,不属本卡 反哺点清单,文档批裁

6 关联文档同步面

文档 关联点 同步义务
design/gdd/systems/跨局循环/锻造工坊.md §满级特效扩展位 闭集词数句、长枪候选代价档、重甲候选代价档、七条前提句 已在本批前置文档段落文(v0.13);实现批禁再写该文件
design/gdd/systems/跨局循环/锻造工坊.md 同节 重甲反震候选的实现前提:反弹需新开消费点(本批摘 spike 后彻底无位) 设计权威文档,实现批不直改;写入 reports/<迭代号>-反哺点-<日期>.md,用户裁后归文档批
design/gdd/systems/战斗循环/增益状态.md/伤害与护甲.md 若其中叙述「改写族四拍」的句子里挂了退役件名 机械面核对;有则列反哺点,无则实现报告记「零命中」
game/tests/README.md 能力表 本批无新增能力、无能力退役;T2 探针挂既有行「加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域/效果类型出域」(:177,代表用例含 effect_kind_retired_test.gd:_assert_rejected) 无改动义务;批末核对表上名字与落地一致
待办清单.md/roadmap.md 条目状态与迭代行 由写卡段与编排段推进,实现批禁写

7 任务卡

文件结构图

文件 职责 改动性质
game/core/damage_controller.gd 主角/敌方伤害结算编排 非行为改动(摘不可达分支+注释改写)→ 对照表 R1、R4
game/core/effect_engine.gd 效果词表与行校验 非行为改动(摘词两枚+注释改写)→ R2、R3、R4
game/tests/unit/data_config/effect_kind_retired_test.gd 负域加载探针宿主 新增两个探针常量与两次调用(非行为改动的取证面)→ R2、R3
game/core/reward_grant.gd 奖励与格面兑付 行为改动(一处明细行标签+一处拒绝 reason 文案)→ R5、R6
game/tests/unit/core/meta_progression_forge_test.gd 元进度/锻造断言宿主 断言串随 R5 换代(申报见第 8 节)→ R5
game/sim/level_autoplay.gd autoplay 驱动件 非行为改动(删恒 false 匹配+注释)→ R4、R8
game/core/settlement/grant_segment.gd 授予段结算编排 行为改动(:166 明细标签文本)→ R7;注释面 10 行改写 → R4
game/core/reward_roller.gd、game/core/battle_orchestrator.gd、game/core/action_economy.gd、game/data/schemas/treasure_item_table.gd、game/sim/adventure_monte_carlo.gd、game/tests/unit/battle_settlement/variant_placement_test.gd 注释面 非行为改动(注释改写)→ R4

零新增文件、零新增函数、零新增数据件;唯一的"新增"是既有套件内的两个探针常量。

T0 基线与读数对账(0.25 工作日)

取用:无。产出:改前基线三件——对拍转储、S13 键读数、契约 1 三条 grep 读数。

  • 跑契约 1 三条 grep,逐条把命中数写进实现报告 T0 节(期望全 0,除 feats.tres:854 的 clamp_bonus 一行作对照记录)。
  • 读 tools/gdstyle_baseline.txt 内 damage_controller.gd/effect_engine.gd/reward_grant.gd/level_autoplay.gd 现登记键,抄进实现报告「存量触面」表(第 14 节要求只降不升)。
  • 采改前对拍基线:game/sim/dump_battle.gd 六组(L{1,2}×S{42,779401,779501},stdout 单流转储,先例=拆件批 T6 同参)。
  • 采改前明细行读数:meta_progression_forge_test.gd:_smoke_tree_rules 现断言串的完整文本抄进实现报告(T4 换代后的比对基准)。

T1 摘四段死分支与穿线键(0.5 工作日)

取用:T0 的契约 1 读数全零。产出:_ctx_rewrites 与 _hero_attack_ctx 的收窄返回键集(T2、T4 引用)。

  • damage_controller.gd:删 :297-302(命中侧交换)、:351-353(增伤侧交换)、:305-309(免掷覆盖)、:310-313 置位块+:368-372(spike 倍乘)、:320-323(移档调用)与 :623 函数 _discount_shift_up(discount: int, shift: int) -> int。
  • 同文件:删 clamp_hits 收集后残留的 shift 局部变量、ar_hits 局部变量(发射调用 :296 保留但不接收返回值,见 3.6);spike_ready 键从 :282、:325 返回字典与 :369 消费处一并去除。
  • 收窄后的签名与键集照此,不得自创:
    • _ctx_rewrites(t: Dictionary, target: Dictionary, armor: String, matchup: String) -> Dictionary 返回键集 = {roll_read, threshold, crit, discount, clamp_hits}。
    • _hero_attack_ctx(t: Dictionary) -> Dictionary 返回键集 = 现键集去掉 spike_ready(:278-282 其余键逐字保留)。
    • _hero_attack_base_value(t: Dictionary, ctx: Dictionary) -> float 签名不变,体内删两拍。
  • 头注与分节注释随删随改(:249-254、:264-266、:285-290、:341-342、:368):改写后的四拍叙事只剩「掷点折扣读数 → 克制点数」两拍,注释口径同步收窄(这条与 T3 同判据,禁再挂退役件名)。
  • 单元侧适配:game/tests/unit/battle_settlement/damage_controller_test.gd、roll_multiplier_test.gd、game/tests/unit/contracts/system_contracts_test.gd 跑一遍;3.6 已证零命中,若真出红,只改装配不改进判据,并把改动写进实现报告「实现决定记录」。

T2 词表收窄与负域探针(0.5 工作日)

取用:T1 摘除后的 damage_controller.gd 键集(探针只需构造表行,不引用控制器内部键)。产出:effect_kind_retired_test.gd 两枚新探针常量 _assert_rejected 新断言名(R2/R3 引用)。

  • effect_engine.gd:30 摘出 "spike"(EFFECT_KINDS 实数 32→31);:82 摘出 "trade_atk", "trade_hit"(DO_KEYS 19→17 项,实数以摘后 grep 行内计数为准)。
  • 同文件 :452 组合规则注释改为只列现役:「任意真族(任一命中即生效):spawn_spell。」;:64/:65/:157 注释改写并入 T3 判据面。
  • game/tests/unit/data_config/effect_kind_retired_test.gd:按既有形态新增两枚探针——PROBE_SPIKE_MODE(注入 {"kind": "modify_ticket", "mode": "spike"} 行的夹具目录)与 PROBE_TRADE_KEY(注入带 trade_hit 键的 do 字典)。各建一个 user:// 夹具目录常量,沿用 _inject(dir, probe) 与 _assert_rejected 既有函数,不新建套件文件。
  • 断言名与尾缀:_assert_rejected 内新增两条检查——"词表闭面:kind=spike 出域拒绝" 与 "do 键闭面:trade_hit 出域拒绝";该套件已在 game/tests/run_all.gd:195 负面清单在册(expect=1、negative=true),本步只加探针,不动在册条目与退出码判据。
  • 独立验证先行:只跑该套件(godot --headless --path game --script res://tests/unit/data_config/effect_kind_retired_test.gd)出绿,再并入全套。

T3 注释面退役名改写(0.5–1 工作日,可切 T3a/T3b)

取用:3.3 表逐行清单。产出:注释面 grep 零命中读数(对照表 R4)。

  • 名单唯一来源=design/content-archive/道具退役素材库.md 两张表的「原名」列,现场解析;禁把 40 个名字复制成第二份清单文件(第 12 节唯一面)。
  • 逐处改写口径=「这段代码做什么、按什么序、取值从哪来」,内容名换成机制名。示例(禁照抄字句,只照抄口径):
    • :285 「第一拍矿工重锤命中交换」→ 「命中判定减成换攻击增伤的交换位(现役零注册,随本批摘除后此句消亡)」——摘除后该注释整段随分支删除,改写只适用于 T1 未摘的 11 个文件行。
    • reward_roller.gd:1 「偏运硬币/board_skew 两路投影」→ 「订阅加权与 board_skew 两路投影」。
    • grant_segment.gd:232 「完美布防=本轮封印批全中」→ 「封印全中倍率=本轮 hit>0 且 miss==0 时」。
  • 判据 grep:改写后重跑 3.3 那条扫描,注释面命中数必须为 0;读数贴进实现报告。
  • 不碰第 5 节点名保留的三行夹具串。

T4 玩家可见文案与死匹配(0.25 工作日)

取用:T0 采到的改前明细行读数。产出:新标签文本(R5/R6 引用)。

  • reward_grant.gd:226 标签 → "挖掘惩罚减半(%d→%d)";同处归因串 "effect_id": "nest_counter" → "nest_halve"(依代码规范用语纪律清零退役名;该串全仓仅此一处、不进存档不读表,改动面=本行+测试匹配串随动)。
  • 同文件 :183 与 :221 注释随 T3 口径改写;:189 reason → "中立移除:3×3 区域内无可移除危险格(须未揭示且未封印)"。
  • game/core/settlement/grant_segment.gd:166 明细标签 "惊巢反制·反弹" → "反弹伤害",同处归因串 "attune_nest_counter" → "attune_nest_halve";channel == "reflect" 判据与开单参数字典逐字不动(契约 3)。
  • meta_progression_forge_test.gd::694 匹配串、:697 标签文案、:699/:700 期望串四处随动到新标签;判据仍绑 step_row 采集的 display_name,nc_hit != "" 与等值断言的强度不得降低。
  • level_autoplay.gd:421 恒 false 的 contains("雷区图谱") 条件与该分支一并删,:415 注释随删。
  • 窄测:meta_progression_forge_test、round_flow_skill_pool_test、damage_controller_test、table_structure_guard_test 四套跑绿。

T5 产出物落位卡(0.25 工作日)

  • 轻闸全绿后、合并前写齐 reports/<迭代号>-实现报告-<日期>.md:各 T 卡状态、T0/T2/T3/T4 四条读数、契约 1 三条 grep、改前改后对拍逐位一致结论、实机目检总清单(本批目检项:结算明细行减半标签一眼可读、无退役件名突兀感——登记不阻塞)、遗留读数义务(零现役通道与零订阅事件词两件,已另登待办条目,见第 5 节)、实现决定记录。
  • reports/<迭代号>-反哺点-<日期>.md:第 6 节每条都要有落点,含「明细标签是否入表」这条规范裁决点。
  • 里程碑步出口跑一次全套闸(tools/run_all_gates.sh --code���;波内出红只做出红最小单元最窄确认。

8 验证闸(改动—验收对照表)

# 需求点(判据出处行锚) 改动(文件:行) 验收测试(名称+落点+尾缀) 层级 真实入口 判据绑定面 能力行
R1 摘四段不可达改写分支(锚 design/engineering/code-conventions.md:15) damage_controller.gd:297-302/305-309/310-313/351-353/368-372/320-323/623 damage_controller_test.gd:_run_recipe_sequence;roll_multiplier_test.gd:_smoke_armor_roll;round_flow_skill_pool_test.gd:_smoke_full_battle+dump_battle 六组逐字节比对 单元+集成 BattleOrchestrator.begin_battle() → 主角先手开单兑付全链 step_row 明细行文本与 outcome 取值逐位=T0 基线;静态判据=契约 1 三条 grep 零注册+摘后键集 grep 零 spike_ready。观测面局限申报:零现役注册行使分支不可达,无法从真实入口造出命中;禁人为注入表行取证(全项目禁变异类测试) 既有:伤害单据编排与回放;既有:伤害公式与掷点乘区;既有:轮内流与结算五段全序
R2 EFFECT_KINDS 摘 spike(锚 design/engineering/code-conventions.md:15) effect_engine.gd:30 effect_kind_retired_test.gd:_assert_rejected(新断言「词表闭面:kind=spike 出域拒绝」,尾缀 expect=1 negative=true) 单元(负面,独立进程) ConfigDB.load_tables() → EffectEngine.validate_trigger_row 出域错误载荷含 effect_kinds 出域 文案+进程退出码 1 既有:加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域/效果类型出域
R3 DO_KEYS 摘 trade_hit/trade_atk(锚 design/engineering/code-conventions.md:15) effect_engine.gd:82 effect_kind_retired_test.gd:_assert_rejected(新断言「do 键闭面:trade_hit 出域拒绝」) 单元(负面,独立进程) ConfigDB.load_tables() → EffectEngine.validate_trigger_row 键出域拒绝错误载荷含 trade_hit+进程退出码 1 既有:加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域/效果类型出域
R4 注释面退役名清零 13 文件 42 行(锚 design/engineering/code-conventions.md:26) 3.3 表全部注释行号 静态判据:3.3 那条扫描命令注释面命中 0,读数贴实现报告;--code 域内静态扫描与 S11 段不变红;宿主既有套件逐位不变 静态(闸件扫描) BattleOrchestrator.begin_battle() 链上宿主套件(改写面不进运行期) 逐文件 grep 读数(文件名+行号+命中 0)+宿主套件回归 既有:换图系刷新链路与效果词表接线;既有:伤害单据编排与回放
R5 减半明细行去退役件名(锚 design/engineering/doc-conventions.md:47) reward_grant.gd:226 meta_progression_forge_test.gd:_smoke_tree_rules(换代断言串,落点 694/697/699/700) 集成(信号采集) 锻造锋线满级特效 → BattleOrchestrator.begin_battle() → mine_hit 减半路径 → step_row 信号 step_row 行 display_name == 「挖掘惩罚减半(6→3)」,且 power 减半数值与发射次数逐字不变;grep -r nest_counter game/ 零命中 既有:天赋树购买与六键合成
R6 空集拒绝 reason 去退役件名(锚 design/engineering/test-conventions.md:116) reward_grant.gd:189 静态判据:grep -c 爆破工兵包 game/core/reward_grant.gd == 0;table_structure_guard_test.gd 与 extended_row_violation_test.gd:_init 跑绿 静态+单元 ConfigDB.load_tables() → _cell_removal_open 所在兑付链(零现役行不可达) grep 零命中读数+通道校验面绿。观测面局限申报:cell_removal 零现役行,reason 不可达,禁造行取证 既有:加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域/效果类型出域
R7 反弹明细标签去退役件名(锚 design/engineering/doc-conventions.md:47) grant_segment.gd:166 静态判据:grep -rc "惊巢反制·反弹" game/ == 0 且 grep -rc "attune_nest_counter" game/ == 0;round_flow_skill_pool_test.gd:_smoke_full_battle 跑绿 静态+集成 BattleOrchestrator.begin_battle() → mine_hit 订阅施加链(channel="reflect" 二十一张表零命中,今天不可达) grep 零命中+发射面零变化回归。观测面局限申报:同上,禁造行取证 既有:轮内流与结算五段全序
R8 sim 恒 false 匹配删除(锚 design/engineering/test-conventions.md:116) level_autoplay.gd:415/421 静态判据:game/sim/ 全域 grep 雷区图谱 零命中;--code 域内驱动件相关套件跑绿 静态+单元 game/sim/level_autoplay.gd 驱动链(测量面,不进游戏运行) grep 零命中+套件绿。观测面局限申报:恒 false 条件不可达,禁造行取证 既有:轮内流与结算五段全序

测试方式两分法:R1/R2/R3/R5 归调试接口与真实入口断言;R6/R7/R8 三处的改动点今天不可达(零现役注册行驱动),一律走静态判据+观测面局限申报,禁造行取证,也不设目检;R5 的文本观感归用户目检——目检项「结算明细减半标签文本可读」写进实现报告总清单,登记不阻塞,不作合回前置。

闸口径:本批改动含 game/ 下非 .md 行为载体 → 按 tools/run_all_gates.sh --code 选档,所选域全绿才合并;卡内不写死闸件名单。

回归措辞:里程碑步(T 段)出口跑一次全套闸;波内修复只做出红最小单元的最窄确认;新增探针先行孤立验证再并入全套。

测试削弱申报:唯一允许改的旧断言=meta_progression_forge_test.gd:694/697/699/700 四处期望串,理由是 R5 文案换代要求名实相符;断言强度(非空判定+等值判定+不含旧词)一条不降,阈值与扫描面不放宽。除此之外任何断言删除、阈值放宽、扫描面缩小都属未申报改动,独立验收审计判红。

独立验收审计:入口=合回前由未参与实现的会话或子代理执行,报告落 reports/<迭代号>-验收审计-<日期>.md;本档验收档=中,按 test-conventions §8.7 中档梯度核(R1/R2/R3/R5 四条必须逐条核到判据绑定面)。

9 异常分级

  • L1 自救:注释措辞不通、局部变量名残留、grep 命令写法——就地改,不动判据。
  • L2 记录继续:T1 单元侧适配出现既有断言装配报错(3.6 已预判零命中),按申报范围改装配并记入实现报告「实现决定记录」。
  • L3 停机呈报并写报告:
    1. 契约 1 任一条 grep 读数非零(分支可达)=上游事实与卡片互斥,停卡退回写卡段。
    2. 摘词后加载出现非预期致命(现役行被误判出域)或现役套件出红且原因落在本批摘除面。
    3. 机检预算与卡片契约互斥(例:收窄后某函数键数低于登记值触发基线红/留空壳才能凑绿)=停卡退回写卡段,禁自造第三条路。
    4. 按纪律无法干净摘除、必须保留中间壳函数才能过闸=停卡呈报走豁免/还债通道,禁硬拆凑绿。
    5. R5 断言换代后仍红且原因在数值或发射序(说明文案改动越界)。

10 代拍板白名单

允许实现期自行拍板:注释改写的具体中文措辞(守契约 2 即可);负面探针常量与夹具目录命名(沿用既有形态);grep/扫描命令写法;是否把 T3 与 T4 并成一次提交;测试文件内局部变量改名;实现报告小节标题措辞。 超出白名单=记入实现报告「实现决定记录」,不得静默。

11 待裁点

零待裁点,开工门=U0。(机制删留与注释口径已由用户在 2026-11-05 会话裁毕;GDD 四处错陈述已在写卡段前置文档段落文 v0.13;「明细标签是否入表」与三件遗留读数不属本卡执行面,已列第 5/6 节去向。)

12 落位与可复用性预检

  • 复用面:本批零新增文件。负域探针复用 game/tests/unit/data_config/effect_kind_retired_test.gd 既有 _inject/_assert_rejected 骨架——它正是「退役词出域即加载致命」的现成载体,新建套件=重复落点。注释改写复用既有文件与函数,无新 helper。
  • 唯一面:退役内容名清单的唯一来源=design/content-archive/道具退役素材库.md,判据脚本现场解析,禁在 game/ 或 tools/ 落第二份名单;摘词只改 effect_engine.gd 两处常量,treasure_item_table.gd:20 的注释属说明面(随 T3 改写),不另立词表。
  • 分层与交互面:game/core/damage_controller.gd 与 game/core/effect_engine.gd 的交互仍走既有 _fx_hits 查询口与 validate_trigger_row 校验口,本批只删消费环、不改接口;reward_grant.gd 文案改动不动 emit_cb 契约;game/sim/ 驱动件不回连产品码。Core 零 UI、数值只经 ConfigDB、随机只经 RngService 三条红线本批一律不绕(本批不新增数值与随机消费)。

13 禁为机检文本保留无效成员

本卡为清退类:禁止为迎合机检消息文本或计数保留/新增任何无效成员、空壳函数、无用别名或 ctx 冗余键——spike_ready、ar_hits、shift、trade_hit 局部变量与 _discount_shift_up 一律随分支删净。机检键与本卡契约互斥时,实现段停卡呈报,不得自造第三条路。

14 实现规范预算

本批无新增文件,新件三查不适用;执行的是存量触面一查:

  • game/core/damage_controller.gd:T1 摘除使 _ctx_rewrites 与 _hero_attack_base_value 的分支数、函数长度下降;_discount_shift_up 整函数消亡。预期 S13 键只降不升,T0 抄录现登记值、T5 抄录摘后读数两张对照。
  • game/core/effect_engine.gd:两处常量字面量变短,方法数与成员变量数不变。
  • game/core/reward_grant.gd、game/sim/level_autoplay.gd:只删文本与一条恒 false 条件,分支数下降或持平。
  • 指标例外通道:本卡不申报任何例外——若摘除后仍有键超默认,属存量在册键,沿用 tools/gdstyle_baseline.txt 现登记,不新增。

15 拆分边界纪律

本卡是清退类,不产生拆出单元;条款照写以防实现期顺手重组:

  1. 若实现中确需拆出新私有函数或新段件,每个单元必须能写出一句职责陈述与单一变化原因,并逐件写进实现报告;写不出=凑计数袋,回炉。
  2. 「过阈值」只作发现信号,禁作为本批拆分或收拢的动机——本批唯一动机是零现役注册分支的清退。
  3. 按纪律无法干净摘除时停卡呈报走豁免/还债通道,禁硬拆凑绿(进第 9 节 L3 第 4 条)。