diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index 219dc90b..6d39948b 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -50,7 +50,7 @@ var action_economy: ActionEconomy var _enemy_system: UnitContainer var _status_effects: StatusContainer var _reward_economy: RewardEconomy -var aux_inventory: AuxItems # 迭代 7 T3——LevelRunner 注入的关卡域库存引用; +var aux_inventory: TreasureItems # 迭代 7 T3——LevelRunner 注入的关卡域库存引用; # 每战新建本类,库存不归本类所有——注入面 var _damage: DamageController # 伤害控制器(伤害管线单据化批 2026-09-24——单据唯一兑付管线) @@ -85,7 +85,7 @@ func _attune_has(item_id: String) -> bool: return attunement.has(item_id) -# 装备件表值读取(magnitude/effective_rounds 等——AuxItemTable 行;未装配不读表) +# 装备件表值读取(magnitude/effective_rounds 等——TreasureItemTable 行;未装配不读表) func _attune_row(item_id: String) -> Dictionary: return db.aux_item_row(item_id) if _attune_has(item_id) else {} diff --git a/game/core/config_db.gd b/game/core/config_db.gd index 0c893745..5d4e4bc5 100644 --- a/game/core/config_db.gd +++ b/game/core/config_db.gd @@ -24,10 +24,10 @@ const TABLE_MANIFEST := { "shop": "shop.tres", # GP+商店房实施批 2026-09-21(表与 schema 落籍归并行数据面——本批只接线加载与消费) "meta": "meta.tres", # 元进度实现批 2026-09-21(MetaTable 四行族——schema 与表同批落籍) "meta_tree": "meta_tree.tres", # 迭代 12 T8 双层 BD 天赋树(MetaTreeTable 定义表 Rule 4 豁免——R1 甲融合案 33 节点) - "aux_items": "aux_items.tres", # 迭代 7 T1 秘宝内容批(AuxItemTable 六行——定义表 Rule 4 豁免;罗盘 retired/失义件 deferred 标记见 schema 头注) + "aux_items": "treasure_items.tres", # 迭代 7 T1 秘宝内容批(TreasureItemTable 六行——定义表 Rule 4 豁免;罗盘 retired/失义件 deferred 标记见 schema 头注) "adventure": "adventure.tres", # 冒险结构实现批 2026-09-21(AdventureTable 建表——大奖励与钥石行值单点) "attunement_growth": "attunement_growth.tres", # 迭代 11 第①批 同调实施批 T1(AttunementGrowthTable 单行全局——同调位里程碑谓词表;单行先例 Rule 4 豁免) - "relics": "relics.tres", # 迭代 12 T1 双层 BD 规则改写型特性基建(RelicTable 定义表 Rule 4 豁免——AuxItemTable 先例;空表合法态=主时间线零扰动) + "relics": "relics.tres", # 迭代 12 T1 双层 BD 规则改写型特性基建(RelicTable 定义表 Rule 4 豁免——TreasureItemTable 先例;空表合法态=主时间线零扰动) } var action_economy: ActionEconomyTable @@ -47,7 +47,7 @@ var shop: ShopTable = null # 元进度实现批(2026-09-21):MetaTable 类型化持用(schema 与表同批落籍,无 shop 先例的落籍间隙问题) var meta: MetaTable var meta_tree: MetaTreeTable # 迭代 12 T8 类型化持用(消费面走 tree_node 访问器) -var aux_items: AuxItemTable # 迭代 7 T1 类型化持用(消费面走 aux_* 访问器) +var aux_items: TreasureItemTable # 迭代 7 T1 类型化持用(消费面走 aux_* 访问器) var adventure: AdventureTable var attunement_growth: AttunementGrowthTable # 迭代 11 第①批 T1 类型化持用(消费面走 attunement_* 访问器) var relics: RelicTable # 迭代 12 T1 类型化持用(消费面走 relic_* 访问器) diff --git a/game/core/config_db_cross_validator.gd b/game/core/config_db_cross_validator.gd index 6a26bb9d..3b425a0b 100644 --- a/game/core/config_db_cross_validator.gd +++ b/game/core/config_db_cross_validator.gd @@ -31,7 +31,7 @@ func cross_validate(loaded: Dictionary, push_diag: Callable) -> void: if eff != "" and eff != "gp_gain" and eff != "gp_loss" and not effect_ids.has(eff): push_diag.call("error", "dangling_effect", "RewardTable %s 引用不存在的 effect_id: %s" % [row.get("reward_id"), eff]) # ①b RewardTable aux 投放行双表校验(迭代 7 T1——reward_dangling_treasure):aux 行 effect_id = item_id, - # 须命中 AuxItemTable 活行(非 retired 非 deferred——罗盘退役/失义件不投放)。retired 行被引用=退役 + # 须命中 TreasureItemTable 活行(非 retired 非 deferred——罗盘退役/失义件不投放)。retired 行被引用=退役 # 后仍投放(连带错误),同拦。 var aux_live := {} var aux_tab = loaded.get("aux_items") diff --git a/game/core/level_runner.gd b/game/core/level_runner.gd index a500fe83..08ba4318 100644 --- a/game/core/level_runner.gd +++ b/game/core/level_runner.gd @@ -62,7 +62,7 @@ var base_override := {"atk": 0, "max_hp": 0, "armor_class": 0} # 永久强化 var _shop_purchased := {} # product_id → 已购档数(现价重算输入;冒险开始清零) # 协作对象私有(E1/E3 封装收口 2026-09-13):settlement 读取经 current_battle() 成文出口 var _settlement: BattleOrchestrator = null # 当前战斗编排器(关卡结束置 null) -var aux_inventory: AuxItems = null # 秘宝 关卡域库存(迭代 7 T3——AuxItems;跨战斗延续, +var aux_inventory: TreasureItems = null # 秘宝 关卡域库存(迭代 7 T3——TreasureItems;跨战斗延续, var _aux_unlocked := {} # aux 解锁门控集(迭代 7 T5——拍板③甲;空集=零投放) var _attunement: Array = [] # 同调装配集(迭代 11 第①批 T5——adventure params.attunement 下传,begin_battle enc 携带进战斗结算;空集=off 零扰动) var _attune_charges: Dictionary = {} # 同调主动件充能账本(迭代 11 第①批 T6——adventure 共享 dict 引用;settlement use_aux 扣减直改同引用) @@ -297,7 +297,7 @@ func present_resumed_choice() -> bool: # 断点道具库存回填(迭代 8 卡①——奖励节点已选道具随停点快照回局;幂等,先清后入受理序重排) func restore_aux_items(items: Array) -> void: if aux_inventory == null: - aux_inventory = AuxItems.new(db) + aux_inventory = TreasureItems.new(db) aux_inventory.reset() aux_inventory.restore_inventory(items) @@ -461,7 +461,7 @@ func _enter_node(node: Dictionary) -> bool: func _start_battle(node: Dictionary) -> bool: _settlement = BattleOrchestrator.new(db, rng) if aux_inventory == null: - aux_inventory = AuxItems.new(db) # 惰性建——关卡域单实例(跨战斗延续) + aux_inventory = TreasureItems.new(db) # 惰性建——关卡域单实例(跨战斗延续) _settlement.aux_inventory = aux_inventory # 迭代 7 T3——库存注入(授予路由+use_aux 编排消费面) if _settlement != null: _settlement.set_aux_unlocked(_aux_unlocked) # 迭代 7 T5——解锁门控下传(装板摇号前) @@ -618,7 +618,7 @@ func set_tree_rules(rules: Array) -> void: func set_attune_charges(charges: Dictionary) -> void: _attune_charges = charges if aux_inventory == null: - aux_inventory = AuxItems.new(db) + aux_inventory = TreasureItems.new(db) for iid in charges: var existing := 0 for r in aux_inventory.snapshot_inventory(): @@ -632,7 +632,7 @@ func set_attune_charges(charges: Dictionary) -> void: # 正主 = 营地装配面 Attunement.slots 满位禁选)。 func grant_aux_item(item_id: String, source: String) -> Dictionary: if aux_inventory == null: - aux_inventory = AuxItems.new(db) + aux_inventory = TreasureItems.new(db) return aux_inventory.add_item(item_id, source, Vector2i(-1, -1), 0) diff --git a/game/core/aux_items.gd b/game/core/treasure_items.gd similarity index 99% rename from game/core/aux_items.gd rename to game/core/treasure_items.gd index dfeaacc3..e8216d0b 100644 --- a/game/core/aux_items.gd +++ b/game/core/treasure_items.gd @@ -14,7 +14,7 @@ # 相位检查归 战斗结算 use_aux 编排第一步(本类不管相位——validate_use 是纯谓词+投影)。 # 呈现取数面:query_inventory(C 区槽位)/query_overlays(棋盘叠加层标记)——只读投影,零数据复制 # (预读徽章数据源=战斗结算 query_reward_identity 既有读面,本类只记「哪些格要额外显示」)。 -class_name AuxItems +class_name TreasureItems extends RefCounted var _items: Array = [] # [{handle, item_id, used}]——受理序;Used 保留只读 diff --git a/game/core/aux_items.gd.uid b/game/core/treasure_items.gd.uid similarity index 100% rename from game/core/aux_items.gd.uid rename to game/core/treasure_items.gd.uid diff --git a/game/data/schemas/relic_table.gd b/game/data/schemas/relic_table.gd index 6f9a3c65..11a8e5bc 100644 --- a/game/data/schemas/relic_table.gd +++ b/game/data/schemas/relic_table.gd @@ -9,7 +9,7 @@ # 表名与 relic_id 沿用历史命名,与统一词族对齐归后续批次——见 06-待办清单「命名统一」条目。 # 目标渠道:专长走关底 Boss 击败后专属三选一(不新增节点类型),见奇物文档 2.1 节。) # 数据配置 RelicTable schema(奇物·专长定义表;行 = Dictionary 键 relic_id,Rule 4 豁免 -# 定义表——AuxItemTable 先例)。 +# 定义表——TreasureItemTable 先例)。 # 行字段:relic_id 主键 / display_name / rarity ∈ {common, rare, rarest}(对齐令牌池三档命名—— # 投放档映射:common/rare→稀有令牌档、rarest→罕见令牌档;relic 令牌永不入普通档=「挂稀有/罕见档」 # 追认 b 接线口径)/ archetype ∈ ARCHETYPES 七流派标签 / hook ∈ HOOKS 挂点枚举(结算段槽——整合定稿 diff --git a/game/data/schemas/reward_table.gd b/game/data/schemas/reward_table.gd index 2fdd1ca9..bd59c066 100644 --- a/game/data/schemas/reward_table.gd +++ b/game/data/schemas/reward_table.gd @@ -46,7 +46,7 @@ func validate() -> Array: if atk_type != "" and not ["normal", "pierce", "magic"].has(atk_type): errs.append({"category": "enum", "message": "%s attack_type 出域 {normal, pierce, magic}: %s" % [rid, atk_type]}) # aux 投放行专属校验(迭代 7 T1):极性恒正/加权入池/effect_id=item_id 非空(悬空在 config_db 跨表层 - # 对 aux_items 词表校验——reward_dangling_aux)/无 power 无区间(数值语义不复用,道具效果读 AuxItemTable) + # 对 aux_items 词表校验——reward_dangling_aux)/无 power 无区间(数值语义不复用,道具效果读 TreasureItemTable) if ctype == TREASURE_ITEM_TYPE: # 负向行 = 雷格极性字典占位(雷安同池摇号下雷格可摇中 aux 身份——负路由零兑付兜底, # effect_id 空/power 0/weight 0 不入池;2026-09-29 T1) @@ -57,7 +57,7 @@ func validate() -> Array: if String(row.get("effect_id", "")) == "": errs.append({"category": "domain", "message": "%s aux 正行 effect_id 空(应=item_id)" % rid}) if int(row.get("power", 0)) != 0 or row.has("power_min"): - errs.append({"category": "cross_field", "message": "%s aux 正行禁 power/区间数值(道具数值读 AuxItemTable)" % rid}) + errs.append({"category": "cross_field", "message": "%s aux 正行禁 power/区间数值(道具数值读 TreasureItemTable)" % rid}) var pool: String = row.get("pool_tag", "") var pool_reserved: bool = pool.begins_with("clear_") and pool != "clear_default" if not POOL_TAGS.has(pool) and not pool_reserved: diff --git a/game/data/schemas/aux_item_table.gd b/game/data/schemas/treasure_item_table.gd similarity index 99% rename from game/data/schemas/aux_item_table.gd rename to game/data/schemas/treasure_item_table.gd index ab6d0ce4..f33c7e38 100644 --- a/game/data/schemas/aux_item_table.gd +++ b/game/data/schemas/treasure_item_table.gd @@ -3,7 +3,7 @@ # Date: 2026-09-29(迭代 7 T1 数据面——秘宝内容批;设计权威 design/gdd/systems/排雷循环/秘宝.md v0.4+ # + registry aux_items 六行 mvp_content;2026-09-29 用户拍板:①乙 探宝罗盘退役留痕 ④甲 显影尘/地穴全图卷失义件 # 六行全建零投放「已解锁·能力封存中」) -# 数据配置 AuxItemTable schema(秘宝 回填 owner)。 +# 数据配置 TreasureItemTable schema(秘宝 回填 owner)。 # 行 = Dictionary,键 item_id(Rule 4 豁免:定义表——registry aux_items Rule 4 豁免先例)。 # 七字段(registry fields 全量):item_id 主键 / display_name / dimension_tags ⊆ 五维 非空 / # effect_kinds ⊆ {mine_reveal, reward_preview, ap_grant}(活性校验见下)/ target ∈ {none, area_3x3, board_wide} / @@ -29,7 +29,7 @@ # 🔴 零裸 flat 结构护栏(任务书 §三 1——机制轴禁无条件属性加项):行键白名单封闭(KEY_WHITELIST 外键 = # 加载致命)+ effect_kinds 封闭枚举只收条件触发/机制修正类 kind——任何「无条件属性加项」类效果不得以 # 新 kind 或新键入表(返工红线)。 -class_name AuxItemTable +class_name TreasureItemTable extends Resource @export var rows: Array = [] # Array[Dictionary] 键 item_id diff --git a/game/data/schemas/aux_item_table.gd.uid b/game/data/schemas/treasure_item_table.gd.uid similarity index 100% rename from game/data/schemas/aux_item_table.gd.uid rename to game/data/schemas/treasure_item_table.gd.uid diff --git a/game/data/tables/aux_items.tres b/game/data/tables/treasure_items.tres similarity index 95% rename from game/data/tables/aux_items.tres rename to game/data/tables/treasure_items.tres index db17404f..3da8a3f6 100644 --- a/game/data/tables/aux_items.tres +++ b/game/data/tables/treasure_items.tres @@ -1,6 +1,6 @@ -[gd_resource type="Resource" script_class="AuxItemTable" load_steps=2 format=3] +[gd_resource type="Resource" script_class="TreasureItemTable" load_steps=2 format=3] -[ext_resource type="Script" path="res://data/schemas/aux_item_table.gd" id="1"] +[ext_resource type="Script" path="res://data/schemas/treasure_item_table.gd" id="1"] [resource] script = ExtResource("1") diff --git a/game/presentation/bonus_interact_controller.gd b/game/presentation/bonus_interact_controller.gd index 55ad68f9..7db39470 100644 --- a/game/presentation/bonus_interact_controller.gd +++ b/game/presentation/bonus_interact_controller.gd @@ -2,7 +2,7 @@ # 提升三选一与替换子交互控制器(迭代 13 T4/D4——二期家族① 自 main.gd 迁出;规范 1.1 单一职责): # 三选一停点编排(presented→pick→confirm/refresh→resolved→continue)+ 同调位替换子态 #(presented→chosen)+ TP0 令牌池卡片文案装配("kind|tier|relic_id" 复合键)+ 工坊显示名投影。 -# 装配纪律(ADR-0001,仿 aux_interact_controller 先例):信号连接不在此发生——bonus_overlay +# 装配纪律(ADR-0001,仿 treasure_interact_controller 先例):信号连接不在此发生——bonus_overlay # 四信号与 adventure 两信号由组合根接至本类 on_* 入口;模态栈/演播后排窗/呈现刷新/终局面/ # 推进失败 fatal 经组合根回调注入;adventure/runner 随局更替——现值回调注入;兑付写调用唯一 # 经 adventure.pick_bonus/apply_node_bonus/resolve_bonus_replace(core 侧单口,本类零直写)。 diff --git a/game/presentation/camp_shop_presenter.gd b/game/presentation/camp_shop_presenter.gd index da7e89ad..cf799bec 100644 --- a/game/presentation/camp_shop_presenter.gd +++ b/game/presentation/camp_shop_presenter.gd @@ -1,7 +1,7 @@ # VERTICAL SLICE - NOT FOR PRODUCTION # 营地/商店投影控制器(迭代 13 T4/D4——二期家族③ 自 main.gd 迁出;规范 1.1 单一职责): # 营地面开合/快照投影/锻造·同调·天赋树·Fork 购买与切换 + 商店房购买/离开(pool 与 product 双面)。 -# 装配纪律(ADR-0001,仿 aux_interact_controller 先例):信号连接不在此发生——campbtn/ +# 装配纪律(ADR-0001,仿 treasure_interact_controller 先例):信号连接不在此发生——campbtn/ # camp_overlay 四信号/shop_overlay 两信号由组合根接至本类 on_* 入口;模态栈/呈现刷新/续玩按钮 # 刷新经组合根回调注入;runner 随局更替——现值回调注入;写调用唯一经 MetaProgression 购买原语 # 与 LevelRunner.buy_*(core 侧单口,本类零直写——拒绝可见 pattern 1 兜底 toast 保留原地)。 diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 4f890ff5..07aa580b 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -20,14 +20,14 @@ # debug_session.gd——本类不拼呈现字符串。 # T3 拆件批(2026-10-02,规范 1.1 单一职责):结算行排播泵迁 row_pacer.gd(本类只入队/排空/读队列, # 探针/测试委托面 _row_queue/pace_delay_for/_flush_row_queue 原位保留);秘宝两步交互迁 -# aux_interact_controller.gd(本类只接线与转发意图,无目标使用显式化——哨兵坐标不出控制器); +# treasure_interact_controller.gd(本类只接线与转发意图,无目标使用显式化——哨兵坐标不出控制器); # GP 冒险钱包影子账迁 gp_shadow_ledger.gd(本类留探针同名读写委托面)。模态开合全量走 # _open_modal/_close_modal 单口,输入锁=modal_stack.has_open() 开态查询+三例外;battle 收尾反馈与 # 结算视觉 setter 收敛 hud_presenter 单通道(时序敏感演出触发留本类并注释);settlement 相位读取改经 # presentation_snapshot 成文面、变异表读取直读本根 db(settlement.db 即同一实例)——禁 # settlement.action_economy / settlement.db 链式穿透。 # ADR-0001 纪律:呈现层永不直接订阅 排雷玩法/行动经济——只订 战斗结算/runner 转发信号;相位读取仅用于 -# 驱动视图状态;信号连接只在组合根(row_pacer/aux_interact_controller 零连接,只收注入)。 +# 驱动视图状态;信号连接只在组合根(row_pacer/treasure_interact_controller 零连接,只收注入)。 extends Control const UiAssembler := preload("res://presentation/ui_assembler.gd") @@ -36,7 +36,7 @@ const ModalStack := preload("res://presentation/modal_stack.gd") const TuneSimController := preload("res://presentation/tune_sim_controller.gd") const DebugSessionScript := preload("res://presentation/debug_session.gd") const RowPacer := preload("res://presentation/row_pacer.gd") # 结算行排播泵(T3 拆件批) -const AuxInteractController := preload("res://presentation/aux_interact_controller.gd") # 秘宝两步交互(T3 拆件批) +const AuxInteractController := preload("res://presentation/treasure_interact_controller.gd") # 秘宝两步交互(T3 拆件批) const GpShadowLedgerScript := preload("res://presentation/gp_shadow_ledger.gd") # GP 影子账本(T3 拆件批) const BonusInteractController := preload("res://presentation/bonus_interact_controller.gd") # 三选一与替换子交互(T4/D4 拆件批) const CampShopPresenter := preload("res://presentation/camp_shop_presenter.gd") # 营地/商店投影(T4/D4 拆件批) @@ -90,7 +90,7 @@ var settlement_fx: SettlementFxView # 结算演出覆盖层(跨区弹道 # T3 拆件批(2026-10-02)——三件迁出后的组合根持有面(职责见各类头注;装配见 _build_ui) var _row_pacer = null # 结算行排播泵(row_pacer.gd——本类只入队/排空/读队列) -var _aux = null # 秘宝两步交互(aux_interact_controller.gd——本类只接线与转发意图) +var _aux = null # 秘宝两步交互(treasure_interact_controller.gd——本类只接线与转发意图) var _bonus = null # 三选一与替换子交互(bonus_interact_controller.gd——本类只接线与回调注入) var _camp_pres = null # 营地/商店投影(camp_shop_presenter.gd——本类只接线、探针缝保缝转发) var _gp_ledger := GpShadowLedgerScript.new() # GP 冒险钱包影子账(gp_shadow_ledger.gd——wallet 事件投喂) @@ -217,7 +217,7 @@ func _build_ui() -> void: _row_pacer.refresh_request = _refresh_presentations _row_pacer.pump_ended = _on_pump_ended # T17 v3.1+演播后排窗——边沿统一派发(挂起 modal 优先,其次锁期点击重放) # T17 v3.1——演播完边沿重放锁期点击(合并批接线) add_child(_row_pacer) - # 秘宝两步交互(T3 拆件批——迁 aux_interact_controller.gd;settlement/runner 随关卡更替, + # 秘宝两步交互(T3 拆件批——迁 treasure_interact_controller.gd;settlement/runner 随关卡更替, # 经现值回调注入——仿 identity_resolver 只读回调先例) _aux = AuxInteractController.new(db, meta, info_panel, board_zone.toast, board_view, func() -> Variant: return settlement, func() -> Variant: return runner) diff --git a/game/presentation/aux_interact_controller.gd b/game/presentation/treasure_interact_controller.gd similarity index 100% rename from game/presentation/aux_interact_controller.gd rename to game/presentation/treasure_interact_controller.gd diff --git a/game/presentation/aux_interact_controller.gd.uid b/game/presentation/treasure_interact_controller.gd.uid similarity index 100% rename from game/presentation/aux_interact_controller.gd.uid rename to game/presentation/treasure_interact_controller.gd.uid diff --git a/game/tests/unit/core/aux_items_test.gd b/game/tests/unit/core/aux_items_test.gd index ade5287f..5a965ec8 100644 --- a/game/tests/unit/core/aux_items_test.gd +++ b/game/tests/unit/core/aux_items_test.gd @@ -1,11 +1,11 @@ # VERTICAL SLICE - NOT FOR PRODUCTION -# 秘宝 AuxItems 类单测(迭代 7 T7——结构冻结断言面;设计权威 秘宝.md + registry aux_items)。 +# 秘宝 TreasureItems 类单测(迭代 7 T7——结构冻结断言面;设计权威 秘宝.md + registry aux_items)。 # 覆盖:授予归因 / Used 不可逆 / 真视恒可用 / 预读点击级零信息拒绝 / 3×3 边缘窗口∩板 / # 叠加层三清(retire_overlays 不动库存)/ 关卡末 reset / 零随机(同操作序列重放两遍投影逐位)。 # 运行:godot --headless --path game --script res://tests/unit/core/aux_items_test.gd(expect 0) extends SceneTree -const AuxItemsScript := preload("res://core/aux_items.gd") +const TreasureItemsScript := preload("res://core/treasure_items.gd") const Kit := preload("res://tests/unit/test_kit.gd") # T6 收口:check/汇总退出样板单点(静默收集通道) @@ -37,7 +37,7 @@ func _stub_db() -> StubDB: func _new_inv() -> Object: - return AuxItemsScript.new(_stub_db()) + return TreasureItemsScript.new(_stub_db()) func _unrevealed(_c: Vector2i) -> bool: diff --git a/game/tests/unit/data_config/aux_target_violation_test.gd b/game/tests/unit/data_config/aux_target_violation_test.gd index 3eed1f66..f7f2eda7 100644 --- a/game/tests/unit/data_config/aux_target_violation_test.gd +++ b/game/tests/unit/data_config/aux_target_violation_test.gd @@ -1,6 +1,6 @@ # 致命类用例(独立进程,期望退出码 1) # aux_target_violation——真视窄域护栏(秘宝 GDD 结构冻结,迭代 7 T1):mine_reveal 行 target -# 越域至 board_wide 时,AuxItemTable.validate 必须报 load_bearing 错、load_tables 整体拒绝。 +# 越域至 board_wide 时,TreasureItemTable.validate 必须报 load_bearing 错、load_tables 整体拒绝。 # 运行:godot --headless --path game --script res://tests/unit/data_config/aux_target_violation_test.gd # 退出码协议:1 = 校验正确拒绝(预期);2 = 违规表被放行(回归信号)。 # 时序注:纯加载期校验——不触运行期 fatal 通道,断言 load_tables 返回 false + 诊断在案即 quit(1)。 @@ -14,7 +14,7 @@ const BAD_DIR := "user://aux_fixture_target_violation" func _inject_violation() -> bool: - var path := BAD_DIR + "/aux_items.tres" + var path := BAD_DIR + "/treasure_items.tres" var f := FileAccess.open(path, FileAccess.READ) if f == null: return false