合并(断言补齐卡批·用户令): 写卡批合回——需求卡片成文(reports/需求卡片-断言补齐批-2026-11-02.md, V1-V16十六断言四域零行为改动)+README五行能力行入表+覆盖域表五处缺口句订正+待办条目8→已写卡; grilling两问两裁零待裁点; pipeline_gate PASS(6张卡口径); 合回后post-merge钩子自动跑CI全量域闸, 回执后台挂ci_watch
This commit is contained in:
commit
2f450f4b25
3 files changed
+188
-8
No files matched your search
+10
-5
@@ -99,6 +99,8 @@ tests/
|
||||
| 奖励三选一候选/刷新付费/呈现 | 奇物×节点奖励屏 | `AdventureRunner.present_node_curio()`(数据面);奖励节点覆盖层场景(呈现面) | `curio_refresh_paid_test.gd:_init`;`reward_overlay_test.gd:_run` |
|
||||
| GP 钱包/escrow/商店收口/共享池 | 地图战斗资源×商店 | `LevelRunner.shop.buy_product()`/`shop.player_request_refresh()`/`LevelRunner.close_wallet()`/`shop.set_shop_pool()` | `level_shop_economy_test.gd:_smoke_gp_wallet`;`level_shop_economy_test.gd:_smoke_shop_room`;`level_shop_economy_test.gd:_smoke_shop_pool` |
|
||||
| 元进度入账与锻造两轴 | 元进度×锻造工坊 | `MetaStateStore.apply_adventure_summary()`/`MetaStateStore.spend_keystone()`/`MetaStateStore.set_forge_route_level()` | `meta_progression_forge_test.gd:_meta_pricing_and_buy`;`meta_progression_forge_test.gd:_smoke_forge_axes` |
|
||||
| 锻造定价与购买闭环(全路线价格梯/多级购买扣款/拒购零副作用) | 锻造工坊 | `ForgeTable.level_price()`/`MetaProgression.forge_buy_level()` | `forge_table_test.gd:_test_price_ladder`;`meta_progression_forge_test.gd:_meta_pricing_and_buy`;`meta_progression_forge_test.gd:_test_forge_buy_reject` |
|
||||
| 锻造与相邻通道隔离(祝福件购买锻造零变化/默认轴与钥匙解耦/甲型切换双轴可感) | 锻造工坊×元进度 | `MetaProgression.forge_select()`/`hero_type_axes()`/商店购买口 | `meta_progression_forge_test.gd:_test_blessing_no_forge_leak`;`meta_progression_forge_test.gd:_test_default_axes_pre_key`;`meta_progression_forge_test.gd:_test_armor_switch_dual_axes` |
|
||||
| 天赋树购买与六键合成 | 天赋树 | `MetaProgression.tree_buy()`/`MetaStateStore.tree_state()`/`MetaStateStore.set_tree_level()` | `meta_progression_forge_test.gd:_smoke_tree`;`meta_progression_forge_test.gd:_smoke_tree_rules`;`tree_rules_v11_test.gd:_init` |
|
||||
| 秘宝结构冻结与 12 件效果 | 秘宝 | `TreasureItems.add_item()`/`query_inventory()`/`validate_use()` | `treasure_items_test.gd:_init`;`treasure_effects_test.gd:_init` |
|
||||
|
||||
@@ -150,6 +152,7 @@ tests/
|
||||
| 营地图鉴占位挂起态与反参照结构纪律 | 营地场景视图 | 布告板命中区 → `CampSceneView._gui_input()`(object_pressed 信号) → 图鉴占位视图;营地根态场景树审计 | `ui_struct_probe.gd:_ready`(占位禁词/禁行段)〔营地图批 V6〕;`ui_struct_probe.gd:_ready`(结构禁词段)〔营地图批 V9〕 |
|
||||
| 营地刷新单口与场景根 HUD 同步 | 营地刷新总线 | 写口尾 → `CampRefreshBus.refresh()` → 现开界面刷新+场景根 HUD 刷新 | `ui_struct_probe.gd:_ready`(顶栏位段)〔营地图批 V8〕;`ui_click_probe.gd:_ready`(写口尾刷新段) |
|
||||
| Esc 浮窗唤起与三出口动线 | 营地 Esc 流 | 营地场景根态合成 Esc 键事件→ `main_esc_flow.on_esc_input()` → `ui.flow.open/close`;浮窗三钮 `pressed` → 三出口 | `screen_flow_probe.gd:_ready`(Esc 唤起/子界面开态不唤起/再按关窗/非营地不唤起段)〔ESC批 V1〕;`screen_flow_probe.gd:_ready`(返回动线/设置双路径段)〔ESC批 V3/V4〕 |
|
||||
| 减动效开关存储契约(持久化回读/缺省值/引擎动效档应用) | 设置与本地化 | `SettingsStore.load_settings()`/`save_settings()`/`apply()` | `settings_store_test.gd:_test_settings_roundtrip`;`settings_store_test.gd:_test_settings_default`;`settings_store_test.gd:_test_settings_apply_chain` |
|
||||
| 营地顶栏 HUD 钥石读数与刷新单口同步 | 营地 HUD 栏 | 隔离存档实例 `meta_state._add_keystone()`→ 显式触发 `CampRefreshBus.refresh(camp_data)` → `camp_hud_band.refresh()` → `keystone_badge` 读数 | `screen_flow_probe.gd:_ready`(HUD 余额读数/刷新段)〔ESC批 V6〕;`ui_struct_probe.gd:_ready`(顶栏位结构段) |
|
||||
| 营地五窗统一窗壳形态 | 营地五界面 | 七物件命中区/笔记本 → `CampSceneView._gui_input()`(`object_pressed` 信号)→ 组合根分派开窗;窗板几何(居中定尺寸 720×640 起点)/遮罩/窗内滚动面为呈现提交面 | `screen_flow_probe.gd:_step_camp_window_shell`(窗壳形态段,计划用例——锚定 `reports/需求卡片-营地五界面真窗口化批-2026-11-02.md`)〔窗口化批 V1–V8〕 |
|
||||
|
||||
@@ -164,9 +167,11 @@ tests/
|
||||
| 加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域 | 数据配置×秘宝×奇物 | `ConfigDB.load_tables()` | `reward_dangling_treasure_test.gd:_init`;`counter_prefix_fatal_test.gd:_assert_rejected`;`treasure_target_violation_test.gd:_init` |
|
||||
| 表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 数据配置×敌人系统×地形变异×冒险结构 | `EnemyTable.validate()`/`VariationTable.variant_pool()`/`AdventureTable.validate()` | `table_structure_guard_test.gd:_smoke_enemy_bands`;`table_structure_guard_test.gd:_smoke_variation_framework`;`table_structure_guard_test.gd:_smoke_adventure_table` |
|
||||
| 难度修饰套乘:空表零行为/套乘生效/越域 clamp | 难度曲线与Boss | `UnitContainer.spawn()`/`ConfigDbResolver.resolve_difficulty_modifiers()` | `table_structure_guard_test.gd:_smoke_difficulty_table`;`config_db_resolver_test.gd:_test_difficulty_clamp` |
|
||||
| Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) | 难度曲线与Boss | `NodeMapGenerator.generate()`/`BattleOrchestrator.begin_battle()` | `node_map_generator_test.gd:_test_boss_exit_per_region`;`boss_gate_test.gd:_test_boss_node_spawns_boss_rowset` |
|
||||
| 锻造表 schema 正反与几何价格梯 | 锻造工坊 | `ForgeTable.level_price()`/`ForgeTable.route_rows()` | `forge_table_test.gd:_test_production_rows`;`forge_table_test.gd:_test_price_ladder`;`forge_table_test.gd:_test_negative_cases` |
|
||||
| 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理 | 战斗结算×数据配置×增益状态 | `DamageController.open_ticket()`/`StatusContainer.apply_effect()` | `system_contracts_test.gd:_test_damage_controller_vocabularies`;`system_contracts_test.gd:_test_rng_tag_closure`;`system_contracts_test.gd:_test_status_boolean_acceptance` |
|
||||
| 同名状态合并策略(叠加/累加/并存)与剩余次数语义 | 战斗循环×增益状态 | `StatusContainer.apply_effect()`(编排宿主 begin_battle 链) | `roll_multiplier_test.gd:_smoke_armor_roll` |
|
||||
| 状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) | 增益状态 | `StatusContainer.apply_effect()`/`decay_round()`/`notify_battle_end()` | `system_contracts_test.gd:_test_status_decay_and_clear`;`system_contracts_test.gd:_test_status_stack_full_reject`;`system_contracts_test.gd:_test_status_independent_branch`;`system_contracts_test.gd:_test_status_snapshot_first_grant` |
|
||||
| 敌人技能池跨表链接校验 | 数据配置×敌人系统 | `ConfigDbCrossValidator.validate_skill_pool_links()` | `config_db_cross_validator_test.gd:_test_all_links_valid`;`config_db_cross_validator_test.gd:_test_dangling_skill_id`;`config_db_cross_validator_test.gd:_test_cast_side_mismatch` |
|
||||
|
||||
**覆盖域表**(`design/gdd/systems/` 逐篇对照——状态三档:已覆盖/部分覆盖/未覆盖;部分与未覆盖行的缺口指待办清单条目,覆盖面提升时同批改本表):
|
||||
@@ -177,11 +182,11 @@ tests/
|
||||
| 冒险循环 | 关卡节点图生成.md | 节点图生成合法性与同种子复现;节点图生长递增与无解 fail-fast | 已覆盖 | — |
|
||||
| 冒险循环 | 关卡节点地图.md | 起关/选路/断点重生成同图(集成);信息迷雾类型可见性;关卡表消费侧校验与关卡推进 | 已覆盖 | — |
|
||||
| 冒险循环 | 奇物.md | 专长(奇物)授予与凭证保底;奖励三选一候选/刷新付费/呈现 | 已覆盖 | — |
|
||||
| 冒险循环 | 难度曲线与Boss.md | Boss 半血解锁技门控;行集寻址、行序保序与难度乘数 clamp;难度修饰套乘:空表零行为/套乘生效/越域 clamp | 部分覆盖 | 难度曲线整链与 Boss 出场门控无专项断言;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 冒险循环 | 难度曲线与Boss.md | Boss 半血解锁技门控;行集寻址、行序保序与难度乘数 clamp;难度修饰套乘:空表零行为/套乘生效/越域 clamp;Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) | 部分覆盖 | 机制面剩余缺口由「断言补齐批」承接;数值落带断言归 M4 数值批 |
|
||||
| 战斗循环 | 地图战斗资源.md | 清图奖励双份与零路径;GP 钱包/escrow/商店收口/共享池;封印与极性路由/不可逆 | 已覆盖 | — |
|
||||
| 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;同名状态合并策略(叠加/累加/并存)与剩余次数语义;封印与极性路由/不可逆 | 部分覆盖 | 增益叠层/衰减/清除结算链无断言;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;同名状态合并策略(叠加/累加/并存)与剩余次数语义;状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照);封印与极性路由/不可逆 | 部分覆盖 | 结算链剩余缺口由「断言补齐批」承接 |
|
||||
| 战斗循环 | 战斗结算.md | 伤害公式与掷点乘区;伤害单据编排与回放;轮内流与结算五段全序 | 已覆盖 | — |
|
||||
| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定;站桩显示档与素材分辨率绑定 | 部分覆盖 | 死亡灰化与减动效演出档仅探针与人工目检;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定;站桩显示档与素材分辨率绑定 | 已覆盖 | 死亡灰化与减动效演出档以探针+人工目检为终态(2026-11-02 用户裁除名,不再补自动断言) |
|
||||
| 战斗循环 | 敌人系统.md | 技能池数据面与回放独立;Boss 半血解锁技门控;敌人技能池跨表链接校验 | 已覆盖 | — |
|
||||
| 排雷循环 | 地形变异.md | 变异布置门控;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — |
|
||||
| 排雷循环 | 排雷玩法.md | 装板与开局免费展开(封锁格无资源、计入清图);挖/封印合法性与可辨拒绝(拒绝零副作用);封印不可逆与挖开封印格放行(兑付改判四情况) | 已覆盖 | — |
|
||||
@@ -191,13 +196,13 @@ tests/
|
||||
| 表现与支撑 | 存档序列化.md | 存档写盘⇄读回往返保真;三槽位隔离与激活失败回滚;槽位摘要窥视与坏槽三态;启动态无激活不写盘;旧档迁移链与断点续玩零跳号(集成);存档⇄RNG 快照往返保真(集成) | 已覆盖 | — |
|
||||
| 表现与支撑 | 教学引导.md | — | 未覆盖 | 教学形态与首遇时机待设计;见待办清单「教学形态未定」条 |
|
||||
| 表现与支撑 | 数据配置.md | 全表装载、就绪态与表清单目录对账;进度坐标查行:精确命中/向上取整/封顶/警告去重;运行期越域致命与进程非 0 退出;加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域;表结构守卫:域校验/行序键/跨字段互锁/配额锚 | 已覆盖 | — |
|
||||
| 表现与支撑 | 设置与本地化.md | — | 未覆盖 | 减动效开关本体仅系统测试与冒烟覆盖、无单元/集成断言,多语言切换面未建;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 表现与支撑 | 设置与本地化.md | 减动效开关存储契约(持久化回读/缺省值/引擎动效档应用) | 部分覆盖 | 存储契约断言由「断言补齐批」承接;多语言切换面未建(P1) |
|
||||
| 表现与支撑 | 音频.md | — | 未覆盖 | MVP 无音频(P1 后置,无断言面);见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 跨局循环 | 元进度.md | 元进度入账与锻造两轴 | 已覆盖 | — |
|
||||
| 跨局循环 | 天赋树.md | 天赋树购买与六键合成 | 已覆盖 | — |
|
||||
| 跨局循环 | 生涯.md | — | 未覆盖 | P6 后置未实装;见待办清单「「生涯」界面——冒险中数据回看的唯一承接处」条 |
|
||||
| 跨局循环 | 秘宝.md | 秘宝结构冻结与 12 件效果;加载期违规表拒绝:跨表悬空/计数器前缀/真视窄域 | 已覆盖 | — |
|
||||
| 跨局循环 | 锻造工坊.md | 锻造表 schema 正反与几何价格梯;元进度入账与锻造两轴 | 部分覆盖 | 价格梯仅长剑路线逐级验,GDD 无验收标准节(机检豁免在册);见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 跨局循环 | 锻造工坊.md | 锻造表 schema 正反与几何价格梯;元进度入账与锻造两轴;锻造定价与购买闭环(全路线价格梯/多级购买扣款/拒购零副作用);锻造与相邻通道隔离(祝福件购买锻造零变化/默认轴与钥匙解耦/甲型切换双轴可感) | 部分覆盖 | 六缺口(全路线价格梯/多级购买扣款/拒购零副作用/祝福件零泄漏/默认值解耦/甲型双轴)由「断言补齐批」承接 |
|
||||
|
||||
## 断言计数双口径(2026-10-08 迭代 19 卡① T4 订正)
|
||||
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
# 需求卡片:断言补齐批(2026-11-02)
|
||||
|
||||
> 一句话:为①增益状态结算链、②减动效开关存储、⑤Boss 出场门控、⑥锻造工坊结构四域补自动化断言——零行为改动、纯测试补齐,同批刷新能力清单缺口口径。
|
||||
> 来源:待办清单条目「能力清单覆盖缺口补齐——六类无断言面或设计未定项」(2026-10-29 登记,来源=会话提及)。
|
||||
|
||||
## 设计事实源
|
||||
|
||||
| 域 | 设计依据(唯一事实源) | 版本凭据 |
|
||||
|---|---|---|
|
||||
| ⑥ 锻造工坊 | `design/gdd/systems/跨局循环/锻造工坊.md` 验收标准节九条判据 | v0.11(2026-11-02) |
|
||||
| ① 增益状态 | `design/gdd/systems/战斗循环/增益状态.md` 结算链规则 | v1.4 |
|
||||
| ⑤ 难度曲线与Boss | `design/gdd/systems/冒险循环/难度曲线与Boss.md` 核心规则(机制面) | v1.2 |
|
||||
| ② 减动效开关 | `design/gdd/systems/表现与支撑/设置与本地化.md`(开关承诺)+ `design/gdd/ux/battle.md`(减动效双态承诺:延迟归零同帧直落+横幅静态化、可加速不可整体跳过) | v1.1 |
|
||||
|
||||
与待办清单条目 8 凭据(实况关联文档清单)一致;增益状态.md 以本表 v1.4 为准,待办条目实况中的 v1.1 记法由本批订正。
|
||||
|
||||
## 目标与完成定义
|
||||
|
||||
为条目 8 收窄后的四域剩余真缺口补 **13 个新断言函数+2 处既有函数扩展**;断言全数通过;能力清单(`game/tests/README.md`)同步刷新(5 行新增能力行+5 行覆盖域表缺口句订正)。
|
||||
完成定义=全部断言在当轮真实跑批中执行并通过+代码域闸全绿+合回后本地 CI 全量域闸全绿。
|
||||
|
||||
## 现状事实(代码级考证,2026-11-02)
|
||||
|
||||
### ① 增益状态结算链(game/core/status_container.gd)
|
||||
|
||||
- 授予路由:`apply_effect` :28-49 按 stack_policy 三臂路由(independent :41-43/accumulate :44-45/stack :46-47)。
|
||||
- 叠层/续时:`_apply_accumulate` :60-67(命中只加时长、层数恒 1、快照沿首授);`_apply_stack` :70-80(满层拒返 false、层数与时长零写入)。
|
||||
- 衰减:`decay_round` :121-134(先兑付后衰减、每实例每结算恰 −1、归 0 移除、返回移除数 k)。
|
||||
- 清除:`notify_battle_end` :137-143(战斗结束全清);`notify_battle_start` :16-22(开域+清残留)。
|
||||
- 可观测面:返回值 bool/int+只读投影 `query_active(side)`(effect_id/layers/remaining_settlements/effective_value=L×m)。
|
||||
- 已盖面(不动):迭代 48 卡①(git 1e35ab94)已盖叠层续时 V1/V2/V3(`roll_multiplier_test.gd:_smoke_armor_roll` :160-167);五段全序与衰减相位断言(`round_flow_skill_pool_test.gd:_smoke_settlement_segments` :382-449)。
|
||||
- 剩余缺口:衰减逐值与到期移除数、战斗结束全清、满层拒绝、independent 分支、快照沿首授——全部零断言(notify_battle_end 全测试目录零调用,grep 证实)。
|
||||
|
||||
### ② 减动效开关存储(game/presentation/settings_store.gd)
|
||||
|
||||
- 独立设置存储(不进存档):user://settings.cfg 节/键 motion/reduced(读 :26、写 :33);`reduced_motion` 默认 false(:12)。
|
||||
- 引擎档应用:`apply()` :38-45(reduced → UiKit.motion_scale=0.5,否则 1.0)。
|
||||
- 已盖面(不动):探针全链(`ui_click_probe.gd` 设置面段 :310-327:开→0.5、持久化回读、关→1.0);系统测试 V2b(`system_test.gd` :166-168);单元侧排播双态(`pacing_queue_test.gd` :120-125,直拨 UiKit.motion_scale 不经 store)。
|
||||
- 剩余缺口:store 本体零单元断言(持久化回读/缺省值/应用链);README :194 缺口句仍写「仅系统测试与冒烟覆盖」,与现役探针覆盖不符——本批订正。
|
||||
|
||||
### ⑤ Boss 出场门控(机制面)
|
||||
|
||||
- 门控链:`node_map_generator.gd` `_build_region` :338-352(每区域 boss 深度=L−r、恰一终点)→ `level_runner.gd:546` node_type 入参 → `battle_orchestrator.gd:283` row_kind 传参 → `config_db_resolver.gd:33-67` 行类路由(越域 fatal :41-43)→ boss 行集选出。
|
||||
- Σ×r_boss 无运行时承载(Boss hp 行值直填 enemy.tres;difficulty_table.gd:2-3 头注成文口径「Boss 数值走行值直填不经本表」)——本批不造运行时公式断言。
|
||||
- 已盖面(不动):resolver 路由与 clamp(`config_db_resolver_test.gd` 四函数);表侧 Boss 行集带键覆盖(`table_structure_guard_test.gd:_smoke_enemy_bands` :242-259);半血门与闩(`skill_unlock_test.gd`)。
|
||||
- 剩余缺口:每区域恰一 Boss 终点无专项断言(`node_map_generator_test.gd` 只断终点数与入口数 :79-89);「Boss 节点开战必选 boss 行集」端到端无直接断言。
|
||||
|
||||
### ⑥ 锻造工坊(meta_progression.gd+forge_table.gd+shop_session.gd)
|
||||
|
||||
- 解锁双通道单点:`_forge_route_unlocked` meta_progression.gd:126-139(初始持有∨直购∨练满前一档);直购写口 `forge_buy_unlock` :160-170(已解锁拒绝零收费),解锁价 200(forge.tres)。
|
||||
- 定价:`forge_table.gd:24-28` level_price = floor(基价 × (公比/100)^已购级数);表值基价 20/公比 150(forge.tres)。
|
||||
- 注入:`hero_override` :270-293(树淬炼 :280-288、分层相加 :289-293、树攻防恒 0);`_forge_axis_bonus` :297-302(只认选中路线、异常回退 0);参数面下传 main.gd:191-201;入账 adventure_runner.gd:89-97。
|
||||
- 默认值常驻:`hero_type_axes` :188-198(未点亮照常返回 normal/light)+ forge.tres:7-8 默认轴。
|
||||
- 拒购:`forge_buy_level` :144-155;余额闸零副作用(`meta_state_store.gd:18-22` spend_keystone 余额不足 return false 零写入)。
|
||||
- 存档:save_manager v7 forge_routes 域 :267-272(默认 weapon=sword/armor=light)+normalize 补齐 :295-311。
|
||||
- 祝福件通道:局内商店购买(shop_session.gd:71-91 legacy/:272-293 pool)写局内加算区(GP 币),与 forge_routes 代码零交集;绑定负断言零测试。
|
||||
- 已盖面(不动):双通道/锁死/公式对拍/树零攻防(`meta_progression_forge_test.gd` :432-455、:476-541);锁定态/两区三行/钮态(`forge_workbench_test.gd` :42-99);长剑价格梯纯函数(`forge_table_test.gd:_test_price_ladder` :91-99);购买链首两级(:411-420)。
|
||||
- 剩余缺口:全路线价格梯(非长剑四路线零梯断言)、购买链 45 档、拒购零副作用、祝福件零泄漏、默认值解耦、甲型双轴切换。
|
||||
|
||||
## 设计契约红线
|
||||
|
||||
- 🔴 **零行为改动**:本批只增测试断言与 README 能力行;禁触产品码、禁触 data/tables 行值——断言需要观测面而现役无 → 停卡呈报,禁为可测性改产品码(需求改动另走卡)。
|
||||
- 🔴 **判据绑可观测提交面**(test-conventions §8.4);禁变异类测试、禁撤销类取证。
|
||||
- 🔴 **RNG 单点**:⑤ 集成断言用固定种子经 RngService 封闭流,禁 randomize()/自建 RNG。
|
||||
- 🔴 **实现照单落名**:README 代表用例名=测试函数名唯一依据,名实不符=停卡退回写卡段;断言失败消息尾缀〔断言补齐批 Vn〕全仓可 grep。
|
||||
- 🔴 **测试削弱申报**:本批不删不改任何既有断言(迭代 48 V1-V3 零触碰);无允许削弱项。
|
||||
- 🔴 **Forge 表行值零触碰**(provisional 形态归 M4 数值批)。
|
||||
|
||||
## 范围边界
|
||||
|
||||
**做**:13 个新断言函数+2 处既有函数扩展+README 能力行增行与覆盖域表缺口句订正。
|
||||
|
||||
**不做**:②多语言(P1 功能缺口);③音频(P1 后置);⑤数值落带断言(provisional 归 M4);④死亡灰化/碎裂断言(2026-11-02 用户裁除名,探针+人工目检为终态);Σ×r_boss 运行时公式断言(无运行时承载,不造);满级特效(本期不做);为可测性改产品码(需求改动另走卡)。
|
||||
|
||||
## 关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| `game/tests/README.md` 覆盖域表 | 断言落地后覆盖状态变化(:180/:182/:184/:194/:200 五行) | 状态列翻转登记进反哺点清单,由用户裁决后归文档批落文(实现批禁写 README);缺口句订正属写卡段维护面,本批当场落 |
|
||||
| 两份 GDD(难度曲线与Boss/锻造工坊) | 断言绑定其验收标准节/规则节 | 无义务——零触面 |
|
||||
|
||||
## 任务卡 T0..T4
|
||||
|
||||
**T0 ①增益状态结算链断言(≈0.5 工作日)**
|
||||
|
||||
- [ ] T0-1 `game/tests/unit/contracts/system_contracts_test.gd` 新增四函数:`_test_status_decay_and_clear`〔V1/V2〕(衰减每结算恰 −1、归 0 移除并返回移除数 k;notify_battle_end 后 query_active 零行);`_test_status_stack_full_reject`〔V3〕(满层再授返 false、层数与 remaining 零写入);`_test_status_independent_branch`〔V4〕(直改已加载表 rows 追加 independent 试验行→授予两实例→并存独立结算,测毕还原);`_test_status_snapshot_first_grant`〔V5〕(accumulate 再授只加时长,origin_cell/round_index 沿首授)
|
||||
- [ ] T0-2 单元套全绿——里程碑步出口跑一次全套闸;波内修复只做出红最小单元的最窄确认
|
||||
|
||||
**T1 ②设置存储契约断言(≈0.5 工作日)**
|
||||
|
||||
- [ ] T1-1 新建 `game/tests/unit/presentation/settings_store_test.gd` 三函数:`_test_settings_roundtrip`〔V6〕(写 true→存→新实例回读 true,节/键 motion/reduced);`_test_settings_default`〔V7〕(无文件缺省 false);`_test_settings_apply_chain`〔V8〕(reduced→apply()→UiKit.motion_scale==0.5,false→1.0,测毕还原静态初值);隔离卫生:经 retarget() 指向临时 cfg,禁碰真实 user://settings.cfg(ui_click_probe 同款纪律)
|
||||
- [ ] T1-2 单元套全绿(同 T0-2 措辞)
|
||||
|
||||
**T2 ⑤Boss 门控断言(≈0.5 工作日)**
|
||||
|
||||
- [ ] T2-1 `node_map_generator_test.gd` 新增 `_test_boss_exit_per_region`〔V9〕(真实生成多区域图,每区域终点集恰一 type=="boss"、深度=区域深度 L−r)
|
||||
- [ ] T2-2 新建 `game/tests/unit/battle_settlement/boss_gate_test.gd`:`_test_boss_node_spawns_boss_rowset`〔V10〕(begin_battle(node_type="boss")→实例化敌人行键全部 row_kind=="boss";对照入参 node_type="battle" 预解析行集零 boss 行;固定种子经 RngService 流口)
|
||||
- [ ] T2-3 单元套全绿(同 T0-2 措辞)
|
||||
|
||||
**T3 ⑥锻造工坊断言(≈1 工作日)**
|
||||
|
||||
- [ ] T3-1 扩展 `forge_table_test.gd:_test_price_ladder`〔V11〕:六路线全量梯(逐级严格递增、floor 公式按表值推算不写死表值、满级档价=上限档)
|
||||
- [ ] T3-2 扩展 `meta_progression_forge_test.gd:_meta_pricing_and_buy`〔V12〕:长剑购买链走至 3 级(45 档扣款与余额递减断言)
|
||||
- [ ] T3-3 新增 `_test_forge_buy_reject`〔V13〕(余额不足与未解锁两路→false,等级与余额零变化)
|
||||
- [ ] T3-4 新增 `_test_blessing_no_forge_leak`〔V14〕(商店买攻击祝福+护甲祝福→forge_state 投影逐位不变)
|
||||
- [ ] T3-5 新增 `_test_default_axes_pre_key`〔V15〕(树钥匙未点亮→hero_type_axes 返回 normal/light)
|
||||
- [ ] T3-6 新增 `_test_armor_switch_dual_axes`〔V16〕(forge_select("heavy")→AC 轴 +2 且挨普通攻击修正 −1;切回 light 复原且等级保留)
|
||||
- [ ] T3-7 单元套全绿(同 T0-2 措辞)——里程碑步出口跑一次全套闸;波内修复只做出红最小单元的最窄确认
|
||||
|
||||
**T4 产出物落位卡(≈0.25 工作日)**
|
||||
|
||||
- [ ] T4-1 合并前写齐 `reports/iterN-实现报告-<日期>.md`(各卡状态+遗留读数义务+实现决定记录;本批零实机目检项——纯断言批无玩家可见面)
|
||||
- [ ] T4-2 合并前写齐 `reports/iterN-反哺点-<日期>.md`(覆盖域表五行状态列翻转与缺口句收敛,逐条写明落点与依据;实现批禁写 design/ 与根规则文件)
|
||||
|
||||
## 验证闸(改动—验收对照表)
|
||||
|
||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 增益衰减逐值与到期移除+战斗结束全清 | system_contracts_test.gd 新增一函数 | `_test_status_decay_and_clear`〔V1/V2〕 | 单元 | StatusContainer.apply_effect()/decay_round()/notify_battle_end() | 返回值+query_active 投影 | 新增:状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) |
|
||||
| 增益满层拒绝 | 同上文件新增一函数 | `_test_status_stack_full_reject`〔V3〕 | 单元 | StatusContainer.apply_effect() | 返回 false+投影层数/时长零变化 | 新增:状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) |
|
||||
| 增益独立并存+首授快照 | 同上文件新增两函数 | `_test_status_independent_branch`〔V4〕/`_test_status_snapshot_first_grant`〔V5〕 | 单元 | StatusContainer.apply_effect()+直改已加载表行(试验行) | 返回值+投影快照域 | 新增:状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) |
|
||||
| 减动效存储回读/缺省/应用链 | settings_store_test.gd 新文件三函数 | `_test_settings_roundtrip`〔V6〕/`_test_settings_default`〔V7〕/`_test_settings_apply_chain`〔V8〕 | 单元 | SettingsStore.load_settings()/save_settings()/apply() | ConfigFile 回读值+UiKit.motion_scale | 新增:减动效开关存储契约(持久化回读/缺省值/引擎动效档应用) |
|
||||
| 每区域恰一 Boss 终点 | node_map_generator_test.gd 新增一函数 | `_test_boss_exit_per_region`〔V9〕 | 单元 | NodeMapGenerator.generate() | 生成图节点 type/depth 投影 | 新增:Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) |
|
||||
| Boss 节点开战必选 Boss 行集 | boss_gate_test.gd 新文件一函数 | `_test_boss_node_spawns_boss_rowset`〔V10〕 | 集成 | BattleOrchestrator.begin_battle() | 实例化敌人行键 row_kind 投影 | 新增:Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) |
|
||||
| 全路线价格梯+多级购买扣款 | forge_table_test 扩展+meta_progression_forge_test 扩展 | `_test_price_ladder`(扩)〔V11〕/`_meta_pricing_and_buy`(扩)〔V12〕 | 单元 | ForgeTable.level_price()/MetaProgression.forge_buy_level() | 表值推算序列+扣款与余额递减 | 新增:锻造定价与购买闭环(全路线价格梯/多级购买扣款/拒购零副作用) |
|
||||
| 拒购零副作用 | meta_progression_forge_test 新增一函数 | `_test_forge_buy_reject`〔V13〕 | 单元 | MetaProgression.forge_buy_level() | 返回 false+余额/等级零变化 | 新增:锻造定价与购买闭环(全路线价格梯/多级购买扣款/拒购零副作用) |
|
||||
| 祝福件零泄漏 | meta_progression_forge_test 新增一函数 | `_test_blessing_no_forge_leak`〔V14〕 | 单元 | 商店购买口(shop_session 两条购买路径) | forge_state 投影逐位不变 | 新增:锻造与相邻通道隔离(祝福件购买锻造零变化/默认轴与钥匙解耦/甲型切换双轴可感) |
|
||||
| 默认值解耦+甲型双轴 | meta_progression_forge_test 新增两函数 | `_test_default_axes_pre_key`〔V15〕/`_test_armor_switch_dual_axes`〔V16〕 | 单元 | MetaProgression.hero_type_axes()/forge_select() | 返回值+hero_override 投影(AC 轴+matchup 修正) | 新增:锻造与相邻通道隔离(祝福件购买锻造零变化/默认轴与钥匙解耦/甲型切换双轴可感) |
|
||||
|
||||
表外备注:`game/tests/README.md` 五行缺口句订正=非行为改动(写卡段维护面,本批当场落,见「关联文档同步面」节)。
|
||||
|
||||
## 独立验收审计
|
||||
|
||||
执行体=迭代 loop 内启动的未参与实现子代理(2026-11-02 用户裁,test-conventions §8.7 默认通道);报告落 `reports/iterN-验收审计-<日期>.md`,逐行写「通过/缺漏/例外及依据」。审计四件事:逐行核对对照表(测试存在、当轮执行、尾缀可 grep、真实入口未绕改动点);抽查判据绑定面;检查测试削弱(本卡申报=无允许削弱项);核对内部字段直查受控例外(本卡零直查行)。未过不得合并。
|
||||
|
||||
## 异常分级
|
||||
|
||||
- **L1 自救**:断言消息文本、局部夹具命名、扩展函数内步序。
|
||||
- **L2 记录继续**:README 新行在旅程段内的插入行位(系统归属相邻处)——记入实现决定记录。
|
||||
- **L3 停机呈报**:①independent 试验行注入不可行→停卡呈报;⑤boss_gate 集成夹具不可行→停卡呈报;⑥甲型双轴观测面不足(AC 修正不随 select 变化)→停卡呈报——观测面不足=上游缺陷,禁自造注入破坏;机检键与本卡契约互斥→停卡退回写卡段。
|
||||
|
||||
## 代拍板白名单
|
||||
|
||||
- 测试内局部命名、常量、断言消息文本。
|
||||
- 扩展函数内步序编排。
|
||||
- README 新行的旅程段内插入行位。
|
||||
|
||||
## 待裁点
|
||||
|
||||
零待裁点,开工门=U0。
|
||||
|
||||
## 落位与可复用性预检
|
||||
|
||||
**新增文件 2 个:**
|
||||
|
||||
| 文件 | 职责 | 为什么不能复用既有 |
|
||||
|---|---|---|
|
||||
| `game/tests/unit/presentation/settings_store_test.gd` | SettingsStore 单元契约(回读/缺省/应用链) | pacing_queue_test 主题是排播节奏(直拨 UiKit 不经 store);ui_click_probe 是探针承载非单元套件(不入 run_all 单元登记);store 单元契约无既有唯一落点 |
|
||||
| `game/tests/unit/battle_settlement/boss_gate_test.gd` | Boss 节点开战必选 Boss 行集端到端 | node_map_generator_test 只测图结构;config_db_resolver_test/table_structure_guard_test 只测表面路由与带键覆盖;battle_narrator_test 只测呈现投影命名——端到端链(generator→begin_battle→spawn)无既有承载 |
|
||||
|
||||
**复用既有(全部扩展,不新增文件):** system_contracts_test.gd(增益状态单元契约既有宿主)、forge_table_test.gd/meta_progression_forge_test.gd(锻造既有宿主)、node_map_generator_test.gd(图结构既有宿主)。
|
||||
|
||||
**唯一面**:每条断言唯一函数承载;README 新行唯一;各新函数复用所在文件既有夹具(harness 不外散);零产品码触面。
|
||||
|
||||
**分层与交互**:全部新件在测试层(probe/sim/tests 不在 S9 扫描面,测量面直构惯例);Core 域断言经领域类公开方法进出(StatusContainer/NodeMapGenerator/MetaProgression/ForgeTable);集成断言实例化真实宿主链(battle_orchestrator),禁裸替身。
|
||||
|
||||
## 实现规范预算
|
||||
|
||||
- 新增两文件均为单元测试宿主:公开面仅 ` _init`(各文件 ≤6 个私有断言函数、零公开方法增长、成员 ≤5)——远低于 gdstyle 默认阈值(公开方法 ≤20/成员 ≤15)。
|
||||
- 存量触面:产品码零触面,S13 基线键零新增;扩展的四份存量测试件不入 gdstyle 基线(测试面直构惯例),无对账键。
|
||||
|
||||
## 拆分边界纪律
|
||||
|
||||
本卡非拆分/重构类(纯测试增补),不适用拆出单元条款;零删码,无「为机检保留无效成员」面。
|
||||
@@ -58,15 +58,16 @@
|
||||
#### 能力清单覆盖缺口补齐——六类无断言面或设计未定项(2026-10-29 登记,来源=会话提及)
|
||||
|
||||
**实况**:实际情况=2026-11-02 设计讨论闭合——④除名(用户裁:死亡灰化/碎裂属纯表现锦上添花,探针+人工目检已是合规终态,呈现与 battle.md 承诺行零触碰);范围收窄:④除名后余五类,其中②多语言半边(P1 功能缺口,归 owner 文档待设计问题清单)、③音频(P1 后置)、⑤数值落带半边(归 M4 数值批)三块延期不在本条,可写卡面=①增益状态结算链、②减动效开关、⑤机制门控、⑥锻造工坊结构四处。关联文档:
|
||||
- `game/tests/README.md` 覆盖域表 25 篇对照行(2026-10-29 立,缺口证据)
|
||||
- reports/需求卡片-断言补齐批-2026-11-02.md(2026-11-02,本条需求卡片——已写卡凭据)
|
||||
- `game/tests/README.md` 覆盖域表对照行(2026-10-29 立,缺口证据;2026-11-02 随卡刷新五行能力行与覆盖域口径)
|
||||
- `design/gdd/systems/跨局循环/锻造工坊.md` v0.11(2026-11-02,验收标准节九条判据落文——⑥写卡输入合同)
|
||||
- `design/gdd/systems/战斗循环/增益状态.md` v1.1(2026-10-26,①结算链规则定稿)
|
||||
- `design/gdd/systems/战斗循环/增益状态.md` v1.4(①结算链规则定稿)
|
||||
- `design/gdd/systems/冒险循环/难度曲线与Boss.md` v1.2(⑤机制门控规则定稿;数值带 provisional 归 M4)
|
||||
- `design/gdd/systems/表现与支撑/设置与本地化.md` v1.1(②减动效开关与呈现承诺现行口径)
|
||||
|
||||
**改动面**:游戏代码+工具代码
|
||||
|
||||
**状态**:文档设计已闭合+待写卡
|
||||
**状态**:文档设计已闭合+已写卡
|
||||
|
||||
#### 战斗域结构深拆批——效果发射端口+掷格/受理分件(2026-10-31 重立,来源=批次移交)
|
||||
|
||||
|
||||
Reference in new issue
Block a user