iter55-卡1:QA覆盖余量收口批: 46→45真缺口断言落地(违约词负面套件/结算与cap与换算率钉/配额满/rap端到端/布局/天赋树/状态行/L3变异/reward行)+p_perfect读表接线(行为零漂移)+豁免登记(ontology 154/controls 19)+探针扩面十一组真输入+登记件开发面过滤(DebugOverlay/调试角标/inter三根, seen开发面键0)+枚举器scan_screens基类分类(绘制域件与调试浮窗出圈, 868实体/未豁免未补测=0)+cell_mark_overlay渲染通道(采集态六类型注入全入帧, 棋盘三图基线换代用户过目, 渲染闸绿);卡修轮2用户裁两处不豁免(渲染通道+开发面出圈);独立审计U1修复闭合+增量轮通过
This commit is contained in:
1 parent
095bb4c91b
commit
c41ce9cfc5
25 files changed
+1502
-26
No files matched your search
@@ -50,6 +50,10 @@ func _init() -> void:
|
||||
_smoke_nine_types_gp_stream()
|
||||
_smoke_adventure_table()
|
||||
_smoke_meta()
|
||||
_check_settlement_pin_values()
|
||||
_check_meta_per_level_pins()
|
||||
_check_curio_cap_segment_pins()
|
||||
_check_reward_row_pins()
|
||||
quit(Kit.finish("table_structure_guard_test"))
|
||||
|
||||
|
||||
@@ -660,3 +664,73 @@ func _test_feat_cap_required() -> void:
|
||||
var cap_v: int = int(some_feat["cap"])
|
||||
Kit.check("V12 cap_ok 在场行直索引读 cap(首行 %s cap=%d——零兜底路径)〔架构整改 V12〕" % [String(some_feat["feat_id"]), cap_v],
|
||||
deck.cap_ok("relic", String(some_feat["feat_id"])) == (int(deck.taken.get("relic:" + String(some_feat["feat_id"]), 0)) < cap_v))
|
||||
|
||||
|
||||
# ---- G2 结算数值钉(迭代 55「QA覆盖余量收口批」T2——equivalence_ref_damage/p_perfect 钉+p_perfect 读数活性)----
|
||||
|
||||
func _check_settlement_pin_values() -> void:
|
||||
# 判据出处: design/engineering/test-conventions.md:119 (表值钉值——漂移即红)
|
||||
# 判据出处: design/gdd/systems/战斗循环/战斗结算.md:124 (完美第二份兑付读表——接线后该句由声称变属实)
|
||||
var core = _db.combat.settlement.core
|
||||
var roll = _db.combat.settlement.damage_roll
|
||||
Kit.check("equivalence_ref_damage 钉 4(离线审计镜像 tools/clear_dominance_audit.py D_REF 同源——表值漂移即审计口径静默失效)〔QA余 V2〕",
|
||||
int(roll.equivalence_ref_damage) == 4)
|
||||
Kit.check("p_perfect 钉 200(完美兑付载体域 {100,200} 在役档)〔QA余 V2〕", int(core.p_perfect) == 200)
|
||||
# 读数活性断言:注入域内另一档 p_perfect=100 → 完美兑付份数随表值变化(防「接线但弃用」死接线假绿)。
|
||||
# 构造沿 seal_polarity 零兑付段同款(真实编排器;敌人存活首份必兑付——弱形式登记:直调 grant_clear_reward
|
||||
# 构造完美谓词,真值在正常流由封印判定累加)。表值注入限本函数作用域、读后即还原(同进程后续断言免污染)。
|
||||
var old_pp: int = int(core.p_perfect)
|
||||
core.p_perfect = 100
|
||||
var rng = load("res://core/rng_service.gd").new()
|
||||
rng.set_master_seed(20261107)
|
||||
var s = load("res://core/battle_orchestrator.gd").new(_db, rng)
|
||||
var rows: Array = []
|
||||
s.step_row.connect(func(row): rows.append(row))
|
||||
Kit.check("活性断言构造战斗启动(level_index 1 / depth 4 / boss)", bool(s.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": 80, "hero_max_hp": 80, "node_type": "boss"})))
|
||||
s._facts.perfect_hit_true = 1
|
||||
s._facts.perfect_hit_false = 0
|
||||
s.reward_grant().grant_clear_reward(1, s._facts.board_from_midround, s.perfect_sweep_earned())
|
||||
var dmg := 0
|
||||
for r in rows:
|
||||
if String(r.get("type", "")) == "damage" and String(r.get("source_class", "")) == "clear_reward":
|
||||
dmg += 1
|
||||
Kit.check("p_perfect=100 注入 → 清图奖励单份兑付(clear_reward 伤害行 ×1——第二份不随 perfect 谓词发出)〔QA余 V2〕",
|
||||
dmg == 1)
|
||||
core.p_perfect = old_pp
|
||||
Kit.check("p_perfect 表值还原 200(共享面注入窗口闭合)〔QA余 V2〕", int(_db.combat.settlement.core.p_perfect) == 200)
|
||||
|
||||
|
||||
# ---- G10 换算率钉(迭代 55「QA覆盖余量收口批」T2——per_level_shift_pct 三关档 6/9/1)----
|
||||
|
||||
func _check_meta_per_level_pins() -> void:
|
||||
# 判据出处: design/engineering/test-conventions.md:119 (表值钉值——漂移即红;离线 verifier 消费端同源)
|
||||
var pins := {"max_hp": 6, "atk": 9, "armor_class": 1}
|
||||
for attr in pins.keys():
|
||||
var row: Dictionary = {}
|
||||
for r in (_db.crossrun.meta.conversion as Array):
|
||||
if String(r.get("attr", "")) == String(attr):
|
||||
row = r
|
||||
Kit.check("per_level_shift_pct 钉:%s==%d(换算率三关档——balance_verifier CONVERSION 同源)〔QA余 V16〕" % [String(attr), int(pins[attr])],
|
||||
not row.is_empty() and int(row.get("per_level_shift_pct", -1)) == int(pins[attr]))
|
||||
|
||||
|
||||
# ---- G3 cap 段七槽钉值(迭代 55「QA覆盖余量收口批」T3——与 gp/attack 同款占位形态)----
|
||||
|
||||
func _check_curio_cap_segment_pins() -> void:
|
||||
# 判据出处: design/engineering/test-conventions.md:119 (表值钉值——漂移即红)
|
||||
for kind in ["ap", "armor", "heal", "max_hp", "rap", "refresh", "time_sand"]:
|
||||
Kit.check("curio_cap 七槽钉值:%s==99(案②提前退役占位——99=实质无上限,实数归调参批)〔QA余 V3〕" % kind,
|
||||
int(_db.run.adventure.curio_cap(String(kind))) == 99)
|
||||
|
||||
|
||||
# ---- G8 reward stacks 行钉(迭代 55「QA覆盖余量收口批」T8——生产行 stacks 值面,合成行键未读生产行的缺口补钉)----
|
||||
|
||||
func _check_reward_row_pins() -> void:
|
||||
# 判据出处: design/engineering/test-conventions.md:119 (表值钉值——漂移即红)
|
||||
Kit.check("reward 行扫描面非空(18 行在册——防空表静默绿)", (_db.run.reward.rows as Array).size() > 0)
|
||||
var stacks_drift: Array[String] = []
|
||||
for row in _db.run.reward.rows:
|
||||
if int(row.get("stacks", 1)) != 1:
|
||||
stacks_drift.append(String(row.get("reward_id", "")))
|
||||
Kit.check("reward 生产行 stacks 全 1(schema 缺省值面——合成行 stacks 键的行值主证;行值面变更须自觉换代本钉)〔QA余 V8〕",
|
||||
stacks_drift.is_empty())
|
||||
Reference in new issue
Block a user