内容锚改版批(判据锚行号形态废止): 锚形态唯一化<路径>「节名」<行关键词>——用户裁: 锚指向内容不指向行号,文档增删行不牵动锚与测试代码,判据句内容真改动才失配(失配=红,改句文档批同批改锚)。规约落文: test-conventions §8.3 判据出处锚两条文(卡片锚/测试函数注记)+§8.2 golden 预览句+§8.10 审计核对句+req-card §8 锚规格/复核门实读/description+iter 开工门+iter-plan 预检第3步+process-conventions 写卡段行; 闸件: pipeline_gate C5 与 capability_audit 注记道改核「节名在档+关键词命中节内」(共用件 tools/anchor_util.py 逻辑单点: 同名节精确命中优先、围栏内#不作节界、.gd 测量面按文件内子串),行号形态出现即红; 存量迁移: 测试/探针注记 604 条全量内容化(行号形态 568+存量残形 36 重锚)+在盘五卡 md 行号指针 74 处内容化+写卡段存量半成品锚修正(反引号吞词尾 12 处、杂尾 2 处、过期词重锚 2 处); 登记条目按新裁决改写(待执行)。区内凭据: 流水线闸 PASS(36 条目/57 行/5 卡全过)+能力审计 --strict 455 注记函数 0 红+文档域闸【验收通过】无新增红; 迁移件一次性用后即删未提交
This commit is contained in:
1 parent
c713f335a9
commit
a69310b738
123 files changed
+832
-716
No files matched your search
@@ -44,7 +44,7 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
- F7 两件新秘宝的数据承载:game/data/tables/treasure_items.tres:18 `rows = [{`、:224 `}]`(12 件);game/data/schemas/treasure_item_table.gd:23-32 `EFFECT_KINDS` 封闭枚举(无「关卡开始」类 kind)、:121-122 passive 行 triggers 与 effect_kinds 禁并存、:108/:123 转交 `EffectEngine.validate_trigger_row`。
|
||||
- F8 正确结果事件:game/core/effect_engine.gd:12-18 `EVENTS`(`dig_reveal`/`seal_hit`/`mine_hit`/`seal_missed` 在册,无「关卡开始」事件);:51 `EFFECT_KINDS` 含 `grant_reserve_ap`;发射点 game/core/settlement/grant_segment.gd:105 `dig_reveal`(:97 注释「本函数只受理真实揭示的 safe 事件」)、:355 `seal_hit`;错误侧 :149 `mine_hit`、:430 `seal_missed`。grant_segment.gd:25 已有 `action_economy: ActionEconomy` 成员(:43 解包)。
|
||||
- F9 `grant_reserve_ap` 现役唯一消费点:action_economy.gd:114 `_port.emit("dig_paid", …)` → :125-126 累加 rap_gain → :101 入池(feats.tres:887-890 矿脉储能挂 dig_paid)。`dig_reveal`/`seal_hit` 的 hits 目前无 RAP 转译。
|
||||
- F10 测试与能力面:game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd:151 `_smoke_active_refresh`、:190 按表值断言扣费;refresh_feats_test.gd:345 `test_no_feats_baseline`、:306 `test_refresh_discount_gate_and_charge`;game/tests/unit/core/treasure_effects_test.gd:31/47 装配生效与未装配零扰动;game/tests/unit/core/feat_vouchers_test.gd:61 储备金袋 +3、:134-139 断点往返;game/tests/run_all.gd:220/:222/:232/:236 套件登记 expect=0;game/tests/README.md:124 能力行「停手转存储备与轮内刷新」、:126「换图基座:挖格产 RAP 与刷新折扣」、:227 覆盖域行。
|
||||
- F10 测试与能力面:game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd:151 `_smoke_active_refresh`、:190 按表值断言扣费;refresh_feats_test.gd:345 `test_no_feats_baseline`、:306 `test_refresh_discount_gate_and_charge`;game/tests/unit/core/treasure_effects_test.gd:31/47 装配生效与未装配零扰动;game/tests/unit/core/feat_vouchers_test.gd:61 储备金袋 +3、:134-139 断点往返;game/tests/run_all.gd:220/:222/:232/:236 套件登记 expect=0;game/tests/README.md「测试层级」末点耗尽即收轮与战斗收束清零 能力行「停手转存储备与轮内刷新」、:126「换图基座:挖格产 RAP 与刷新折扣」、:227 覆盖域行。
|
||||
- F11 gdstyle 基线:tools/gdstyle_baseline.txt:8 `adventure_runner.gd|max-class-variables = 23`、:9-10 `level_runner.gd|max-class-variables = 30`/`max-public-methods = 33`;action_economy.gd/battle_orchestrator.gd/grant_segment.gd/treasure_item_table.gd 均无键(默认阈值内)。
|
||||
|
||||
## 4. 设计契约(违反即返工,🔴 触碰=L3 停机呈报)
|
||||
@@ -53,9 +53,9 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
- 🔴 C2 储备点的冒险级账本唯一落 `adventure_counters["rap"]`(F5);禁新增第二个 RAP 持有者、禁在 adventure_runner.gd/level_runner.gd 新增类变量(F11 基线已超阈,新增即升键)。
|
||||
- 🔴 C3 战斗结束不清零;冒险收束清零;断点随 adventure_counters 自动写读,禁另立断点顶层键。
|
||||
- 🔴 C4 推演储能只挂 `dig_reveal`/`seal_hit`(做对了才给);禁挂 `mine_hit`/`seal_missed`/`dig_paid`,禁把错误结果算进 RAP。
|
||||
- 🔴 C5 开局储备只在每关首战(battle_index==1)注入一次,注入量读行内 magnitude;不改停手转存率与刷新折价判据(秘宝.md:47)。
|
||||
- 🔴 C5 开局储备只在每关首战(battle_index==1)注入一次,注入量读行内 magnitude;不改停手转存率与刷新折价判据(秘宝.md「普通档」两件储能件的代号)。
|
||||
- 🔴 C6 数值表结构、RNG 单点、Core 零 UI 依赖不变;禁删既有断言、禁放宽阈值;本卡测试削弱申报=无。
|
||||
- 🔴 C7 连锁展开只随首格的一次付费动作结算,不逐格追加(沿用 design/gdd/systems/排雷循环/行动经济.md:100 矿脉储能先例);`_reveal_safe` 只在 `channel=="dig"` 时转译 RAP hits,`channel=="chain"` 的格零转译。
|
||||
- 🔴 C7 连锁展开只随首格的一次付费动作结算,不逐格追加(沿用 design/gdd/systems/排雷循环/行动经济.md「换图系专长对储备与刷新的改写」矿脉储能 矿脉储能先例);`_reveal_safe` 只在 `channel=="dig"` 时转译 RAP hits,`channel=="chain"` 的格零转译。
|
||||
|
||||
## 5. 范围边界
|
||||
|
||||
@@ -78,7 +78,7 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
| game/tests/README.md 能力表 :124/:126/:227 | 写卡段同批新增两条能力行;覆盖域行补新能力名 | 覆盖域表更新列反哺点,由文档批落文(能力表本体写卡段维护,实现批禁写) |
|
||||
| design/gdd/systems/排雷循环/行动经济.md v1.7 | 条文已定稿(价格/寿命/验收标准),实现照条文落地 | 无同步义务(实现核对条文一致即可) |
|
||||
| design/gdd/systems/表现与支撑/存档序列化.md :36/:57/:181 | 现条文「局内数值的持久化:无」「若未来某局内资源要开放跨战斗携带(如储备行动点),须修订池规则并向本系统登记持久化归属,禁止静默超域」;本批 RAP 借 adventure_counters 随断点写读即属该登记面 | 列反哺点,由文档批落文(登记 RAP 持久化归属/修订 :57 措辞),实现批禁写该文档;未落文前不静默超域 |
|
||||
| design/gdd/systems/跨局循环/秘宝.md v1.3 :45 | 现条文只写正向「挖开安全格或封印标中时 +1」;「错误结果不产 RAP」「连锁不逐格追加」两句规格句缺席(V8/V9 取 :47 与行动经济.md:100 推得) | 列反哺点,由文档批落文(补两句规格句),实现批禁写该文档 |
|
||||
| design/gdd/systems/跨局循环/秘宝.md v1.3 :45 | 现条文只写正向「挖开安全格或封印标中时 +1」;「错误结果不产 RAP」「连锁不逐格追加」两句规格句缺席(V8/V9 取 :47 与 行动经济.md「换图系专长对储备与刷新的改写」矿脉储能 推得) | 列反哺点,由文档批落文(补两句规格句),实现批禁写该文档 |
|
||||
| design/ux/battle.md、interaction-patterns.md | 文档设计段已把 RAP−8 改 RAP−4、清零时点改冒险收束 | 无同步义务 |
|
||||
|
||||
## 7. 文件结构图(卡前定分解)
|
||||
@@ -141,7 +141,7 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
- [ ] grant_segment.gd 增 `func _apply_rap_hits(hits: Array) -> void`:累加 hits 中 `kind=="grant_reserve_ap"` 的 `value`,>0 时调 `action_economy.grant_reserve_ap(total)`(:25 成员在案)。
|
||||
- [ ] `_reveal_safe`(:105 邻域)在 `dr_hits` 发射后仅当 `String(evt.get("channel", "dig")) == "dig"` 时调 `_apply_rap_hits(dr_hits)`(minesweeper_rules.gd:345-362 连锁格 channel="chain" 逐格发射,不调即不逐格追加);`_judge_seal_hit`(:355 邻域)在 `fh_hits` 发射后调一次;`mine_hit`/`seal_missed` 发射点不调。
|
||||
- [ ] treasure_effects_test.gd 增 V5:单次付费动作挖安全格 +1、标中 +1、踩雷与标空零增、未装配零扰动。
|
||||
- [ ] treasure_effects_test.gd 增 V6:与矿脉储能同装时挖安全格一次 +2(秘宝.md:47 叠加边界)。
|
||||
- [ ] treasure_effects_test.gd 增 V6:与矿脉储能同装时挖安全格一次 +2(秘宝.md「普通档」两件储能件的代号 叠加边界)。
|
||||
- [ ] treasure_effects_test.gd 增 V9:连锁夹具(首格 dig + N 格 chain)后 rap 恰 +1(C7)。
|
||||
- [ ] 真实入口统一=`LevelRunner` 真实结算段经 `BattleOrchestrator` 装配链的 `dig_reveal`/`seal_hit` 发射;判据绑定面=`action_economy.rap` 增量。
|
||||
- [ ] 孤立直跑该套件绿,再跑单元测试全套件。
|
||||
@@ -157,19 +157,19 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
|
||||
| # | 需求点(判据出处行锚) | 改动 | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| V1 | 刷新价=每轮预算一半(design/gdd/systems/排雷循环/行动经济.md:92) | action_economy.tres:10 8→4;schema :10 缺省同步 | round_flow_skill_pool_test.gd:_smoke_active_refresh 内 `_test_refresh_cost_is_half_budget`(_test_ 尾缀) | 单元 | BattleOrchestrator.player_request_refresh() | `rap_refresh_cost * 2 == ap_per_round` ∧ 扣费后 rap == 攒额 − 表值 | 既有:停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) |
|
||||
| V2 | 战斗结束储备点原样保留(design/gdd/systems/排雷循环/行动经济.md:296) | action_economy.gd notify_combat_end 回写桶;battle_orchestrator 起战注入 carry | round_flow_skill_pool_test.gd:_test_rap_carries_across_battles | 单元 | 连续两场 BattleOrchestrator.begin_battle(同一 adv_bucket) | 第二场起战 action_economy.rap == 第一场 notify_combat_end 后 rap | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V3 | 冒险收束清零(design/gdd/systems/排雷循环/行动经济.md:299) | adventure_runner._settle 清桶键 | round_flow_skill_pool_test.gd:_test_rap_cleared_on_adventure_settle | 单元 | AdventureRunner._settle("completed") | adventure_counters["rap"] == 0 ∧ 三结局共用出口 | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V4 | 每关开始 +4 储备点(design/gdd/systems/跨局循环/秘宝.md:44) | treasure_items.tres level_start_rap 行+关首注入面 | treasure_effects_test.gd:_test_level_start_rap_grant | 单元 | BattleOrchestrator.begin_battle(battle_index=1, attunement 含件) | 首战 rap==magnitude ∧ battle_index=2 不再注入 ∧ 未装配 rap==0 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V5 | 单次付费动作挖安全格/封印标中 +1(design/gdd/systems/跨局循环/秘宝.md:45) | correct_action_rap 行+grant_segment 两处 hits 转译 | treasure_effects_test.gd:_test_correct_action_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 dig_reveal/seal_hit 发射(内部驱动受控例外:本改动无公开可观测面可钉,判据绑 action_economy.rap 状态源取值) | 每次正确事件后 rap 恰 +1;mine_hit/seal_missed 后 rap 不变 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V6 | 与换图系专长可叠加(design/gdd/systems/跨局循环/秘宝.md:47) | 同上行与转译(不覆盖 dig_paid 既有通道) | treasure_effects_test.gd:_test_correct_action_rap_stacks_with_vein_reserve | 单元 | 同 V5+装配 vein_reserve(内部驱动受控例外同 V5) | 单次付费动作挖安全格后 rap +2(dig_paid 与 dig_reveal 各 +1) | 既有:换图基座:挖格产 RAP 与刷新折扣 |
|
||||
| V7 | 断点往返不丢储备点(design/gdd/systems/表现与支撑/存档序列化.md:180) | 借 adventure_counters 桶随快照(零新增断点键) | feat_vouchers_test.gd:_test_rap_breakpoint_roundtrip | 单元 | AdventureRunner.resume_adventure(bp) → 起战 | bp["adventure_counters"]["rap"] 与续玩起战 rap 逐位相等 | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V8 | 只按正确结果给(design/gdd/systems/跨局循环/秘宝.md:47) | triggers 只挂 dig_reveal/seal_hit | treasure_effects_test.gd:_test_wrong_action_gives_no_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 mine_hit/seal_missed 发射(内部驱动受控例外同 V5) | 两次错误事件后 rap 与事件前逐位相等;静态结构判据「订阅行无 mine_hit/seal_missed」申报观测面局限(该两事件不发射本 kind,动态只验 rap 不变) | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V9 | 连锁展开不逐格追加(design/gdd/systems/排雷循环/行动经济.md:100) | _reveal_safe 按 channel=="dig" 门控转译 | treasure_effects_test.gd:_test_chain_gives_one_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 dig+chain 混合揭示 | 首格 dig+N 格 chain 后 rap 恰 +1 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| N1 | 非行为改动:schema 缺省 6→4(design/gdd/systems/排雷循环/行动经济.md:277) | action_economy_table.gd:10 缺省声明面 | 无新增断言(判断依据=运行时值由 .tres 覆盖,断言只读 db.run.action_economy.rap_refresh_cost) | — | — | 表加载零新增 error | 既有:停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) |
|
||||
| V1 | 刷新价=每轮预算一半(design/gdd/systems/排雷循环/行动经济.md「挖掘期刷新:花储备换新图」刷新门槛按每轮预算的一半设定) | action_economy.tres:10 8→4;schema :10 缺省同步 | round_flow_skill_pool_test.gd:_smoke_active_refresh 内 `_test_refresh_cost_is_half_budget`(_test_ 尾缀) | 单元 | BattleOrchestrator.player_request_refresh() | `rap_refresh_cost * 2 == ap_per_round` ∧ 扣费后 rap == 攒额 − 表值 | 既有:停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) |
|
||||
| V2 | 战斗结束储备点原样保留(design/gdd/systems/排雷循环/行动经济.md「验收标准」刷新规则) | action_economy.gd notify_combat_end 回写桶;battle_orchestrator 起战注入 carry | round_flow_skill_pool_test.gd:_test_rap_carries_across_battles | 单元 | 连续两场 BattleOrchestrator.begin_battle(同一 adv_bucket) | 第二场起战 action_economy.rap == 第一场 notify_combat_end 后 rap | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V3 | 冒险收束清零(design/gdd/systems/排雷循环/行动经济.md「验收标准」储备清零) | adventure_runner._settle 清桶键 | round_flow_skill_pool_test.gd:_test_rap_cleared_on_adventure_settle | 单元 | AdventureRunner._settle("completed") | adventure_counters["rap"] == 0 ∧ 三结局共用出口 | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V4 | 每关开始 +4 储备点(design/gdd/systems/跨局循环/秘宝.md「普通档」开局储备) | treasure_items.tres level_start_rap 行+关首注入面 | treasure_effects_test.gd:_test_level_start_rap_grant | 单元 | BattleOrchestrator.begin_battle(battle_index=1, attunement 含件) | 首战 rap==magnitude ∧ battle_index=2 不再注入 ∧ 未装配 rap==0 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V5 | 单次付费动作挖安全格/封印标中 +1(design/gdd/systems/跨局循环/秘宝.md「普通档」推演储能) | correct_action_rap 行+grant_segment 两处 hits 转译 | treasure_effects_test.gd:_test_correct_action_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 dig_reveal/seal_hit 发射(内部驱动受控例外:本改动无公开可观测面可钉,判据绑 action_economy.rap 状态源取值) | 每次正确事件后 rap 恰 +1;mine_hit/seal_missed 后 rap 不变 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V6 | 与换图系专长可叠加(design/gdd/systems/跨局循环/秘宝.md「普通档」两件储能件的代号) | 同上行与转译(不覆盖 dig_paid 既有通道) | treasure_effects_test.gd:_test_correct_action_rap_stacks_with_vein_reserve | 单元 | 同 V5+装配 vein_reserve(内部驱动受控例外同 V5) | 单次付费动作挖安全格后 rap +2(dig_paid 与 dig_reveal 各 +1) | 既有:换图基座:挖格产 RAP 与刷新折扣 |
|
||||
| V7 | 断点往返不丢储备点(design/gdd/systems/表现与支撑/存档序列化.md「验收标准」断点域契约) | 借 adventure_counters 桶随快照(零新增断点键) | feat_vouchers_test.gd:_test_rap_breakpoint_roundtrip | 单元 | AdventureRunner.resume_adventure(bp) → 起战 | bp["adventure_counters"]["rap"] 与续玩起战 rap 逐位相等 | 新增:储备点整局冒险携带与冒险收束清零 |
|
||||
| V8 | 只按正确结果给(design/gdd/systems/跨局循环/秘宝.md「普通档」两件储能件的代号) | triggers 只挂 dig_reveal/seal_hit | treasure_effects_test.gd:_test_wrong_action_gives_no_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 mine_hit/seal_missed 发射(内部驱动受控例外同 V5) | 两次错误事件后 rap 与事件前逐位相等;静态结构判据「订阅行无 mine_hit/seal_missed」申报观测面局限(该两事件不发射本 kind,动态只验 rap 不变) | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| V9 | 连锁展开不逐格追加(design/gdd/systems/排雷循环/行动经济.md「换图系专长对储备与刷新的改写」矿脉储能) | _reveal_safe 按 channel=="dig" 门控转译 | treasure_effects_test.gd:_test_chain_gives_one_rap | 单元 | LevelRunner 真实结算段经 BattleOrchestrator 装配链的 dig+chain 混合揭示 | 首格 dig+N 格 chain 后 rap 恰 +1 | 新增:储能秘宝关首注入与正确动作产储备点 |
|
||||
| N1 | 非行为改动:schema 缺省 6→4(design/gdd/systems/排雷循环/行动经济.md「调参表」刷新门槛) | action_economy_table.gd:10 缺省声明面 | 无新增断言(判断依据=运行时值由 .tres 覆盖,断言只读 db.run.action_economy.rap_refresh_cost) | — | — | 表加载零新增 error | 既有:停手转存储备与轮内刷新(上限/AP 不重置/刷新图零清图奖励) |
|
||||
|
||||
- 验证命令:单元套件直跑 `D:\code\godot\Godot_v4.7.2-stable_win64_console.exe --headless --path game --script res://tests/unit/battle_settlement/round_flow_skill_pool_test.gd`(treasure_effects/feat_vouchers 同形换路径);全套件 `--script res://tests/run_all.gd`。
|
||||
- 内部驱动受控例外申报:V5/V6/V8/V9 的改动点(秘宝订阅 hits 转译)无公开编排器入口可钉,真实入口取 LevelRunner 真实结算段经 BattleOrchestrator 装配链,判据绑 `action_economy.rap` 状态源取值(test-conventions.md:96/:134-136)。
|
||||
- 内部驱动受控例外申报:V5/V6/V8/V9 的改动点(秘宝订阅 hits 转译)无公开编排器入口可钉,真实入口取 LevelRunner 真实结算段经 BattleOrchestrator 装配链,判据绑 `action_economy.rap` 状态源取值(test-conventions.md「8.2 四层与真实入口」不依赖场景树和真实宿主的纯逻辑/:134-136)。
|
||||
- 测试方式两分法:V1–V9 全归单元夹具(能力验证);用户目检项=RAP 数字与清零反馈、刷新按钮「RAP−4」文案,写进实现报告实机目检总清单,登记不阻塞。
|
||||
- 回归措辞:T 段出口跑一次覆盖改动面的套件;修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套。
|
||||
- 测试削弱申报:无(不删不改既有断言)。
|
||||
@@ -226,17 +226,17 @@ design/gdd/systems/排雷循环/行动经济.md v1.7::100 矿脉储能「连
|
||||
|---|---|---|---|---|
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 新 kind 只扩 EFFECT_KINDS,MAGNITUDE_KINDS 未扩会使 magnitude=4 加载期报 cross_field | 补写 | T2 首步已写死两处词表追加;§14 预算改「两处各 1 项」;§13 新增件名改「两处词表项」(依据 treasure_item_table.gd:44-46/:154-167) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | dig_reveal 在连锁展开时逐格发射,V5「恰 +1」/V6「+2」在连锁夹具下会假红 | 补写 | §4 新增 🔴 C7、T3 新增 channel=="dig" 门控步骤、新增 V9 验收行、V5/V6 判据改「单次付费动作」(依据 minesweeper_rules.gd:345-362、grant_segment.gd:83-93) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 秘宝 B 连锁口径 owner 文档未定义,复核者初判待裁并列两案 | 自判 | 不改设计、不呈用户:沿用先例「连锁不逐格追加」有唯一答案(依据 行动经济.md:100/:281/:297、feats.tres:887-889 矿脉储能挂 dig_paid 一次/动作、用户 2026-11-09 会话「一次动作四种情况」裁断);已落 C7 与 V9 |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 秘宝 B 连锁口径 owner 文档未定义,复核者初判待裁并列两案 | 自判 | 不改设计、不呈用户:沿用先例「连锁不逐格追加」有唯一答案(依据 行动经济.md「换图系专长对储备与刷新的改写」矿脉储能/:281/:297、feats.tres:887-889 矿脉储能挂 dig_paid 一次/动作、用户 2026-11-09 会话「一次动作四种情况」裁断);已落 C7 与 V9 |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 新增桶引用成员未给声明形态,notify_combat_end 缺空字典零扰动守卫 | 补写 | T1 已补 `var _adv_bucket := {}` 与「桶为空字典时零扰动不回写」;§14 补成员形态与阈值实数(依据 action_economy.gd:35/:113、gdstyle_baseline.txt:8-14) |
|
||||
| 1 | 只读子代理(未参与本卡撰写的只读复核者) | 「保留 _rap」按字面是死代码(ActionEconomy 每战新建),需钉清生命周期避免实施者误解 | 自判 | 判定不改结构、只改措辞:T1 已写「回写完成即由下一场 begin_battle 经 carry 注入重建,本实例不复用」(依据 battle_orchestrator.gd:208/:585、level_runner.gd:517/:591) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | correct_action_rap 行把 +1 同时写 magnitude 与 do.value,双写且违背现役 value_from 形态 | 补写 | T3 已改两条 triggers 的 do 为 `"value_from": "magnitude"`,行内 magnitude=1 为唯一源(依据 treasure_items.tres:25-41、effect_engine.gd:184-188) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | §13 写「两处调用点同文件、同一函数」与 T3/代码实况矛盾 | 自判 | 复核者当场改卡:§13 该格改「同文件两个调用点(grant_segment.gd:101/:349)」(依据代码实读) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | V5/V6/V8 真实入口写法不一致,内部 fx_emit 未申报受控例外,V8 静态判据未申报局限 | 补写 | 对照表四行统一为「LevelRunner 真实结算段经 BattleOrchestrator 装配链」;§9 表下补受控例外申报;V8 补静态判据局限注(依据 test-conventions.md:96/:134-136) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | V7 锚 行动经济.md:84 只讲生命周期,不承载「断点往返」判据 | 补写 | V7 重锚 存档序列化.md:180「断点域契约:写读往返逐位一致」;§2 补该文档事实源行 |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 「做错了不给」在 design/ 无正向规格句,复核者初判退回 doc-design | 自判 | 不停笔:owner 文档 秘宝.md:47「按正确结果给」+用户会话裁断「做对了才给,没做对不给」给出唯一答案;V8 重锚 :47,规格句补写列 §6 反哺点由文档批落文(依据 秘宝.md:47、git 750b491b) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 🔴 C1「禁写死 4/8」与 T0 把 schema 缺省写成 4 自相矛盾;缺省面未列非行为改动行 | 补写 | C1 改「禁在产品码读取路径与测试断言写死,schema 缺省声明面除外」;对照表新增 N1 非行为改动行并带锚 行动经济.md:277(依据 test-conventions.md:92) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 复核记录占位行去向写「待定」,C6 判红 | 补写 | 本表已按四类去向逐条回填 16 条,删占位行(依据 pipeline_gate.py:650-687、SKILL.md:64) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | RAP 借 adventure_counters 随断点写读,与 存档序列化.md:57「须登记持久化归属、禁止静默超域」冲突,复核者初判退回规约修订 | 补写 | 不停笔、不静默:§6 新增该文档同步面行,明确「列反哺点由文档批落文、实现批禁写、未落文前不静默超域」;§2 补 :57 依据(依据 存档序列化.md:36/:57/:181、breakpoint_store.gd:38/:123) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | §5 声明解锁「归调参批不做」,T2 却写死 tier/unlock,复核者初判退回 doc-design | 自判 | 不改数值、不呈用户:现役普通档解锁全为 provisional 占位,10 即占位非定案;§5 改「按现役普通档同款 provisional 占位,不定案」,§11 白名单补同位说明(依据 treasure_items.tres:95、秘宝.md:28-29) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | T1/T3 各把两组断言塞进一步,取用块用「T0 的表值」类模糊指代 | 补写 | T1 拆 V2/V7 两步、T3 拆 V5/V6/V9 三步;三处取用块改确切名字 `db.run.action_economy.rap_refresh_cost == 4`/`adventure_counters["rap"]`/`level_start_rap` 行形态(依据 SKILL.md:84/:93/:101) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | V5/V6/V8 真实入口写法不一致,内部 fx_emit 未申报受控例外,V8 静态判据未申报局限 | 补写 | 对照表四行统一为「LevelRunner 真实结算段经 BattleOrchestrator 装配链」;§9 表下补受控例外申报;V8 补静态判据局限注(依据 test-conventions.md「8.2 四层与真实入口」不依赖场景树和真实宿主的纯逻辑/:134-136) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | V7 锚 行动经济.md「停手与储备行动点」储备池的生命周期以一整局冒险为界 只讲生命周期,不承载「断点往返」判据 | 补写 | V7 重锚 存档序列化.md「验收标准」断点域契约「断点域契约:写读往返逐位一致」;§2 补该文档事实源行 |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 「做错了不给」在 design/ 无正向规格句,复核者初判退回 doc-design | 自判 | 不停笔:owner 文档 秘宝.md「普通档」两件储能件的代号「按正确结果给」+用户会话裁断「做对了才给,没做对不给」给出唯一答案;V8 重锚 :47,规格句补写列 §6 反哺点由文档批落文(依据 秘宝.md「普通档」两件储能件的代号、git 750b491b) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 🔴 C1「禁写死 4/8」与 T0 把 schema 缺省写成 4 自相矛盾;缺省面未列非行为改动行 | 补写 | C1 改「禁在产品码读取路径与测试断言写死,schema 缺省声明面除外」;对照表新增 N1 非行为改动行并带锚 行动经济.md「调参表」刷新门槛(依据 test-conventions.md「8.1 验收单位是行为改动」一个行为改动) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 复核记录占位行去向写「待定」,C6 判红 | 补写 | 本表已按四类去向逐条回填 16 条,删占位行(依据 pipeline_gate.py:650-687、.zcode/skills/req-card/SKILL.md「必备结构」复核记录) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | RAP 借 adventure_counters 随断点写读,与 存档序列化.md「存什么:表与档分家,局内系统资源不入档」第二条边界是反面清单「须登记持久化归属、禁止静默超域」冲突,复核者初判退回规约修订 | 补写 | 不停笔、不静默:§6 新增该文档同步面行,明确「列反哺点由文档批落文、实现批禁写、未落文前不静默超域」;§2 补 :57 依据(依据 存档序列化.md「系统范围」局内数值的持久化/:57/:181、breakpoint_store.gd:38/:123) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | §5 声明解锁「归调参批不做」,T2 却写死 tier/unlock,复核者初判退回 doc-design | 自判 | 不改数值、不呈用户:现役普通档解锁全为 provisional 占位,10 即占位非定案;§5 改「按现役普通档同款 provisional 占位,不定案」,§11 白名单补同位说明(依据 treasure_items.tres:95、秘宝.md「三档骨架」两件储能件暂落普通档-29) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | T1/T3 各把两组断言塞进一步,取用块用「T0 的表值」类模糊指代 | 补写 | T1 拆 V2/V7 两步、T3 拆 V5/V6/V9 三步;三处取用块改确切名字 `db.run.action_economy.rap_refresh_cost == 4`/`adventure_counters["rap"]`/`level_start_rap` 行形态(依据 .zcode/skills/req-card/SKILL.md「任务卡写作纪律」步骤粒度) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | Dictionary 重赋值会断桶引用,卡内未声明约束 | 自判 | 不改:重赋值只在起战前/冒险收束发生,战斗进行中零重赋值,不构成实战缺陷(依据 adventure_runner.gd:116/:170/:203/:348、level_runner.gd:88-89/:539);日后新增战斗中重赋值路径须回炉补条款 |
|
||||
@@ -52,7 +52,7 @@ design/gdd/systems/排雷循环/棋盘生成.md v1.4:
|
||||
|
||||
做:§3 全部消费面的删除/重写/迁移;测试断言换代与删组申报;能力表行换代(写卡段已落,实现批核对名实)。
|
||||
不做(去向):
|
||||
- 黄金图向量重制(v1.4 :174)——盘上无登记向量件,属 P1 调参期批量断言工具面(棋盘生成.md:147),随该批走。
|
||||
- 黄金图向量重制(v1.4 :174)——盘上无登记向量件,属 P1 调参期批量断言工具面(棋盘生成.md「P1 / P2 后置」调参期批量断言工具全量交付),随该批走。
|
||||
- MC 档位重跑与数值重锚——v1.4 管线换代后旧读数作废,重跑归数值标定窗口(用户发令),本批只跑工具缩样冒烟证明不崩。
|
||||
- 体验验证清单实机目检登记——出板观感(白给板频率)变化归用户试玩面。
|
||||
- auto_player 策略改动——其推理族自含且属 MC 测量面(裁点 C 保留),本批只改 `:80` 注释引用(N1 非行为改动)。
|
||||
@@ -129,13 +129,13 @@ design/gdd/systems/排雷循环/棋盘生成.md v1.4:
|
||||
|
||||
| 需求点(判据出处锚) | 改动(文件:行/行为) | 验收测试(名称+落点) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 出板检查只两条+白给重摇(design/gdd/systems/排雷循环/棋盘生成.md:58、:171) | board_generator.gd `_attempt_loop` 重写、`_board_check` 新增 | `board_generator_test.gd:_test_board_check_and_reroll`(T1 1.5) | 单元 | `BoardGenerator.generate()`+单元夹具流(现件 `:31 _stream`) | 出图出生格∩雷=空、r0_count<安全格数、reroll_count≥1(白给夹具≥2) | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
| R1 重摇同流与确定性(design/gdd/systems/排雷循环/棋盘生成.md:168、design/gdd/systems/排雷循环/棋盘生成.md:172) | 重摇不开新流;attempts_used→reroll_count | 既有 `_test_same_seed_bit_identical`+`_test_board_check_and_reroll` 同种子 reroll_count 相等段+`board_gen_reward_test.gd:_smoke_board_generator` 同种子段 | 单元 | 同上 | mines/digits 逐位相等+reroll_count 相等 | 既有:同参数同种子逐位复现、异种子不退化 |
|
||||
| R1 指标集键集换代(design/gdd/systems/排雷循环/棋盘生成.md:133、design/gdd/systems/排雷循环/棋盘生成.md:172) | `_finalize` 五键删除、reroll_count 新增、METRIC_VERSION=2 | `_smoke_board_generator` 键集断言(T1 1.5) | 单元 | `generate()` 真产物 | metrics.has() 逐项读数 | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
| R2 表与 schema 退役(design/gdd/systems/排雷循环/棋盘生成.md:173、design/gdd/systems/排雷循环/棋盘生成.md:176) | board_gen_table.gd 六块删除;board_gen.tres 五列删除;schema_vocab ⑥ 改写 | 真表加载 errs=[](`board_generator_test.gd:15–19` 装载路)+`schema_vocab_violation_test.gd:_check_vocab_retired_fields` | 单元 | ConfigDB 真表加载 | 违例 errs 集合前后相同(退役检查不再产出) | 既有:棋盘按参数行出图、数字恒真 |
|
||||
| R3 标记与诚实告知退役(design/gdd/systems/排雷循环/棋盘生成.md:100) | board_data.gd:21–22、main.gd:467/:481–493、main_debug_flow.gd:107 删除 | 键形 grep 零命中+冒烟启动绿(`python tools/run_smoke.py`) | 冒烟 | 冒烟场景真启动 | 静态判据+评审注记:标记不可达、无运行期观测面可绑(C5 口径,测试削弱申报见下) | 既有:棋盘按参数行出图、数字恒真 |
|
||||
| R4 求解器迁 sim(design/gdd/systems/排雷循环/棋盘生成.md:102) | 新增 sim/inferability_measure.gd+四件改指 | 工具缩样直跑(T2 2.4) | 工具(闸外) | headless `--script res://sim/calibrate_boards.gd` 缩样 | 工具 stdout 读数行进实现报告 | 新增:棋盘可推理率离线测量(仅 sim,不入生成管线) |
|
||||
| R5 测试口径换代(design/gdd/systems/排雷循环/棋盘生成.md:164) | 三件删组(清单见 1.5) | 单元全绿执行面+实现报告删组清单 | 单元 | run_all 全套 | 0 失败读数;被删面不复新断言 | 既有:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
| R1 出板检查只两条+白给重摇(design/gdd/systems/排雷循环/棋盘生成.md「四阶段管线:一次调用跑完四步,同种子必产同图」出板检查、:171) | board_generator.gd `_attempt_loop` 重写、`_board_check` 新增 | `board_generator_test.gd:_test_board_check_and_reroll`(T1 1.5) | 单元 | `BoardGenerator.generate()`+单元夹具流(现件 `:31 _stream`) | 出图出生格∩雷=空、r0_count<安全格数、reroll_count≥1(白给夹具≥2) | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
| R1 重摇同流与确定性(design/gdd/systems/排雷循环/棋盘生成.md「验收标准」确定性复现、design/gdd/systems/排雷循环/棋盘生成.md「验收标准」重摇同流) | 重摇不开新流;attempts_used→reroll_count | 既有 `_test_same_seed_bit_identical`+`_test_board_check_and_reroll` 同种子 reroll_count 相等段+`board_gen_reward_test.gd:_smoke_board_generator` 同种子段 | 单元 | 同上 | mines/digits 逐位相等+reroll_count 相等 | 既有:同参数同种子逐位复现、异种子不退化 |
|
||||
| R1 指标集键集换代(design/gdd/systems/排雷循环/棋盘生成.md「依赖与输出」生成期指标集、design/gdd/systems/排雷循环/棋盘生成.md「验收标准」重摇同流) | `_finalize` 五键删除、reroll_count 新增、METRIC_VERSION=2 | `_smoke_board_generator` 键集断言(T1 1.5) | 单元 | `generate()` 真产物 | metrics.has() 逐项读数 | 新增:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
| R2 表与 schema 退役(design/gdd/systems/排雷循环/棋盘生成.md「验收标准」加载期校验、design/gdd/systems/排雷循环/棋盘生成.md「验收标准」表实一致) | board_gen_table.gd 六块删除;board_gen.tres 五列删除;schema_vocab ⑥ 改写 | 真表加载 errs=[](`board_generator_test.gd:15–19` 装载路)+`schema_vocab_violation_test.gd:_check_vocab_retired_fields` | 单元 | ConfigDB 真表加载 | 违例 errs 集合前后相同(退役检查不再产出) | 既有:棋盘按参数行出图、数字恒真 |
|
||||
| R3 标记与诚实告知退役(design/gdd/systems/排雷循环/棋盘生成.md「不做质量承诺:猜局是玩法的一部分」不做质量承诺) | board_data.gd:21–22、main.gd:467/:481–493、main_debug_flow.gd:107 删除 | 键形 grep 零命中+冒烟启动绿(`python tools/run_smoke.py`) | 冒烟 | 冒烟场景真启动 | 静态判据+评审注记:标记不可达、无运行期观测面可绑(C5 口径,测试削弱申报见下) | 既有:棋盘按参数行出图、数字恒真 |
|
||||
| R4 求解器迁 sim(design/gdd/systems/排雷循环/棋盘生成.md「不做质量承诺:猜局是玩法的一部分」生成端不度量) | 新增 sim/inferability_measure.gd+四件改指 | 工具缩样直跑(T2 2.4) | 工具(闸外) | headless `--script res://sim/calibrate_boards.gd` 缩样 | 工具 stdout 读数行进实现报告 | 新增:棋盘可推理率离线测量(仅 sim,不入生成管线) |
|
||||
| R5 测试口径换代(design/gdd/systems/排雷循环/棋盘生成.md「调参表」结构冻结) | 三件删组(清单见 1.5) | 单元全绿执行面+实现报告删组清单 | 单元 | run_all 全套 | 0 失败读数;被删面不复新断言 | 既有:出板检查(出生区无雷/开局不全开、白给板同流重摇、指标集换代) |
|
||||
|
||||
**测试削弱申报(2026-10-21 立)**:允许删除的旧断言与理由——reward 测试及格线/三分/cap 组(机制退役)、generator 可清图自洽套件与表头④护栏(检查退役)、schema_vocab ⑥(冻结域退役)、main.gd 两 toast(标记退役)。均为「对应功能整体撤除」,非放宽阈值;实现期未申报的额外删除=审计判红。
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
| 普通已开危险格「危」当前垫色牌;落牌断言在玩家复制回归件(本卡后普通「危」改浮空、plate=false;封印格「危」仍垫牌) | `game/tests/unit/presentation/player_copy_sweep_test.gd:142-147`(`u.plate == true`) |
|
||||
| 单元测试入口登记 terrain 套件 | `game/tests/run_all.gd:225` |
|
||||
| 布局表字段被样张渲染工具读取(本批不改工具) | `tools/layout_config.py:12`;`tools/render_sample_sheet.py:51,956`;`tools/render_sample_sheet_v3.py:862,936` |
|
||||
| 档期现状:待办清单已「已写卡」、roadmap 待编池「棋盘瓦片与立体表现重做(已写卡,待编排)」、08 已写卡 | `待办清单.md:265-268`;`roadmap.md:9`;`design/gdd/08-Alpha版本标准.md:149` |
|
||||
| 档期现状:待办清单已「已写卡」、roadmap 待编池「棋盘瓦片与立体表现重做(已写卡,待编排)」、08 已写卡 | `待办清单.md「图例面板的条目全集与分组方式」立项后的图例面板定稿讨论-268`;`roadmap.md「当前位」发令开工`;`design/gdd/08-Alpha版本标准.md「五、表现」棋盘瓦片与立体表现重做` |
|
||||
|
||||
---
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
| `game/tests/golden/README.md` | 棋盘裁剪 1036×548、越格口径、类型微光禁越圈范围 | 设计段已同步;实现批禁直改,基线重制按该文件口径执行(重制前用户确认) |
|
||||
| `design/gdd/术语表.md` 掩尘/裸土/浮空数字/色牌 | 基色值、浮空数字定义、普通数字色牌退役+封印格色牌例外 | 设计段已同步;实现批禁直改 |
|
||||
| `design/art/asset-path-map.md`/`art-assets-checklist.md` | 旧 terrain_* 退役、seal_mark 保留、普通数字色牌退役+封印格色牌例外、程序化材质无入包 PNG | 设计段已同步;实现删除资产后按反哺点核对 |
|
||||
| `design/engineering/architecture/architecture.md:178` | 单格两绘制域件行把 `cell_base_layer` 记为在役组件;本批删除该件、新增地形/浮空/阴影层 | 架构文档写权限=用户专属(2026-11-07 裁):实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
|
||||
| `design/engineering/architecture/architecture.md「2. 事件/信号路径」呈现层订阅禁令` | 单格两绘制域件行把 `cell_base_layer` 记为在役组件;本批删除该件、新增地形/浮空/阴影层 | 架构文档写权限=用户专属(2026-11-07 裁):实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
|
||||
| `game/tests/README.md` 能力表 | 新增 6 条能力;旧「地形瓦片套与格面数字可读」保留(删除归写卡段后续;实现批禁写);「战斗屏三区几何」代表用例改名 | 写卡段本批入表(本卡同 commit);实现批只核对名字与实际落地一致 |
|
||||
| `roadmap.md`/`design/gdd/08-Alpha版本标准.md`/`待办清单.md` | 本卡已写/待编排状态 | 编排段与收尾段推进;实现批禁直改 |
|
||||
|
||||
@@ -346,23 +346,23 @@
|
||||
|
||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+通过判据) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1. D 区侧栏+提示条退役(判据:`design/ux/battle.md:124`、`design/gdd/systems/表现与支撑/HUD框架.md:62`) | `battle_layout_table.gd`、`battle_layout.tres`、`ap_bar_view.gd`、`board_zone_view.gd:23-37,74-79,91-92` | `board_side_rail_test.gd:_test_side_rail_layout`+`_test_signals`;`stage_background_test.gd:_test_side_rail_width_from_table`;`layout_probe.gd:_ready` | 单元+探针 | `BoardZoneView.new(layout)`→`ap_bar`/`_board_area`(测试读私有) | 左/右栏各宽 200、board_area 高 548、`side_rail_w==200`、hint 节点不存在、toast 不压棋盘 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
|
||||
| 2. 格边/原点/顶预留/重建接线(判据:`design/ux/battle.md:140,144`) | `board_view.gd:205-232,403-404,428-439`、`main.gd:470`、`main_debug_flow.gd:104` | `board_terrain_test.gd:_test_cell_formula_base`+`_test_hit_test_logical_rect`;`layout_probe.gd:_ready`;`ui_input_probe.gd` | 单元+探针 | `BoardView.set_cell_area(Vector2(1036,548), 200)`/`rebuild(..., 200)` | `_cell_for(12, Vector2(1036,548), 200)==38`、`_cell_for(14, Vector2(1036,548), 200)==32`、局部原点 (279,44)/(281,44)、屏幕 (523,296)、全格命中 | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
|
||||
| 3. 合并岩体+连续地面(判据:`design/art/art-bible.md:170,173`) | `board_terrain_layer.gd`(新增)、`board_view.gd`、删 `cell_base_layer.gd` | `board_terrain_test.gd:_test_merged_mass_geometry`;`standee_present_values_test.gd:_init`(V11 源码锚改指 `board_terrain_layer.gd`);三关 `board_shot_probe` 截图 | 单元+探针 | `BoardView.rebuild()`→`_world/TerrainBack`、`_world/TerrainFront` 的 `mass_rects()` | 四邻合并、相邻墙顶搭接 2、无墙顶内框、地面无缝、板边外延 ESHIFT;V11 口沿高光新锚在位且全套件绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 4. 投影/崖面/受光(判据:`design/art/art-bible.md:171,172,174`) | `board_terrain_layer.gd` | `board_terrain_test.gd:_test_projection_ratios`;三关 golden | 单元+探针 | 同上 | 38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘高光=本关受光棱、东崖 4×55、北/西 2+2+外2、南/东内阴影 3×2 自 0.217 起、投影 4×4 α0.44/0.30/0.16/0.07 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 5. 脚底排序遮挡(判据:`design/art/art-bible.md:175`) | `board_terrain_layer.gd`、`board_world.gd:39,48` | `board_terrain_test.gd:_test_depth_order`;三关截图 | 单元+探针 | 构造 hero 行与南邻墙;`terrain_metrics()["order"]`/`CellUnit.z_index` | back 含脚底≤hero 的岩体、front 含 >hero 的岩体;北侧格件 z=0、南侧格件 z=3、**封印格(含南侧)z=0**、`ContactGlow`/`MemoryGround` 全局 -1;南岩体覆盖小人脚底像素 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 6. 浮空字+阴影圆几何/对比(判据:`design/art/art-bible.md:176`、`design/ux/battle.md:307`) | `board_float_layer.gd`(新增)、`board_label_shadow_layer.gd`(新增) | `board_float_label_test.gd:_test_label_geometry`+`_test_shadow_circle`+`_test_contrast`;`ui_contrast_probe.gd` 浮空字段 | 单元+探针 | `BoardView.refresh()`→`FloatLayer.set_entries()`/`_world/LabelShadow.setup()` | 字高 21、间距 15、视觉顶 38、线 2、1px 投影;圆 10×6、圆心格顶+7、z=0 低于 hero;**封印格无 entries/无圆**;四类底复合对比 ≥4.5 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
|
||||
| 7. 浮空层最顶/顶行不裁切(判据:`design/ux/battle.md:165,307,313`) | `board_view.gd` 层装配、`board_float_layer.gd` | `board_float_label_test.gd:_test_topmost_layer`+`_test_desaturation`;三关截图 | 单元+探针 | `BoardView` 固定名字子件 z 序与 entries/`set_desaturated()` | `FloatLayer` 为 BoardView 子 Control、z 最高;`TerrainBack`/`TerrainFront`/`LabelShadow` 固定名字在树;顶行 rect top=6 local;无元素遮数字/线;结算期浮空层与地形层同拍灰化 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
|
||||
| 8. 顶面锚点/封印/交互(判据:`design/art/art-bible.md:167,175`、`design/ux/battle.md:311-312`) | `board_view.gd`、`cell_mark_overlay.gd`、`seal_mark_layer`、`cell_type_glow_layer`、`board_cell_unit.gd` | `board_terrain_test.gd:_test_top_face_anchor`+`_test_seal_substrate`;`seal_mark_params_test.gd`;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.visual_rect`/`CellUnit.z_index`/封印格 `plate` | **封印圆心=逻辑格心(不偏移)**、变异/微光/墙格悬停按 -ESHIFT/-LIFT;地面路径按逻辑 rect;环径 82%±1;封印格 `plate=true`、`glyph` 为危/数字、无浮空/无圆、色牌叠法阵上;封印格 z=0 低于小人,其余格件北 0/南 3 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
|
||||
| 9. 迷雾几何/记忆态(判据:`design/art/art-bible.md:427-429`) | `board_cell_unit.gd:_draw_fog_layer`/`MemoryGround`、`board_view.gd` | `board_terrain_test.gd:_test_fog_rect`+`_test_memory_cover`;`ui_contrast_probe.gd` 迷雾段;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.fog_state`/`MemoryGround` | 墙格三块黑罩(顶面+南+东)覆盖、北/西邻格非岩顶地面像素零覆盖(岩顶投影可越入邻格屏幕区);地面格不越格;记忆态/退色不覆盖南邻岩顶(`MemoryGround` 只绘地面可见区,重叠区像素来自南邻墙体);封印格记忆态随格隐没;封印格地面=palette.light_edge;记忆态无浮空 entries;记忆墨对比 ≥4.5 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
|
||||
| 10. 命中逻辑格(判据:`design/ux/battle.md:140`) | `board_view.gd:428-439` | `board_terrain_test.gd:_test_hit_test_logical_rect` | 单元 | `BoardView.cell_center_local()`/`_cell_at()` | 全格 `_cell_at(cell_center_local(c))==c`;顶面左上角点按逻辑归北/西邻格;板外 (-9,-9) | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
|
||||
| 11. 旧资产退役/普通数字零底牌(判据:`design/art/art-bible.md:177,215`) | `game/assets/art/board/`、`tile_palette.gd`、`cell_base_layer.gd`、`terrain_tile_sets_test.gd` | `board_terrain_test.gd:_test_legacy_assets_absent`;`board_float_label_test.gd:_test_no_ordinary_plate_path`;`repo_structure_audit.py` | 单元+静态 | 扫描 `game/assets/art/board/` 与源码 | 零 `terrain_*`、零 `TilePalette`/`CellBaseLayer`/`u.base`、`seal_mark.png` 在库、普通数字零 `plate_digit`/`_digit_ink_mode`(封印格 `plate`/`DIGIT_PLATE` 为唯一例外) | 新增:旧瓦片退役与普通数字零底牌 |
|
||||
| 12. 侧栏信号/setter(判据:`design/ux/battle.md:163`) | `ap_bar_view.gd` | `board_side_rail_test.gd:_test_signals` | 单元 | 真实按钮 `pressed`/setter | `stop_pressed`/`refresh_confirmed`/`legend_toggled` 逐信号;`set_ap`/`set_rap`/`set_refresh_state` 读数 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
|
||||
| 13. 接触带延续(判据:`design/art/art-bible.md:168`) | `board_cell_unit.gd`、`board_view.gd:740,764-765` | `board_terrain_test.gd:_test_contact_glow`;`type_glow_test.gd` | 单元 | `BoardView.refresh()`→`ContactGlow.set_bands(..., ground_visible_rect)` | 英雄格地面侧接触带在位,正交整边/斜向角点+两半边,只绘地面可见区、不进岩体;全局 z=-1 | 既有:未开格类型微光(8 邻作用集、五组色相、零玩法写入) |
|
||||
| 14. 三关色板/互辨(判据:`design/art/art-bible.md:202,415`) | `board_terrain_palette.gd` | `board_terrain_test.gd:_test_palette_three_boards` | 单元+静态 | `palette_for("dungeon"/"underdark"/"deep_underdark")` | 三关八色与 art-bible v3.51 §4.1 逐值一致;三关同名槽位不全等(用户过审样张冻结);不变槽恒定;封印石读 `light_edge` | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 15. 取证面换代(判据:`game/tests/golden/README.md:28,31`) | `board_shot_probe.gd`、`type_glow_shot_probe.gd`、`layout_probe.gd`、`ui_input_probe.gd`、`ui_contrast_probe.gd` | 三关 `board_shot_probe`+渲染闸;`type_glow_shot_probe`;`layout_probe.gd:_ready`;`ui_input_probe.gd`;`ui_contrast_probe.gd` | 探针+渲染闸 | `res://probe/board_shot_probe.tscn`;`tools/render_gate.sh` | 视图 1036×548、侧栏 200、裁剪全幅、顶面 rect 微光圈、**封印取证保持逻辑格 rect(圆心格心)**、三关 golden 重制后 0 差异 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 16. 测试入口/能力审计(判据:`design/engineering/test-conventions.md:196`) | `run_all.gd:225`、新增测试件、`game/tests/README.md` | `bash tools/run_all_gates.sh --code`;`capability_audit.py` | 集成 | 单元测试全套件 | 三新套件在册、terrain 套件移除、能力审计红项 0、全绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 17. 产出物/独立审计(判据:`design/engineering/test-conventions.md:147`) | `reports/` | 末卡产出物落位;`reports/iter<N>-验收审计-<日期>.md` | 集成 | 实现报告/反哺点清单/审计报告 | 三件齐、逐行勾选、审计未过不合并 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 1. D 区侧栏+提示条退役(判据:`design/ux/battle.md「Layout Zones」基准屏宽`、`design/gdd/systems/表现与支撑/HUD框架.md「战斗屏三区双舞台:挖掘与结算同屏不切场景」基准屏宽`) | `battle_layout_table.gd`、`battle_layout.tres`、`ap_bar_view.gd`、`board_zone_view.gd:23-37,74-79,91-92` | `board_side_rail_test.gd:_test_side_rail_layout`+`_test_signals`;`stage_background_test.gd:_test_side_rail_width_from_table`;`layout_probe.gd:_ready` | 单元+探针 | `BoardZoneView.new(layout)`→`ap_bar`/`_board_area`(测试读私有) | 左/右栏各宽 200、board_area 高 548、`side_rail_w==200`、hint 节点不存在、toast 不压棋盘 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
|
||||
| 2. 格边/原点/顶预留/重建接线(判据:`design/ux/battle.md「封印格呈现预览」radialGradient,144`) | `board_view.gd:205-232,403-404,428-439`、`main.gd:470`、`main_debug_flow.gd:104` | `board_terrain_test.gd:_test_cell_formula_base`+`_test_hit_test_logical_rect`;`layout_probe.gd:_ready`;`ui_input_probe.gd` | 单元+探针 | `BoardView.set_cell_area(Vector2(1036,548), 200)`/`rebuild(..., 200)` | `_cell_for(12, Vector2(1036,548), 200)==38`、`_cell_for(14, Vector2(1036,548), 200)==32`、局部原点 (279,44)/(281,44)、屏幕 (523,296)、全格命中 | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
|
||||
| 3. 合并岩体+连续地面(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系,173`) | `board_terrain_layer.gd`(新增)、`board_view.gd`、删 `cell_base_layer.gd` | `board_terrain_test.gd:_test_merged_mass_geometry`;`standee_present_values_test.gd:_init`(V11 源码锚改指 `board_terrain_layer.gd`);三关 `board_shot_probe` 截图 | 单元+探针 | `BoardView.rebuild()`→`_world/TerrainBack`、`_world/TerrainFront` 的 `mass_rects()` | 四邻合并、相邻墙顶搭接 2、无墙顶内框、地面无缝、板边外延 ESHIFT;V11 口沿高光新锚在位且全套件绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 4. 投影/崖面/受光(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系,172,174`) | `board_terrain_layer.gd` | `board_terrain_test.gd:_test_projection_ratios`;三关 golden | 单元+探针 | 同上 | 38 格 LIFT=17、ESHIFT=4、南崖 17×42、南崖顶缘高光=本关受光棱、东崖 4×55、北/西 2+2+外2、南/东内阴影 3×2 自 0.217 起、投影 4×4 α0.44/0.30/0.16/0.07 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 5. 脚底排序遮挡(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系`) | `board_terrain_layer.gd`、`board_world.gd:39,48` | `board_terrain_test.gd:_test_depth_order`;三关截图 | 单元+探针 | 构造 hero 行与南邻墙;`terrain_metrics()["order"]`/`CellUnit.z_index` | back 含脚底≤hero 的岩体、front 含 >hero 的岩体;北侧格件 z=0、南侧格件 z=3、**封印格(含南侧)z=0**、`ContactGlow`/`MemoryGround` 全局 -1;南岩体覆盖小人脚底像素 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 6. 浮空字+阴影圆几何/对比(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系`、`design/ux/battle.md「D 区布局与棋盘画法预览」rect`) | `board_float_layer.gd`(新增)、`board_label_shadow_layer.gd`(新增) | `board_float_label_test.gd:_test_label_geometry`+`_test_shadow_circle`+`_test_contrast`;`ui_contrast_probe.gd` 浮空字段 | 单元+探针 | `BoardView.refresh()`→`FloatLayer.set_entries()`/`_world/LabelShadow.setup()` | 字高 21、间距 15、视觉顶 38、线 2、1px 投影;圆 10×6、圆心格顶+7、z=0 低于 hero;**封印格无 entries/无圆**;四类底复合对比 ≥4.5 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
|
||||
| 7. 浮空层最顶/顶行不裁切(判据:`design/ux/battle.md「封印格呈现预览」rect,307,313`) | `board_view.gd` 层装配、`board_float_layer.gd` | `board_float_label_test.gd:_test_topmost_layer`+`_test_desaturation`;三关截图 | 单元+探针 | `BoardView` 固定名字子件 z 序与 entries/`set_desaturated()` | `FloatLayer` 为 BoardView 子 Control、z 最高;`TerrainBack`/`TerrainFront`/`LabelShadow` 固定名字在树;顶行 rect top=6 local;无元素遮数字/线;结算期浮空层与地形层同拍灰化 | 新增:棋盘浮空数字与引导线(最顶层、顶部预留) |
|
||||
| 8. 顶面锚点/封印/交互(判据:`design/art/art-bible.md「3.2 环境几何」封印印记,175`、`design/ux/battle.md「封印格呈现预览」色牌`) | `board_view.gd`、`cell_mark_overlay.gd`、`seal_mark_layer`、`cell_type_glow_layer`、`board_cell_unit.gd` | `board_terrain_test.gd:_test_top_face_anchor`+`_test_seal_substrate`;`seal_mark_params_test.gd`;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.visual_rect`/`CellUnit.z_index`/封印格 `plate` | **封印圆心=逻辑格心(不偏移)**、变异/微光/墙格悬停按 -ESHIFT/-LIFT;地面路径按逻辑 rect;环径 82%±1;封印格 `plate=true`、`glyph` 为危/数字、无浮空/无圆、色牌叠法阵上;封印格 z=0 低于小人,其余格件北 0/南 3 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
|
||||
| 9. 迷雾几何/记忆态(判据:`design/art/art-bible.md「6.5 视野迷雾与黑暗区域渲染」记忆态`) | `board_cell_unit.gd:_draw_fog_layer`/`MemoryGround`、`board_view.gd` | `board_terrain_test.gd:_test_fog_rect`+`_test_memory_cover`;`ui_contrast_probe.gd` 迷雾段;`type_glow_test.gd` | 单元+探针 | `BoardView.refresh()`→`CellUnit.fog_state`/`MemoryGround` | 墙格三块黑罩(顶面+南+东)覆盖、北/西邻格非岩顶地面像素零覆盖(岩顶投影可越入邻格屏幕区);地面格不越格;记忆态/退色不覆盖南邻岩顶(`MemoryGround` 只绘地面可见区,重叠区像素来自南邻墙体);封印格记忆态随格隐没;封印格地面=palette.light_edge;记忆态无浮空 entries;记忆墨对比 ≥4.5 | 新增:棋盘顶面锚点与迷雾几何(微光、变异岩顶偏移,封印格心) |
|
||||
| 10. 命中逻辑格(判据:`design/ux/battle.md「封印格呈现预览」radialGradient`) | `board_view.gd:428-439` | `board_terrain_test.gd:_test_hit_test_logical_rect` | 单元 | `BoardView.cell_center_local()`/`_cell_at()` | 全格 `_cell_at(cell_center_local(c))==c`;顶面左上角点按逻辑归北/西邻格;板外 (-9,-9) | 新增:棋盘点击命中与格边公式(逻辑格矩形) |
|
||||
| 11. 旧资产退役/普通数字零底牌(判据:`design/art/art-bible.md「3.2 环境几何」棋盘地形体系,215`) | `game/assets/art/board/`、`tile_palette.gd`、`cell_base_layer.gd`、`terrain_tile_sets_test.gd` | `board_terrain_test.gd:_test_legacy_assets_absent`;`board_float_label_test.gd:_test_no_ordinary_plate_path`;`repo_structure_audit.py` | 单元+静态 | 扫描 `game/assets/art/board/` 与源码 | 零 `terrain_*`、零 `TilePalette`/`CellBaseLayer`/`u.base`、`seal_mark.png` 在库、普通数字零 `plate_digit`/`_digit_ink_mode`(封印格 `plate`/`DIGIT_PLATE` 为唯一例外) | 新增:旧瓦片退役与普通数字零底牌 |
|
||||
| 12. 侧栏信号/setter(判据:`design/ux/battle.md「封印格呈现预览」rect`) | `ap_bar_view.gd` | `board_side_rail_test.gd:_test_signals` | 单元 | 真实按钮 `pressed`/setter | `stop_pressed`/`refresh_confirmed`/`legend_toggled` 逐信号;`set_ap`/`set_rap`/`set_refresh_state` 读数 | 新增:D 区行动资源侧栏(AP 左栏、RAP 右栏、全高棋盘) |
|
||||
| 13. 接触带延续(判据:`design/art/art-bible.md「3.2 环境几何」可挖域接触带微光`) | `board_cell_unit.gd`、`board_view.gd:740,764-765` | `board_terrain_test.gd:_test_contact_glow`;`type_glow_test.gd` | 单元 | `BoardView.refresh()`→`ContactGlow.set_bands(..., ground_visible_rect)` | 英雄格地面侧接触带在位,正交整边/斜向角点+两半边,只绘地面可见区、不进岩体;全局 z=-1 | 既有:未开格类型微光(8 邻作用集、五组色相、零玩法写入) |
|
||||
| 14. 三关色板/互辨(判据:`design/art/art-bible.md「4.1 主色板」三关棋盘环境八色,415`) | `board_terrain_palette.gd` | `board_terrain_test.gd:_test_palette_three_boards` | 单元+静态 | `palette_for("dungeon"/"underdark"/"deep_underdark")` | 三关八色与 art-bible v3.51 §4.1 逐值一致;三关同名槽位不全等(用户过审样张冻结);不变槽恒定;封印石读 `light_edge` | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 15. 取证面换代(判据:`game/tests/golden/README.md「基线冻结与审核」才允许出候选图,31`) | `board_shot_probe.gd`、`type_glow_shot_probe.gd`、`layout_probe.gd`、`ui_input_probe.gd`、`ui_contrast_probe.gd` | 三关 `board_shot_probe`+渲染闸;`type_glow_shot_probe`;`layout_probe.gd:_ready`;`ui_input_probe.gd`;`ui_contrast_probe.gd` | 探针+渲染闸 | `res://probe/board_shot_probe.tscn`;`tools/render_gate.sh` | 视图 1036×548、侧栏 200、裁剪全幅、顶面 rect 微光圈、**封印取证保持逻辑格 rect(圆心格心)**、三关 golden 重制后 0 差异 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
| 16. 测试入口/能力审计(判据:`design/engineering/test-conventions.md「8.9 三层模型」本节的结构由文档域闸`) | `run_all.gd:225`、新增测试件、`game/tests/README.md` | `bash tools/run_all_gates.sh --code`;`capability_audit.py` | 集成 | 单元测试全套件 | 三新套件在册、terrain 套件移除、能力审计红项 0、全绿 | 新增:棋盘合并岩体与连续地面(深度遮挡、投影、崖面) |
|
||||
| 17. 产出物/独立审计(判据:`design/engineering/test-conventions.md「8.6 测试时机」不要求先红后绿`) | `reports/` | 末卡产出物落位;`reports/iter<N>-验收审计-<日期>.md` | 集成 | 实现报告/反哺点清单/审计报告 | 三件齐、逐行勾选、审计未过不合并 | 既有:战斗屏三区几何与棋盘格边长(分辨率两档×四档板型) |
|
||||
|
||||
**测试削弱申报**(允许删除/替换的旧断言):
|
||||
|
||||
@@ -450,7 +450,7 @@
|
||||
| 2 | 同上 | 记忆态整格填色与 `removed_dim` 在 z=3 会压南邻越入岩顶(约 15px) | 补写 | T3/T5 增 `_memory_ground` 低层子件与 `draw_removed_dim` 顶面 rect;§12 行9 增 `_test_memory_cover` |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | 阴影圆层在 `_world` 内却传 shell 原点,坐标系混用 | 补写 | `board_label_shadow_layer.setup(cell, cells)`(世界局部/格坐标),`circle_rects()` 明确世界局部;§7/T4 同步 |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | T3「整板悬崖只在 back 画」与 `BoardWorld` 悬崖 z=0 重复绘制 | 补写 | T3 改为背岩体;整板悬崖仍由 `BoardWorld._draw` 承担,禁重复绘制 |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | `architecture.md:178` 仍记 `cell_base_layer` 在役;架构写权限属用户 | 补写 | §6 增架构行:实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | `architecture.md「2. 事件/信号路径」呈现层订阅禁令` 仍记 `cell_base_layer` 在役;架构写权限属用户 | 补写 | §6 增架构行:实现批禁直改,T8 反哺点列「架构表该行待用户发令修订」 |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | 另立 `reports/复核-*.md` 与 2026-11-06 用户裁「不另设复核报告文件」冲突 | 自判 | 删除该报告;复核凭据只留本卡 §16(`pipeline_gate` 判据同步) |
|
||||
| 2 | 写卡会话自查(第二轮同轮) | 去饱和材质链未覆盖新层/低层子件,结算期会出现彩色例外 | 补写 | T3/T4 增 `use_parent_material` 与 `FloatLayer.material` 同拍挂摘;§12 行7 增 `_test_desaturation` |
|
||||
| 2 | 后台第二轮复核(补审,2026-11-07) | 顶面贴花一律 z=3 与 art-bible §1.2/§3.2「印记低于小人」冲突 | 补写 | 格件 z 按脚底行分档(北 0/南 3),`_resort_cell_decals`;art-bible v3.50 §1.2/§3.2 与 battle 层序同步 |
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### 1.1 目标
|
||||
|
||||
把营地十层换成重排后的新矩形:围墙 (0,220,1280,200)、大门/告示板尺寸不变跟随、其余六件(dummy/forge/tent/chest/notebook/campfire)按 2026-11-05 裁定落位;围墙最终件(1280×164,补尖+底边入土缺口)入包;**土线同时覆盖围墙底与门扇底**,实机读作插在土里;十层结构不变(不新增图层);最终墙件重新出预览并经用户过目;布局/土线/渲染/独立审计全部有读数;营地屏按 `test-conventions.md:100` 纳入渲染闸 golden 机器面。
|
||||
把营地十层换成重排后的新矩形:围墙 (0,220,1280,200)、大门/告示板尺寸不变跟随、其余六件(dummy/forge/tent/chest/notebook/campfire)按 2026-11-05 裁定落位;围墙最终件(1280×164,补尖+底边入土缺口)入包;**土线同时覆盖围墙底与门扇底**,实机读作插在土里;十层结构不变(不新增图层);最终墙件重新出预览并经用户过目;布局/土线/渲染/独立审计全部有读数;营地屏按 `test-conventions.md「8.2 四层与真实入口」测试项扩项` 纳入渲染闸 golden 机器面。
|
||||
|
||||
### 1.2 完成定义
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
| design/art/camp-scene-prompts.md §5 第 6 条 :244+第 13 条 | 第 6 条只载“宝箱离底、其余上移 46px”关系句;六件逐值已由第 13 条补录 | 已闭合(2026-11-08 补录);实现批不直改设计文档 |
|
||||
| design/ux/camp.md 第 29 行 | 现写围墙带/墙脚入土;门扇底土线需补 | 反哺点,归文档批 |
|
||||
| design/art/art-status-checklist.md 营地行 | 需补“围墙件最终件 2026-11-07 换代+土线”事实 | 反哺点,归文档批 |
|
||||
| game/tests/README.md:165 能力表 | 营地能力行代表用例需补 `check_soil_line`、`_test_gate_state_keeps_soil_cut`、camp golden | 实现批禁写;反哺点 |
|
||||
| game/tests/README.md「测试层级」试玩日志器 能力表 | 营地能力行代表用例需补 `check_soil_line`、`_test_gate_state_keeps_soil_cut`、camp golden | 实现批禁写;反哺点 |
|
||||
| roadmap.md / 待办清单.md | 本卡编入迭代与状态推进 | 待办条目已补回(状态「已写卡」);编入迭代归编排段 |
|
||||
| 体验验证清单.md | 游戏内终审登记项 | 归文档批/实现报告登记,实现批不直改 |
|
||||
|
||||
@@ -199,14 +199,14 @@
|
||||
|
||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 围墙显示矩形 220/200(判据出处 design/ux/camp.md:29) | `camp_scene_layout.tres` wall | V14 围墙矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | load 表+validate | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门/板跟随(判据出处 design/art/camp-scene-prompts.md:250) | `.tres` gate/board | V14 门扇/告示板矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 其余六件落位(判据出处 design/art/camp-scene-prompts.md:244+§5 第 13 条) | `.tres` 六件 | V14 六件落位钉值+几何红线(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect/hotspot 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门扇显示高 138(判据出处 design/art/camp-scene-prompts.md:250) | `camp_scene_view.gd` `EXPAND_IGNORE_SIZE` | `ui_struct_probe` camp V1 层贴图矩形(`ui_struct_probe.gd:_ready` camp 段) | 探针 | `res://probe/ui_struct_probe.tscn` | 节点 position/size | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 围墙最终件(判据出处 design/art/art-bible.md:404) | `scene_camp_wall.png` | T0 `palette_check`/`path_check`+最终墙预览过目 | 资产 | 文件读数+用户过目 | 尺寸 1280×164、不透明 12 色、柱尖/奶油描边/底缺口、源包 md5 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 土线覆盖围墙底+门扇底(判据出处 design/art/art-bible.md:405) | `camp_scene_view.gd` 土线裁切材质挂 wall/gate | `shot_checker.py:check_soil_line(img, failures)`+`shot_camp.png`:顶线 410–416、≥3 个不同顶线值、接缝差≤1px、边界下首行对背景同列颜色距离≤容差且非墙色、`top−1` 暗边、gate 底无直边/灰影 | 探针 | `shot_probe` 营地窗口化截图 | 截图像素:边界行/颜色距离/暗边亮度 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门扇状态切换保留土线(判据出处 design/art/art-bible.md:405) | `camp_scene_view.gd` `_apply_state`/`_apply_hover`/`_apply_disabled` | `camp_scene_layout_test.gd:_test_gate_state_keeps_soil_cut`:实例化 `CampSceneView`,对 gate 依次 NORMAL/HOVER/DISABLED,断言 `gate.material` 始终为土线材质、`desat` 参数随态变化 | 单元 | `camp_scene_view.gd` 真实类+`camp_scene_layout.tres` | `gate.material` 引用+shader uniform 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 营地屏渲染不回归+golden(判据出处 design/engineering/test-conventions.md:100) | 十层+土线整体;`tools/render_gate.sh` camp 段;`game/tests/golden/<platform>/camp.png` | `render_gate.sh` 七屏+A-D+土线机检+camp golden 逐像素 | 探针 | `bash tools/render_gate.sh game` | 截图色彩/骨架/土线/camp.png 逐像素 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 围墙显示矩形 220/200(判据出处 design/ux/camp.md「场景构成与七物件绑定」地平线在终稿) | `camp_scene_layout.tres` wall | V14 围墙矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | load 表+validate | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门/板跟随(判据出处 design/art/camp-scene-prompts.md「5. 已裁」围墙显示几何与墙脚入土) | `.tres` gate/board | V14 门扇/告示板矩形钉值(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 其余六件落位(判据出处 design/art/camp-scene-prompts.md「5. 已裁」宝箱离底 第 13 条) | `.tres` 六件 | V14 六件落位钉值+几何红线(`camp_scene_layout_test.gd:_test_layout_hotspot_geometry`) | 单元 | 同上 | texture_rect/hotspot 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门扇显示高 138(判据出处 design/art/camp-scene-prompts.md「5. 已裁」围墙显示几何与墙脚入土) | `camp_scene_view.gd` `EXPAND_IGNORE_SIZE` | `ui_struct_probe` camp V1 层贴图矩形(`ui_struct_probe.gd:_ready` camp 段) | 探针 | `res://probe/ui_struct_probe.tscn` | 节点 position/size | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 围墙最终件(判据出处 design/art/art-bible.md「6.2 营地场景」交付形态) | `scene_camp_wall.png` | T0 `palette_check`/`path_check`+最终墙预览过目 | 资产 | 文件读数+用户过目 | 尺寸 1280×164、不透明 12 色、柱尖/奶油描边/底缺口、源包 md5 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 土线覆盖围墙底+门扇底(判据出处 design/art/art-bible.md「6.2 营地场景」墙脚入土线) | `camp_scene_view.gd` 土线裁切材质挂 wall/gate | `shot_checker.py:check_soil_line(img, failures)`+`shot_camp.png`:顶线 410–416、≥3 个不同顶线值、接缝差≤1px、边界下首行对背景同列颜色距离≤容差且非墙色、`top−1` 暗边、gate 底无直边/灰影 | 探针 | `shot_probe` 营地窗口化截图 | 截图像素:边界行/颜色距离/暗边亮度 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 门扇状态切换保留土线(判据出处 design/art/art-bible.md「6.2 营地场景」墙脚入土线) | `camp_scene_view.gd` `_apply_state`/`_apply_hover`/`_apply_disabled` | `camp_scene_layout_test.gd:_test_gate_state_keeps_soil_cut`:实例化 `CampSceneView`,对 gate 依次 NORMAL/HOVER/DISABLED,断言 `gate.material` 始终为土线材质、`desat` 参数随态变化 | 单元 | `camp_scene_view.gd` 真实类+`camp_scene_layout.tres` | `gate.material` 引用+shader uniform 取值 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
| 营地屏渲染不回归+golden(判据出处 design/engineering/test-conventions.md「8.2 四层与真实入口」测试项扩项) | 十层+土线整体;`tools/render_gate.sh` camp 段;`game/tests/golden/<platform>/camp.png` | `render_gate.sh` 七屏+A-D+土线机检+camp golden 逐像素 | 探针 | `bash tools/render_gate.sh game` | 截图色彩/骨架/土线/camp.png 逐像素 | 既有:营地场景图十层铺底与门洞留空呈现 |
|
||||
|
||||
注:未删改 V14 旧断言;新增钉值、门扇状态土线保留单测、土线机检与 camp golden 属追加。测试削弱申报:无。
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
| 2 | 同上 | “其余物件 z4–z6”与视图子节点 0–9 混淆 | 自判 | §3 写明视图子节点序 0–9+设计 z 层 wall1/gate3/其余 z4–z6 |
|
||||
| 2 | 同上 | 单一材质无法处理 gate 局部 x 的 +520 偏移 | 补写 | §3 钉 `gx=UV.x*u_width+u_x_offset`(wall 0/1280;gate 520/240) |
|
||||
| 2 | 同上 | gate NORMAL 置 null、DISABLED 换 `_desat_mat` 会抹掉土线 | 补写 | §3 钉土线材质常驻+`desat` uniform;§7 增行 7;新增单测 `_test_gate_state_keeps_soil_cut` |
|
||||
| 2 | 同上 | 缺 camp golden(`test-conventions.md:100`) | 补写 | §1.2/§6 T2/T3/§7 行 8/§11/§12 增 camp golden;`render_gate.sh`+`golden_baseline_refresh.sh --camp` |
|
||||
| 2 | 同上 | 缺 camp golden(`test-conventions.md「8.2 四层与真实入口」测试项扩项`) | 补写 | §1.2/§6 T2/T3/§7 行 8/§11/§12 增 camp golden;`render_gate.sh`+`golden_baseline_refresh.sh --camp` |
|
||||
| 2 | 同上 | 土线机检写死 1280 且“同源”判据循环 | 补写 | §6 T2 改为按截图宽高比例取样;对 `scene_camp_bg.png` 同列颜色距离+非墙色;容差归白名单 |
|
||||
| 2 | 同上 | 缺文件结构图 | 补写 | 增 §5.5 文件结构图 |
|
||||
| 2 | 同上 | 测试函数名未钉(“或等价函数”、§9 循环) | 补写 | 钉 `check_soil_line(img: Image.Image, failures: list) -> None`+`_test_gate_state_keeps_soil_cut`;§7/§9 同步 |
|
||||
|
||||
@@ -32,7 +32,7 @@ design/gdd/systems/表现与支撑/数据配置.md v1.4:
|
||||
- F6 生产表安全余量:enemy.tres battle/boss 行 atk∈{1,3}(atk_max≤4,:16/:309 等)、elite 行 atk=2/atk_max=3(:217-219)、hero.tres:7 max_hp=26——新检查对生产表恒过(空难度表跳过)。
|
||||
- F7 单测先例:game/tests/unit/core/config_db_cross_validator_test.gd:49-87——夹具直构表对象、ValidatorScript.new() 直调、Kit.check 断言、每函数带「判据出处」注记;套件登记 game/tests/run_all.gd:259 expect=0。
|
||||
- F8 致命类先例:game/tests/unit/data_config/reward_dangling_treasure_test.gd:39-56——Kit.copy_tables 复制生产表到 user:// 夹具目录、文本注入违规、ConfigDBScript.new().load_tables(BAD_DIR,false) 正式通道、退出码协议 1=正确拒绝/2=放行回归;登记形态 run_all.gd:178 expect=1 negative=true。
|
||||
- F9 能力清单:game/tests/README.md:206 有「敌人技能池跨表链接校验」行(本批 :207 新增「跨表量级校验」行);:231 数据配置覆盖矩阵行不含跨表量级校验。
|
||||
- F9 能力清单:game/tests/README.md「测试层级」状态效果结算链 有「敌人技能池跨表链接校验」行(本批 :207 新增「跨表量级校验」行);:231 数据配置覆盖矩阵行不含跨表量级校验。
|
||||
- F10 gdstyle 基线:tools/gdstyle_baseline.txt 无 config_db_cross_validator.gd 与 hero_table.gd 键(均在默认阈值内);校验器现行 func 总数 14(公开 2:cross_validate/validate_skill_pool_links)。
|
||||
|
||||
## 4. 设计契约(违反即返工,🔴 触碰=L3 停机呈报)
|
||||
@@ -81,7 +81,7 @@ design/gdd/systems/表现与支撑/数据配置.md v1.4:
|
||||
|
||||
- [ ] S13 读数:直跑 gdstyle 对 config_db_cross_validator.gd 与 hero_table.gd 记改前读数(两文件基线无键=默认阈值内;预期改后公开方法 2→3、func 14→≤17,仍阈值内,基线零增键)。
|
||||
- [ ] hero_table.gd 增常量 `const MAX_HP_DOMAIN_MAX := 999`,:16 域检查上界改引常量(语义不变);跑 hero 相关单测最窄确认(config_db_test.gd 全套件直跑,命令见验证闸节)。
|
||||
- [ ] 校验器新增 `func validate_attack_magnitude(loaded: Dictionary, push_diag: Callable) -> void`:取 enemy/difficulty/hero 三表,任一 null 早退(单表已报错不连锁,同 :12-13 先例);难度表 rows 为空早退(数据配置.md:132);乘数上界=全行 atk_mult(缺省 1.0)逐个钳制到 DifficultyTable.MULT_MIN/MULT_MAX 后取最大;逐敌行——row_kind="boss" 跳过(:132),攻击上界=有 atk_max 取 atk_max 否则 atk(:130);乘积 > HeroTable.MAX_HP_DOMAIN_MAX 即 push_diag.call("error", "cross_magnitude", 消息含 enemy_id/行键、乘积值、域上界)。
|
||||
- [ ] 校验器新增 `func validate_attack_magnitude(loaded: Dictionary, push_diag: Callable) -> void`:取 enemy/difficulty/hero 三表,任一 null 早退(单表已报错不连锁,同 :12-13 先例);难度表 rows 为空早退(数据配置.md「跨表量级校验:组合数值的上界不得突破目标字段的取值域」难度表为空表时跳过本检查);乘数上界=全行 atk_mult(缺省 1.0)逐个钳制到 DifficultyTable.MULT_MIN/MULT_MAX 后取最大;逐敌行——row_kind="boss" 跳过(:132),攻击上界=有 atk_max 取 atk_max 否则 atk(:130);乘积 > HeroTable.MAX_HP_DOMAIN_MAX 即 push_diag.call("error", "cross_magnitude", 消息含 enemy_id/行键、乘积值、域上界)。
|
||||
- [ ] cross_validate 在 ⑦(:24)后接线 `_cv_attack_magnitude` 私有包装(缺表早退语义与 ⑤⑥⑦ 同款),第⑧项注释编号沿用既有圈码形态。
|
||||
- [ ] 单测五函数落地(签名与断言见验证闸 V1–V5),经 cross_validate 真实通道驱动(夹具 loaded 字典含三被测表+status_effects/reward 用 new() 空行+settlement 夹具=SettlementTable.new() 且 core=SettlementCoreTable.new(),source_label_map 填齐七必需键 safe_cell/seal_hit/mine_hit/clear_reward/hero_attack/enemy_action/seal_miss(值任意)、effect_pool_map 留空——否则②读 null core 脚本错误、③报 7 条 segorder_violation 污染零错断言,config_db_cross_validator.gd:68/:74-78;此三表过 :12-13 早退门);难度夹具行键=level_index/node_depth/hp_mult/atk_mult(difficulty_table.gd:7 声明面),英雄夹具=HeroTable.new()(检查只读域常量不读现行值);每函数带「判据出处」注记指向数据配置.md 行锚。
|
||||
- [ ] 直跑该单测套件绿(命令见验证闸节),读数写进本步提交。
|
||||
@@ -92,7 +92,7 @@ design/gdd/systems/表现与支撑/数据配置.md v1.4:
|
||||
取用:T0 的 `validate_attack_magnitude`(经 load_tables 间接消费,无直调)。产出:`cross_magnitude_fatal_test.gd`(run_all.gd 登记行)。
|
||||
|
||||
- [ ] 新建 game/tests/unit/data_config/cross_magnitude_fatal_test.gd,形态照 F8 先例:Kit.copy_tables("res://data/tables", "user://cross_magnitude_fixture") → 双表注入:enemy.tres 首行三改 `"atk": 1`→`"atk": 500`、`"atk_min": 0`→`"atk_min": 500`、`"atk_max": 2`→`"atk_max": 500`(首个 goblin battle 行锚 :16-18;该行带攻击区间,中点恒等锚 enemy_table.gd:134 要求 atk=(min+max)/2——只改 atk 则单表中点锚报错且跨表检查读上界=atk_max=2 不触发,三改保单表自洽+跨表上界 500)。注入取首现位置:find 定位+substr 拼接(照 F8 先例 substr 形态,reward_dangling_treasure_test.gd:27-30);禁 String.replace 全量替换——同值串遍布全表,且 :334-336/:362-364 行 atk_min=1 会被打破中点锚。difficulty.tres `rows = []` 改 `rows = [{ "level_index": 1, "node_depth": 0, "hp_mult": 1.0, "atk_mult": 3.0 }]`(500×3=1500>999 必触发)。
|
||||
- [ ] 断言协议:ConfigDBScript.new().load_tables(BAD_DIR,false) 返回 false 且 diagnostics 含 category="cross_magnitude" → quit(1);放行或无该诊断 → quit(2);夹具准备失败 → quit(2)。_init 函数体内首行写 `# 判据出处: design/gdd/systems/表现与支撑/数据配置.md:215 …` 注记(照 F8 :40 形态;G 道按函数扫,文件头注不计,capability_audit.py:347-410);文件头注另写明退出码协议。
|
||||
- [ ] 断言协议:ConfigDBScript.new().load_tables(BAD_DIR,false) 返回 false 且 diagnostics 含 category="cross_magnitude" → quit(1);放行或无该诊断 → quit(2);夹具准备失败 → quit(2)。_init 函数体内首行写 `# 判据出处: design/gdd/systems/表现与支撑/数据配置.md「验收标准」致命真的会死 …` 注记(照 F8 :40 形态;G 道按函数扫,文件头注不计,capability_audit.py:347-410);文件头注另写明退出码协议。
|
||||
- [ ] run_all.gd 致命类区(:178 邻域)增登记行 `{"path": "res://tests/unit/data_config/cross_magnitude_fatal_test.gd", "expect": 1, "negative": true}`。
|
||||
- [ ] 孤立直跑新套件确认退出码 1,再跑单元测试全套件确认登记生效且既有套件零回归,读数写进本步提交。
|
||||
|
||||
@@ -107,12 +107,12 @@ design/gdd/systems/表现与支撑/数据配置.md v1.4:
|
||||
|
||||
| # | 需求点(判据出处行锚) | 改动 | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| V1 | 越界组合加载期报错(design/gdd/systems/表现与支撑/数据配置.md:130) | 校验器第⑧项 | _test_magnitude_over_limit报cross_magnitude(夹具敌行 atk=500×难度行 atk_mult=3.0→1500>999;config_db_cross_validator_test.gd,_test_ 尾缀) | 单元 | ConfigDbCrossValidator.cross_validate(loaded,push_diag) | push_diag 收到 severity=error ∧ category="cross_magnitude" ∧ 消息含越界敌行键 | 新增:跨表量级校验 |
|
||||
| V2 | 合法组合与边界等值零误报(design/gdd/systems/表现与支撑/数据配置.md:214) | 同上 | _test_magnitude_legal_and_boundary_zero_error(三组:999×1.0 边界等值/100×2.0 域下/boss 行 atk=999×mult 3.0 豁免) | 单元 | 同 V1 | 三组各零 error;boss 组难度行 atk_mult=3.0 非空(若不跳过 boss 则 2997>999 必报——防空表跳过使豁免断言空转) | 新增:跨表量级校验 |
|
||||
| V3 | 空难度表跳过(design/gdd/systems/表现与支撑/数据配置.md:132) | 同上 | _test_magnitude_empty_difficulty_skipped | 单元 | 同 V1 | 敌 atk=999+难度 rows=[] 零 error | 新增:跨表量级校验 |
|
||||
| V4 | 区间取上限(design/gdd/systems/表现与支撑/数据配置.md:130) | 同上 | _test_magnitude_range_uses_atk_max | 单元 | 同 V1 | atk=350/atk_min=100/atk_max=600+乘数 2.0 → 报(600×2=1200>999);atk=250/atk_min=100/atk_max=400 → 零错(400×2=800);两组 atk 均满足区间中点恒等锚(enemy_table.gd:134) | 新增:跨表量级校验 |
|
||||
| V5 | 越域乘数按域边界值计(design/gdd/systems/表现与支撑/数据配置.md:130) | 同上 | _test_magnitude_mult_clamped_to_domain | 单元 | 同 V1 | atk=100+atk_mult=50.0(钳制 10.0)→ 报(100×10=1000>999);atk=99+同乘数 → 零错(990) | 新增:跨表量级校验 |
|
||||
| V6 | 致命真的会死(design/gdd/systems/表现与支撑/数据配置.md:215+:104) | 第⑧项经装载通道 | cross_magnitude_fatal_test.gd:_init(独立进程,expect=1 negative=true) | 单元(致命协议) | ConfigDB.load_tables(BAD_DIR,false) 正式通道 | 进程退出码 1 ∧ load_tables 返回 false ∧ diagnostics 含 cross_magnitude | 新增:跨表量级校验 |
|
||||
| V1 | 越界组合加载期报错(design/gdd/systems/表现与支撑/数据配置.md「跨表量级校验:组合数值的上界不得突破目标字段的取值域」敌人攻击) | 校验器第⑧项 | _test_magnitude_over_limit报cross_magnitude(夹具敌行 atk=500×难度行 atk_mult=3.0→1500>999;config_db_cross_validator_test.gd,_test_ 尾缀) | 单元 | ConfigDbCrossValidator.cross_validate(loaded,push_diag) | push_diag 收到 severity=error ∧ category="cross_magnitude" ∧ 消息含越界敌行键 | 新增:跨表量级校验 |
|
||||
| V2 | 合法组合与边界等值零误报(design/gdd/systems/表现与支撑/数据配置.md「验收标准」跨表量级护栏) | 同上 | _test_magnitude_legal_and_boundary_zero_error(三组:999×1.0 边界等值/100×2.0 域下/boss 行 atk=999×mult 3.0 豁免) | 单元 | 同 V1 | 三组各零 error;boss 组难度行 atk_mult=3.0 非空(若不跳过 boss 则 2997>999 必报——防空表跳过使豁免断言空转) | 新增:跨表量级校验 |
|
||||
| V3 | 空难度表跳过(design/gdd/systems/表现与支撑/数据配置.md「跨表量级校验:组合数值的上界不得突破目标字段的取值域」难度表为空表时跳过本检查) | 同上 | _test_magnitude_empty_difficulty_skipped | 单元 | 同 V1 | 敌 atk=999+难度 rows=[] 零 error | 新增:跨表量级校验 |
|
||||
| V4 | 区间取上限(design/gdd/systems/表现与支撑/数据配置.md「跨表量级校验:组合数值的上界不得突破目标字段的取值域」敌人攻击) | 同上 | _test_magnitude_range_uses_atk_max | 单元 | 同 V1 | atk=350/atk_min=100/atk_max=600+乘数 2.0 → 报(600×2=1200>999);atk=250/atk_min=100/atk_max=400 → 零错(400×2=800);两组 atk 均满足区间中点恒等锚(enemy_table.gd:134) | 新增:跨表量级校验 |
|
||||
| V5 | 越域乘数按域边界值计(design/gdd/systems/表现与支撑/数据配置.md「跨表量级校验:组合数值的上界不得突破目标字段的取值域」敌人攻击) | 同上 | _test_magnitude_mult_clamped_to_domain | 单元 | 同 V1 | atk=100+atk_mult=50.0(钳制 10.0)→ 报(100×10=1000>999);atk=99+同乘数 → 零错(990) | 新增:跨表量级校验 |
|
||||
| V6 | 致命真的会死(design/gdd/systems/表现与支撑/数据配置.md「验收标准」致命真的会死) | 第⑧项经装载通道 | cross_magnitude_fatal_test.gd:_init(独立进程,expect=1 negative=true) | 单元(致命协议) | ConfigDB.load_tables(BAD_DIR,false) 正式通道 | 进程退出码 1 ∧ load_tables 返回 false ∧ diagnostics 含 cross_magnitude | 新增:跨表量级校验 |
|
||||
|
||||
- 验证命令:单元套件直跑 `D:\code\godot\Godot_v4.7.2-stable_win64_console.exe --headless --path game --script res://tests/unit/core/config_db_cross_validator_test.gd`;致命套件同形换路径;全套件 `--script res://tests/run_all.gd`。
|
||||
- 测试方式两分法:V1–V6 全归调试夹具直构/夹具注入(能力验证);本批无玩家可见面,用户目检项=无。
|
||||
@@ -171,4 +171,4 @@ design/gdd/systems/表现与支撑/数据配置.md v1.4:
|
||||
| 1 | 只读子代理(未参与本卡撰写) | §16 占位句「节末申报复核报告落盘路径」为过期指令(2026-11-06 已裁不另设报告文件) | 补写 | 回填本节时已删该句;凭据=本节自身(req-card 必备结构第 17 节;pipeline_gate.py check_review :650-687 不查报告文件) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | V3 零错判据不能区分「空表跳过」与「缺省乘数 1.0」两种实现 | 自判 | 不改:敌 atk 域 [0,999]×1.0 恒 ≤999,两实现可观测面等价;V3 绑可观测契约仍抓空最大值崩溃与错误缺省 >1(依据 enemy_table.gd:115;req-card 判据绑定面口径只要求绑可观测提交面) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | F1 锚 :17-24 含一行 helper 调用(①–⑦链实在 :18-24) | 自判 | 不改::17 为 _effect_ids_of 调用,范围覆盖调用链、内容匹配,一行偏差不影响核对(config_db_cross_validator.gd:17-24 实读) |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 既有单测件判据注记锚指 数据配置.md:195 已漂移(历史遗留,非本批改动面) | 自判 | 不改:本批只增函数不触既有注记;G 道只查行号越界不查内容(capability_audit.py:401-403);日后触及该件另登记 |
|
||||
| 1 | 只读子代理(未参与本卡撰写) | 既有单测件判据注记锚指 数据配置.md「P1 / P2 后置」编辑器内表文件热重载自动化 已漂移(历史遗留,非本批改动面) | 自判 | 不改:本批只增函数不触既有注记;G 道只查行号越界不查内容(capability_audit.py:401-403);日后触及该件另登记 |
|
||||
Reference in new issue
Block a user