fix(iter37①): T3 验收面收口——golden 判失效换代+新码类型标注对齐现行规约
golden 换代触发原因(强制记载):棋盘三图换代面实测 changed=0.13%/0.11%/0.10%, 差异像素全落 900×760 裁剪区内(裁剪区外 0),按 README 加严口径判失效;成因定位为 2f3a87e9(魔法道具 HUD)注入 REWARD_BADGE 预读格字形,晚于 2026-10-08 建基,与本批零因果。 呈报后用户裁「重制三张基线」,经 tools/golden_baseline_refresh.sh 换代;复闸 changed 全 0.00%、 菜单 0.00% 未动。README 判定记录同步加注一条。 同批:modal_stack 合并账本改 Array[Control](类型闸 R1);新增/触碰的测试件按 test-conventions §6 补齐类型标注(FakeStage/FakeFx calls: Array[Array]、damage_controller_test 两处 db: ConfigDb), pacing_queue_test 三条 d12 断言补〔wd12〕尾缀。直跑:standee_fx_sweep/damage_controller/ pacing_queue 三套全绿+error_scan 0;audit_type_hints PASS。
This commit is contained in:
1 parent
353c1c6bb2
commit
7389618fd1
8 files changed
+19
-10
No files matched your search
@@ -31,7 +31,10 @@ func open(m: Control) -> void:
|
||||
hidden.append(higher)
|
||||
# 遮挡账合并非覆盖:同层重复 open 时上方已隐、hidden 为空,旧账须保留
|
||||
# (空表覆盖会让先前被隐层在本层 close 后永不恢复)
|
||||
var merged: Array = _occluded.get(m, []).duplicate()
|
||||
var merged: Array[Control] = []
|
||||
for h in _occluded.get(m, []):
|
||||
if not merged.has(h):
|
||||
merged.append(h)
|
||||
for h in hidden:
|
||||
if not merged.has(h):
|
||||
merged.append(h)
|
||||
|
||||
@@ -21,3 +21,9 @@
|
||||
- 2026-10-16(迭代 29 T7):**判有效**。三代换代面(棋盘三图 + 启动态菜单)实测
|
||||
changed = 0.00% / 0.00% / 0.00% / 0.15%,均远低于 2% 阈值 ⇒ 基线留在位,不重制。
|
||||
(本批零视觉改动,判定属常规复核。)
|
||||
- 2026-10-25(迭代 37 卡① T3):**判失效 → 显式重制 + 复闸**。实测棋盘三图
|
||||
changed = 0.13% / 0.11% / 0.10%,差异像素全落 900×760 棋盘裁剪区内、裁剪区外 0,
|
||||
按加严口径不判有效;成因定位为 `2f3a87e9`(魔法道具 HUD)注入 `REWARD_BADGE` 预读格
|
||||
字形——晚于 2026-10-08 建基提交,与本批零因果。呈报后用户裁「重制三张基线」,
|
||||
经 `tools/golden_baseline_refresh.sh` 换代;复闸 changed = 0.00% / 0.00% / 0.00%,
|
||||
启动态菜单 0.00%(未重制)。
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 99 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 109 KiB |
@@ -227,7 +227,7 @@ func _unit_fixture() -> Dictionary:
|
||||
}
|
||||
|
||||
|
||||
func _test_identical_content_dual_enemy(db) -> void:
|
||||
func _test_identical_content_dual_enemy(db: ConfigDb) -> void:
|
||||
var a := _unit_fixture()
|
||||
var b := _unit_fixture()
|
||||
Kit.check("前置:双敌字典内容全同且非同一实例", a == b and not is_same(a, b))
|
||||
@@ -256,7 +256,7 @@ func _test_identical_content_dual_enemy(db) -> void:
|
||||
# ---- requires 前置门:前置单未实际有效兑付 → 后继单静默作废;无存活敌 blast = 合法零兑付 ----
|
||||
|
||||
# d12 产发端增键:目标身份随行/随载荷下发(同名敌按 id 精确解析的产发半)
|
||||
func _test_target_id_payload(db) -> void:
|
||||
func _test_target_id_payload(db: ConfigDb) -> void:
|
||||
_rows = []
|
||||
var h = _harness(db)
|
||||
if not h.spawn_ok:
|
||||
|
||||
@@ -14,7 +14,7 @@ var _problems: Array = []
|
||||
|
||||
# 记参假站桩(d12 排播半):继承真类以过类型面,只记解析入参
|
||||
class FakeStage extends BattleStageView:
|
||||
var calls: Array = []
|
||||
var calls: Array[Array] = []
|
||||
|
||||
func enemy_standee_center(target_id: String, display_name: String) -> Variant:
|
||||
calls.append([target_id, display_name])
|
||||
@@ -23,7 +23,7 @@ class FakeStage extends BattleStageView:
|
||||
|
||||
# 记参假演出层(同上——play_* 全部只记不演)
|
||||
class FakeFx extends SettlementFxView:
|
||||
var calls: Array = []
|
||||
var calls: Array[Array] = []
|
||||
|
||||
func play_projectile(_from: Vector2, _to: Vector2, _glyph: String, _col: Color, _crit: bool = false) -> void:
|
||||
calls.append(["projectile", _to])
|
||||
@@ -133,11 +133,11 @@ func _init() -> void:
|
||||
rp.settlement_fx = ffx
|
||||
rp._play_settlement_mark({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
|
||||
check(fstage.calls.size() == 1 and fstage.calls[0] == ["goblin_b", "哥布林"],
|
||||
"结算标出按行 target_id 解析站桩(id 与名同传——d12)")
|
||||
"结算标出按行 target_id 解析站桩(id 与名同传——d12)〔wd12〕")
|
||||
rp._play_cross_zone_fx({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
|
||||
check(fstage.calls.size() == 2 and fstage.calls[1] == ["goblin_b", "哥布林"],
|
||||
"跨区弹道按行 target_id 解析站桩(id 与名同传——d12)")
|
||||
check(ffx.calls.size() == 2, "两路解析成功后演出层各接一拍(记参面非空)")
|
||||
"跨区弹道按行 target_id 解析站桩(id 与名同传——d12)〔wd12〕")
|
||||
check(ffx.calls.size() == 2, "两路解析成功后演出层各接一拍(记参面非空)〔wd12〕")
|
||||
rp.free()
|
||||
_finish()
|
||||
|
||||
|
||||
@@ -43,10 +43,10 @@ class FakePanel extends Node:
|
||||
# 假自动策略(run_level 签名同 level_autoplay——回调内读控制器运行态)
|
||||
class FakeDriver extends RefCounted:
|
||||
var ctrl
|
||||
var seen: Array = []
|
||||
var seen: Array[bool] = []
|
||||
var calls := 0
|
||||
|
||||
func run_level(_db, _seed: int, _level: int, _atk: int, _hp: int, _other: bool, _logger):
|
||||
func run_level(_db: Variant, _seed: int, _level: int, _atk: int, _hp: int, _other: bool, _logger: Variant) -> Dictionary:
|
||||
calls += 1
|
||||
seen.append(ctrl.is_running())
|
||||
if calls == 1:
|
||||
|
||||
Reference in new issue
Block a user