合回(工程批·工程小件批): 五件全清——run_all.gd --only 逗号解析修复(d32ff342)+level_runner 注释与 S8 消息订正(dd2de10e)+恒真断言五条判据修正(6a3203a8)+闸基线 02/05/09 三键换代(28223074,按回执实测绿重锚);批末闸两次全绿,最终回执 28223074 domain=code scope=related;孤立验证=逗号四词形态实跑四套件全绿(level_shop_economy 192 checks)

This commit is contained in:
DKChan committed 2026-10-30 08:08:40 +08:00
commit 23bc6cc243
8 files changed
+82 -68

No files matched your search

+1 -1
View File
@@ -9,7 +9,7 @@
class_name LevelRunner
extends RefCounted
signal node_entered(node: Dictionary, info: Dictionary) ## info 按 type:battle/boss={} · reward={}(三选一停点空载荷——内容经 present_node_curio 拉取) · rest={healed,hp,max_hp} · shop={gp}
signal node_entered(node: Dictionary, info: Dictionary) ## info 按 type:battle/boss={} · reward={}(三选一停点空载荷——内容经 present_node_curio 拉取) · rest={healed,hp,max_hp} · shop={gp}(pool 态加 shelf:true)
signal choices_presented(candidates: Array) ## 选路口(兑付确认后——候选节点引用数组,零自动推进)
signal step_row(row: Dictionary) ## 转发当前 战斗结算 结算行
signal round_started(round_index: int)
+58 -58
View File
@@ -1,61 +1,61 @@
{
"note": "存量基线·闸况变化时本脚本会判红,需人工确认后重生成;2026-10-29 二次记账=03/04/05 三闸按 80b49c0f 先例经用户裁决记入现行红项指纹(03=8a3cae0d0446/04=591b27250b36/05=de89589e49ed)——master 同值复现非迭代42新增(stash 对照法取证,承「迭代 41 测试债修复」条目扩展);原 2026-10-17 06 条目人工重生成记录见 git 提交史",
"gates": {
"00 冒烟测试": {
"exit": "0",
"fp": "green"
},
"01 系统测试": {
"exit": "0",
"fp": "green"
},
"02 单元与集成测试": {
"exit": "1",
"fp": "f9865f1a5a44"
},
"03 场景探针": {
"exit": "0",
"fp": "green"
},
"05 渲染闸": {
"exit": "1",
"fp": "de89589e49ed"
},
"06 gdd_lint": {
"exit": "0",
"fp": "green"
},
"06b 变更记录节": {
"exit": "0",
"fp": "green"
},
"07 doc_link": {
"exit": "0",
"fp": "green"
},
"08 doc_term": {
"exit": "0",
"fp": "green"
},
"08c 流水线闸": {
"exit": "0",
"fp": "green"
},
"09 静态扫描": {
"exit": "1",
"fp": "1a9ad773489f"
},
"10 熵增闸": {
"exit": "0",
"fp": "green"
},
"08d 引用可核": {
"exit": "0",
"fp": "green"
},
"08e 能力审计": {
"exit": "0",
"fp": "green"
"note": "\u5b58\u91cf\u57fa\u7ebf\u00b7\u95f8\u51b5\u53d8\u5316\u65f6\u672c\u811a\u672c\u4f1a\u5224\u7ea2\uff0c\u9700\u4eba\u5de5\u786e\u8ba4\u540e\u91cd\u751f\u6210\uff1b2026-10-29 \u4e8c\u6b21\u8bb0\u8d26\uff1d03/04/05 \u4e09\u95f8\u6309 80b49c0f \u5148\u4f8b\u7ecf\u7528\u6237\u88c1\u51b3\u8bb0\u5165\u73b0\u884c\u7ea2\u9879\u6307\u7eb9\uff0803=8a3cae0d0446/04=591b27250b36/05=de89589e49ed\uff09\u2014\u2014master \u540c\u503c\u590d\u73b0\u975e\u8fed\u4ee342\u65b0\u589e\uff08stash \u5bf9\u7167\u6cd5\u53d6\u8bc1\uff0c\u627f\u300c\u8fed\u4ee3 41 \u6d4b\u8bd5\u503a\u4fee\u590d\u300d\u6761\u76ee\u6269\u5c55\uff09\uff1b\u539f 2026-10-17 06 \u6761\u76ee\u4eba\u5de5\u91cd\u751f\u6210\u8bb0\u5f55\u89c1 git \u63d0\u4ea4\u53f2\uff1b2026-10-30 \u4e09\u952e\u6362\u4ee3\uff1d02/05/09 \u6309\u5de5\u7a0b\u5c0f\u4ef6\u6279\u56de\u6267 6a3203a8 \u5b9e\u6d4b\u7eff\u91cd\u951a\uff0802 \u5173\u8054\u6863\u5206\u72474/4\u5168\u7eff\uff0f05 \u6e32\u67d3\u95f8\u771f\u8dd1\u7eff\uff0f09 \u9759\u6001\u626b\u63cf\u7eff\u2014\u2014run_all \u9017\u53f7\u89e3\u6790\u4fee\u590d\uff0b\u6052\u771f\u4e94\u6761\u5224\u636e\u4fee\u6b63\u6279\uff0c\u4e09\u952e\u65e7\u7ea2\u6307\u7eb9\u5168\u90e8\u5f52\u7eff\u6d88\u9664\uff09",
"gates": {
"00 \u5192\u70df\u6d4b\u8bd5": {
"exit": "0",
"fp": "green"
},
"01 \u7cfb\u7edf\u6d4b\u8bd5": {
"exit": "0",
"fp": "green"
},
"02 \u5355\u5143\u4e0e\u96c6\u6210\u6d4b\u8bd5": {
"exit": "0",
"fp": "green"
},
"03 \u573a\u666f\u63a2\u9488": {
"exit": "0",
"fp": "green"
},
"05 \u6e32\u67d3\u95f8": {
"exit": "0",
"fp": "green"
},
"06 gdd_lint": {
"exit": "0",
"fp": "green"
},
"06b \u53d8\u66f4\u8bb0\u5f55\u8282": {
"exit": "0",
"fp": "green"
},
"07 doc_link": {
"exit": "0",
"fp": "green"
},
"08 doc_term": {
"exit": "0",
"fp": "green"
},
"08c \u6d41\u6c34\u7ebf\u95f8": {
"exit": "0",
"fp": "green"
},
"09 \u9759\u6001\u626b\u63cf": {
"exit": "0",
"fp": "green"
},
"10 \u71b5\u589e\u95f8": {
"exit": "0",
"fp": "green"
},
"08d \u5f15\u7528\u53ef\u6838": {
"exit": "0",
"fp": "green"
},
"08e \u80fd\u529b\u5ba1\u8ba1": {
"exit": "0",
"fp": "green"
}
}
}
}
+4 -3
View File
@@ -66,9 +66,10 @@ func _init() -> void:
for a in OS.get_cmdline_user_args():
if a.begins_with("--only="):
has_only = true
var term := a.trim_prefix("--only=").strip_edges()
if term != "":
only_terms.append(term)
for part in a.trim_prefix("--only=").split(","):
var term := part.strip_edges()
if term != "":
only_terms.append(term)
elif a == "--only-source=gates":
only_from_gates = true
elif a.begins_with("--shard="):
+1 -1
View File
@@ -334,7 +334,7 @@ else
grep -rnE '\bawait\b' $S8_FILES 2>/dev/null | grep -vE '^[^:]+:[0-9]+:[[:space:]]*#' | grep -vE '"[^"]*\bawait\b[^"]*"'
fail=1
else
echo "[static_scan] S8 ok(扫描面 B1 文件集 9 个 .gd,await 零命中)"
echo "[static_scan] S8 ok(扫描面 B1 文件集 10 个 .gd,await 零命中)"
fi
fi
@@ -63,8 +63,11 @@ func _test_rng_tag_closure(db) -> void:
var stream_label: String = String(db.combat.settlement.damage_roll.armor_roll_stream)
Kit.check("settlement.armor_roll_stream ∈ RngService 封闭标签词表(EC12)",
RngServiceScript.PURPOSE_TAGS.has(stream_label))
var unique_tags: Dictionary = {}
for t in RngServiceScript.PURPOSE_TAGS:
unique_tags[String(t)] = true
Kit.check("RngService 用途标签词表非空且互异(封闭语义由流改标签)",
RngServiceScript.PURPOSE_TAGS.size() > 0)
RngServiceScript.PURPOSE_TAGS.size() > 0 and unique_tags.size() == RngServiceScript.PURPOSE_TAGS.size())
# ---- B1→D1 行协议:单据九栏缺省齐备 + 协议公共键形态 ----
+5 -1
View File
@@ -48,7 +48,11 @@ func _init() -> void:
a.stop()._node_pending = {}
# 摘牌:选中即消尽(禁早退路径零摘牌)
var deck_refresh_before: int = a.deck().pool_stock("refresh")
Kit.check_quiet(deck_refresh_before == 0 or true, "牌库 refresh 令牌读数在域(投放 %d)" % deck_refresh_before)
var deck_refresh_quota := 0
for tier in db.run.adventure.TIERS:
deck_refresh_quota += int(db.run.adventure.curio_quota("refresh", String(tier)))
Kit.check_quiet(deck_refresh_before == deck_refresh_quota - 1,
"牌库 refresh 令牌读数=表配额−本会话已兑付一张(读数 %d/配额 %d)" % [deck_refresh_before, deck_refresh_quota])
# V9-2 储备金袋:待注入账 + 战首注入(节点级)
a.stop()._pending = {"candidates": [{"kind": "rap", "tier": "rare"}]} # 停点候选直写(构造面——pick_curio 真实入口前置)
@@ -570,6 +570,7 @@ func _smoke_level_graph() -> void:
var green_ok := true
var green_min_hp := 99999
var green_wins := 0
var green_hp_floor_ok := true # 胜局 HP>0 旗(绿档记录义务——败局样本不入账,胜局 0 血即红)
for i in range(12):
var g_runner = load("res://core/level_runner.gd").new(_db, _fresh_rng(9100 + i))
g_runner.start_level(2, 9100 + i)
@@ -589,9 +590,11 @@ func _smoke_level_graph() -> void:
green_wins += 1
if int(g_box.get("hero_hp", 0)) > 0:
green_min_hp = mini(green_min_hp, int(g_box.hero_hp))
else:
green_hp_floor_ok = false
Kit.check("首遇位零踩雷:完美档 12 种子(节点 0 熊地精)恒零踩雷", green_ok)
Kit.check("首遇战胜局 ≥7/12(实际 %d——阶段拔高后锚行退出绿档,多数胜口径)" % green_wins, green_wins >= 7)
Kit.check("首遇战胜后 HP 下探读数 %d(>0——绿档记录)" % green_min_hp, green_min_hp > 0)
Kit.check("首遇战胜后 HP 下探读数 %d(>0——绿档记录)" % green_min_hp, green_hp_floor_ok and green_min_hp < 99999)
# ⑦ 跨表覆盖义务:L2 现行起关图每战斗/Boss 节点深度的敌侧落带 ≥ 请求深度(顶 clamp 消解即红)
# +每深度 board_gen 精确命中(判据实现与〔v11〕种子扫描段同源——_enemy_band_covers/_board_row_exact 单点)
var cov2 := _coverage_scan(2, nodes2)
@@ -675,6 +678,7 @@ func _smoke_level_graph() -> void:
# (零加成基线红档属预期——断言口径 = 成长代理档,非基线;跑法同 ⑥)
var green3_ok := true
var green3_min_hp := 99999
var green3_hp_floor_ok := true # 胜局 HP>0 旗(绿档记录义务——胜局 0 血即红)
for i in range(12):
var g3_runner = load("res://core/level_runner.gd").new(_db, _fresh_rng(9100 + i))
g3_runner.set_hero_override(200, 100)
@@ -693,8 +697,10 @@ func _smoke_level_graph() -> void:
green3_ok = false
elif int(g3_box.get("hero_hp", 0)) > 0:
green3_min_hp = mini(green3_min_hp, int(g3_box.hero_hp))
else:
green3_hp_floor_ok = false
Kit.check("L3 首遇位绿档:成长代理档口径(atk_pct=200/hp_pct=100)完美档 12 种子首遇战(节点 0 灰矮人)全胜且零踩雷", green3_ok)
Kit.check("L3 首遇战胜后 HP 下探读数 %d(>0——绿档记录)" % green3_min_hp, green3_min_hp > 0)
Kit.check("L3 首遇战胜后 HP 下探读数 %d(>0——绿档记录)" % green3_min_hp, green3_hp_floor_ok and green3_min_hp < 99999)
# ⑫ 混编行集运行面正反断言:注入带键 (1,battle,5)/(1,battle,6) =
# L1 节点图与全部既有扫描面之外的新带键(带命中精确取注入行集——新 L 会被 ceil 封顶到 L3 不可用),
@@ -260,7 +260,7 @@ func _init() -> void:
if not overlay11.has(c_v):
overlay_ok = false
Kit.check_quiet(overlay_ok, "天眼正常:窗口全格入真视叠加层(危险格显示=C5 有差别开格)")
Kit.check_quiet(not ob11.minesweeper.clear_map_cleared() or true, "天眼开格走普通挖格链(连锁/资源兑付=fx_reveal 通道——免 AP 即效果本身)")
Kit.check_quiet(not ob11.minesweeper.clear_map_cleared(), "天眼开格走普通挖格链(连锁/资源兑付=fx_reveal 通道——免 AP 即效果本身)")
# ⑫ 信标网络(封印不限相邻/封印价照付)
var rng12 = load("res://core/rng_service.gd").new(); rng12.set_master_seed(311)