33 KiB
需求卡片·改写族孤儿机制与退役名清退批(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 目标与完成定义
做完这五件事算完:
- 主角先手攻击的四个改写分支摘除——它们零数据表行注册,游戏里从不执行。
- 连带收窄两处引擎词表:
EFFECT_KINDS摘spike、DO_KEYS摘trade_hit/trade_atk,并同批补负域探针取证。 game/注释面退役内容名清零(42 行/13 文件),只换名不换职责陈述。- 三处挂退役件名的玩家可见文案改中性机制文案(其中一处今天可达),一处 sim 死匹配删除。
- 产出物两份写齐(实现报告+反哺点清单),代码域闸全绿,改前改后对拍逐位一致。
判据总口径:本批除第 4 项文案外全部是非行为改动——零现役注册行=分支不可达=删了也不改变任何一帧输出。这条不靠感觉,T0 用三条 grep 读数坐实。
2 设计事实源
- 设计线闭合凭据:
design/gdd/systems/跨局循环/锻造工坊.mdv0.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:30EFFECT_KINDS含"spike";该常量实数 32 词(本卡现读,摘后 31)。全仓按kind == "spike"派发效果的代码不存在——spike只在词表与注释里在册(另两处::30词表、:452「任意真族(任一命中即生效):spawn_spell、spike」注释)。game/core/effect_engine.gd:82DO_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_removal0 行(后者只作记录,本批不摘通道)。任一数非零=该分支可达=停卡 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_readyctx 键、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_KEYS19→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 口径改写;:189reason →"中立移除: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 任一条 grep 读数非零(分支可达)=上游事实与卡片互斥,停卡退回写卡段。
- 摘词后加载出现非预期致命(现役行被误判出域)或现役套件出红且原因落在本批摘除面。
- 机检预算与卡片契约互斥(例:收窄后某函数键数低于登记值触发基线红/留空壳才能凑绿)=停卡退回写卡段,禁自造第三条路。
- 按纪律无法干净摘除、必须保留中间壳函数才能过闸=停卡呈报走豁免/还债通道,禁硬拆凑绿。
- 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 拆分边界纪律
本卡是清退类,不产生拆出单元;条款照写以防实现期顺手重组:
- 若实现中确需拆出新私有函数或新段件,每个单元必须能写出一句职责陈述与单一变化原因,并逐件写进实现报告;写不出=凑计数袋,回炉。
- 「过阈值」只作发现信号,禁作为本批拆分或收拢的动机——本批唯一动机是零现役注册分支的清退。
- 按纪律无法干净摘除时停卡呈报走豁免/还债通道,禁硬拆凑绿(进第 9 节 L3 第 4 条)。