merge: 迭代21收口补强——tree_rules_v11_test 六键覆盖缺口修复(四键合成行闭集校验+聚散两键无行断言=rebuild 实装面行数对照;纯测试零产品代码;run_all 22 套全绿+冒烟 898/0)
This commit is contained in:
commit
79aac0730b
1 file changed
+24
-5
@@ -1,7 +1,12 @@
|
||||
# tests/unit/core/tree_rules_v11_test.gd — 天赋树批 V11:六键合成订阅行走效果引擎加载期校验零违例
|
||||
# (契约 5——效果类型闭集不加新词:六键效果全部走现有 EVENTS/FACTS/OPS/EFFECT_KINDS/DO_KEYS
|
||||
# tests/unit/core/tree_rules_v11_test.gd — 天赋树批 V11:四键合成订阅行闭集校验零违例 + 聚散两键无行断言
|
||||
# (契约 5——效果类型闭集不加新词:四键效果全部走现有 EVENTS/FACTS/OPS/EFFECT_KINDS/DO_KEYS
|
||||
# 在册词表组合;本测试直构 rebuild 同构合成行(与 effect_engine.gd rebuild 树规则段逐字段同源)
|
||||
# 调 validate_trigger_row 断零违例。实现侧扩闭集未呈报时,本断言以在册词表为准转红。
|
||||
# 聚散两键(economy_hoard/economy_spend)不入事件面:消费点=tree_rules 成员判定
|
||||
# (battle_orchestrator._roll_gp_drop GP 掉落乘算 / level_runner._spend_discounted 商品折价),
|
||||
# rebuild 树规则段对两键零合成行——此状态在此被显式断言(旧版对两键取空夹具静默跳过=假绿):
|
||||
# rebuild 实装面行数对照——四键逐键与夹具同行数(rebuild 分支被删/漂移即转红),
|
||||
# 两键断零行(将来被加合成行即转红,提示先复核效果闭集再同步夹具与实现)。
|
||||
# 载体:run_all 单元套件(显式实例化夹具——--script 模式无 autoload)。)
|
||||
extends SceneTree
|
||||
|
||||
@@ -10,7 +15,7 @@ func _init() -> void:
|
||||
var eng = load("res://core/effect_engine.gd")
|
||||
var tree_tbl = load("res://data/schemas/meta_tree_table.gd")
|
||||
var errs: Array = []
|
||||
# 六键合成行(与 rebuild 树规则段同构——逐字段对照,实现漂移在此转红)
|
||||
# 四键合成行夹具(与 rebuild 树规则段同构——逐字段对照,实现漂移在此转红)
|
||||
var synth := {
|
||||
"posture_first_strike": [{"on": "round_start",
|
||||
"when": [{"fact": "battle_index", "op": "eq", "value": 1},
|
||||
@@ -34,10 +39,24 @@ func _init() -> void:
|
||||
"do": {"kind": "counter_add", "counter_id": "tree_sense_guard_used", "value": 1, "domain": "adventure"}}],
|
||||
}
|
||||
var six := ["posture_first_strike", "posture_bulwark", "sense_sharp", "sense_guard", "economy_hoard", "economy_spend"]
|
||||
# rebuild 实装面(db=null→feat/attune 两段空转,_triggers 只含树规则合成行)——行数对照载体
|
||||
var eng_inst = eng.new()
|
||||
eng_inst.rebuild([], [], six)
|
||||
for key in six:
|
||||
if not tree_tbl.RULE_KEYS.has(key):
|
||||
errs.append("规则键出域 RULE_KEYS 词表: %s" % key)
|
||||
for tr in (synth.get(key, []) as Array):
|
||||
var live := 0
|
||||
for tr in eng_inst._triggers:
|
||||
if String(tr.source) == "tree" and String(tr.id) == String(key):
|
||||
live += 1
|
||||
var fixture_rows: Array = synth.get(key, []) as Array
|
||||
if live != fixture_rows.size():
|
||||
if fixture_rows.is_empty():
|
||||
errs.append("聚散键应有零树合成订阅行(消费点=tree_rules 成员判定不入事件面——加行前先复核效果闭集并同步本测试): %s 实有 %d 行" % [key, live])
|
||||
else:
|
||||
errs.append("rebuild 树规则段行数与夹具不符: %s 夹具 %d 行 实有 %d 行" % [key, fixture_rows.size(), live])
|
||||
continue
|
||||
for tr in fixture_rows:
|
||||
eng.validate_trigger_row("tree_synth_" + String(key), {}, [tr], errs)
|
||||
# 反例:出域事件/出域效果类型在校验面转红(护栏活着——独立数组,命中即护栏有效)
|
||||
var bad_errs: Array = []
|
||||
@@ -46,7 +65,7 @@ func _init() -> void:
|
||||
if bad_errs.is_empty():
|
||||
errs.append("反例护栏失效:出域事件/出域效果类型未被 validate_trigger_row 拒绝")
|
||||
if errs.is_empty():
|
||||
print("[tree_rules_v11] all green(六键合成行零违例 + 反例被拒——契约 5 闭集在册词表承载)")
|
||||
print("[tree_rules_v11] all green(四键合成行零违例 + 聚散两键无行成立 + 反例被拒——契约 5 闭集在册词表承载)")
|
||||
quit(0)
|
||||
return
|
||||
for e in errs:
|
||||
|
||||
Reference in new issue
Block a user