From 30cabbdf527f3e19da8df4d019809e141dedd940 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 08:19:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E6=94=B6=E7=AA=84=E6=89=B9T0-T4=EF=BC=88=E8=BF=AD=E4=BB=A314?= =?UTF-8?q?=E2=91=A0=EF=BC=89=EF=BC=9A=E7=94=B2=3D=E5=89=83=E9=9B=B7?= =?UTF-8?q?=E5=9F=9F=E6=94=B6=E7=AA=84=EF=BC=88=E5=88=87=E6=AF=94=E9=9B=AA?= =?UTF-8?q?=E5=A4=AB=E2=89=A41+r=20=E5=8F=82=E6=95=B0=E5=8C=96=20shave=5Fr?= =?UTF-8?q?ing=5Fradius=EF=BC=8Cr=3D1=E2=86=925=C3=975=3D25=E6=A0=BC?= =?UTF-8?q?=EF=BC=8C=E5=85=A8=E5=9F=9Fflood=E5=89=83=E9=9B=B7=E9=80=80?= =?UTF-8?q?=E5=BD=B9=E2=80=94=E2=80=94=E9=9B=B6RNG=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E5=90=8C=E7=A7=8D=E5=AD=90=E5=B8=83=E9=9B=B7?= =?UTF-8?q?=E9=80=90=E4=BD=8D=E4=B8=80=E8=87=B4=EF=BC=89+=E4=B9=99=3DR?= =?UTF-8?q?=E2=82=80=E9=87=8D=E6=8E=B7=E9=97=B8=EF=BC=88=E5=90=88=E6=B3=95?= =?UTF-8?q?=E6=80=A7=E9=97=B8=E5=BA=8F=E5=88=97=20r0=5Fcap=5Fexceeded+?= =?UTF-8?q?=E5=90=8C=E6=B5=81=E9=87=8D=E8=AF=95+=E8=80=97=E5=B0=BD?= =?UTF-8?q?=E8=B5=B0=E4=B8=89=E5=88=86=E5=87=BA=E5=8F=A3accept=5Fworst?= =?UTF-8?q?=E8=AF=9A=E5=AE=9E=E9=99=8D=E7=BA=A7+metrics=20r0=5Fcap=5Frejec?= =?UTF-8?q?ted=EF=BC=89+=E5=8F=82=E6=95=B0=E9=9D=A2=EF=BC=88schema?= =?UTF-8?q?=E4=B8=A4=E5=88=97=E5=9F=9F=E6=A0=A1=E9=AA=8C[0,2]/[9,=E5=8D=8A?= =?UTF-8?q?=E6=9D=BF]=E5=8A=A0=E8=BD=BD=E6=9C=9F=E8=87=B4=E5=91=BD+19?= =?UTF-8?q?=E8=A1=8C=E6=8A=95=E5=80=BC=EF=BC=89+calibrate=E6=89=A9r0?= =?UTF-8?q?=E6=96=B9=E5=B7=AE/=E5=88=86=E4=BD=8D/=E9=97=B8=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E5=88=97+=E5=8F=82=E6=95=B0=E9=80=8F=E4=BC=A0?= =?UTF-8?q?=EF=BC=9BS1=E5=81=9C=E6=9C=BA=E5=91=88=E6=8A=A5=E5=B7=B2?= =?UTF-8?q?=E8=A3=81=EF=BC=88=E7=94=A8=E6=88=B7=E6=96=B9=E6=A1=88A?= =?UTF-8?q?=EF=BC=9A10=C3=9710=20cap=2030=E2=86=9245=E2=80=94=E2=80=94r=3D?= =?UTF-8?q?1=E8=87=AA=E7=84=B6R=E2=82=80=E5=9D=87=E5=80=BC39>30=E9=94=9A?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E6=80=A7=E5=80=92=E6=8C=8294%=E6=8B=92?= =?UTF-8?q?=E7=BB=9D=E5=B8=B8=E6=80=81=E9=9D=9E=E6=B3=95=E6=9D=BF=EF=BC=8C?= =?UTF-8?q?P1=E9=A2=84=E6=A1=88=E5=AD=97=E9=9D=A2=E4=B8=8A=E8=B0=83?= =?UTF-8?q?=EF=BC=9B12=C3=9712/13=C3=9713=2043/51=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E4=BE=A7=E7=BB=B4=E6=8C=81=EF=BC=89=EF=BC=9B=E6=96=AD=E8=A8=80?= =?UTF-8?q?=E9=9D=A2=3D+12=EF=BC=88R=E2=82=80=E2=89=A4cap=E7=BB=93?= =?UTF-8?q?=E6=9E=84/r0=5Fcap=5Frejected=E5=9C=A8=E4=BD=8D/ring=5Fremoved?= =?UTF-8?q?=E2=89=A4=E5=89=83=E9=9B=B7=E5=9F=9F=E5=80=99=E9=80=89/cap?= =?UTF-8?q?=E5=8E=8B=E7=BA=BF9=E8=AF=9A=E5=AE=9E=E9=99=8D=E7=BA=A7/?= =?UTF-8?q?=E7=A1=AE=E5=AE=9A=E6=80=A7=E4=B8=A4=E9=81=8D=E9=80=90=E4=BD=8D?= =?UTF-8?q?=EF=BC=89+=E5=A4=B9=E5=85=B7=E5=A4=8D=E6=A0=B83=E5=A4=84?= =?UTF-8?q?=EF=BC=88relic=E5=80=99=E9=80=89=E8=BA=AB=E4=BB=BDkind|tier|rel?= =?UTF-8?q?ic=5Fid=E6=8C=89TP0=20v2.2=E3=80=81=E5=95=86=E5=BA=97=E8=B4=AD?= =?UTF-8?q?=E4=B9=B0=E7=AC=94=E6=95=B0=E6=8E=A8=E5=AF=BC=E9=98=B2GP?= =?UTF-8?q?=E6=B5=81=E6=BC=82=E7=A7=BB=EF=BC=89=EF=BC=9B=E9=97=B8=3D?= =?UTF-8?q?=E5=86=92=E7=83=9F767/0=EF=BC=88755+12=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/board_generator.gd | 34 ++++++++++--- game/data/schemas/board_gen_table.gd | 11 ++++ game/data/tables/board_gen.tres | 76 +++++++++++++++++++++------- game/smoke/calibrate_boards.gd | 32 ++++++++++-- game/smoke/smoke_all.gd | 39 ++++++++++++-- 5 files changed, 160 insertions(+), 32 deletions(-) diff --git a/game/core/board_generator.gd b/game/core/board_generator.gd index 7c370070..d571b5c6 100644 --- a/game/core/board_generator.gd +++ b/game/core/board_generator.gd @@ -30,6 +30,10 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat "min_safe": int(row.min_safe_count), "max_attempts": int(row.max_gen_attempts), "board_type": String(row.board_type), + # 初始展开收窄批(迭代14① T1——两新参数;.get 缺省=legacy 调用方防御口径:shave_r=1 现行投值、 + # r0_cap=0 闸关。正式表行全行投值,加载期校验在 BoardGenTable.validate) + "shave_r": int(row.get("shave_ring_radius", 1)), + "r0_cap": int(row.get("r0_max_cap", 0)), } var best_legal: BoardData = null var best_legal_score := -1.0 @@ -38,6 +42,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat var attempts_used := 0 var accepted: BoardData = null var accept_mode := "" + var r0_cap_rejected := 0 for k in range(1, params.max_attempts + 1): attempts_used = k var b := _attempt(params, rng_stream, db) @@ -45,6 +50,9 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat if best_bad == null or _lex_less(badness, best_badness): best_bad = b best_badness = badness + # R₀≤cap 重掷闸触发计数(迭代14① T3——尝试事实,与合法性判定独立记录;占比=T5 闸触发率读数) + if int(params.r0_cap) > 0 and b.compute_r0().size() > int(params.r0_cap): + r0_cap_rejected += 1 if legality(b, params, db): var m: Dictionary = measure_inferability(b) # 求解器每合法板恰一次(O3 收口——此前重复调用两次) var inf: float = m["inferability"] @@ -66,7 +74,7 @@ func generate(L: int, D: int, rng_stream: RandomNumberGenerator, db) -> BoardDat accept_mode = "accept_worst" accepted.illegal_product = true push_error("[棋盘生成] attempts 耗尽零合法——接受最不坏出图 + 非法产物标记(玩家永不卡死)") - _finalize(accepted, params, attempts_used, accept_mode, db) + _finalize(accepted, params, attempts_used, accept_mode, db, r0_cap_rejected) return accepted @@ -99,12 +107,16 @@ func _attempt(params: Dictionary, rng_stream: RandomNumberGenerator, db) -> Boar for i in range(0, mini(n_mines, domain.size())): b.mines[domain[i]] = true _compute_digits(b) - # 先布后删:0 格闭包(布后基准)外扩 1 环内的雷移除(只减不增、无迭代) + # 先布后删:剃雷域 = 距 spawn_center 切比雪夫距离 ≤1+r 的格(迭代14①收窄批 T2——原「R₀ flood 域∪ + # 外扩 1 环」全域剃雷=开局开阔地巨大根因〔10×10 板 R₀ 均值 68.6=板面 68.6%〕;收窄后开阔地= + # 出生邻域外的自然 flood。r 读表 shave_ring_radius(r=1 → 5×5=25 格;r=0 即只剃出生 3×3)。 + # 只减不增、无迭代语义不变;ring_removed 指标语义不变(现值变小=预期);零 RNG 消费变化—— + # 同种子布雷序列逐位一致,仅移除域收窄。 + var shave_r: int = int(params.get("shave_r", 1)) var ring := {} - for c in b.compute_r0(): - for n in b.neighbors8(c): - if not ring.has(n): - ring[n] = true + for c in b.all_cells(): + if maxi(absi(c.x - b.spawn_center.x), absi(c.y - b.spawn_center.y)) <= 1 + shave_r: + ring[c] = true var removed := 0 for c in ring.keys(): if b.mines.has(c): @@ -300,6 +312,12 @@ func _legality_faults(b: BoardData, params: Dictionary) -> Array: var min_safe: int = int(params.get("min_safe", params.get("min_safe_count", 0))) if b.safe_cells().size() < min_safe: faults.append("min_safe_short") + # ⑤ R₀≤cap 重掷闸(迭代14①收窄批 T3——合法性先于质量评分,同 inv4 白给板先例;超阈整板作废 + # 同流重试〔重试共用 board_gen 流,attempt 边界非 scope 事件〕;全部尝试超阈 → 既有三分出口 + # accept_worst 诚实降级+非法产物标记(玩家永不卡死)。cap=0 = 闸关(legacy 调用方防御口径) + var r0_cap: int = int(params.get("r0_cap", 0)) + if r0_cap > 0 and r0.size() > r0_cap: + faults.append("r0_cap_exceeded") return faults @@ -313,7 +331,7 @@ func _neighbor_mine_count(b: BoardData, c: Vector2i) -> int: # ==================== 产出上报(生成期指标集) ==================== -func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db) -> void: +func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode: String, _db, r0_cap_rejected: int = 0) -> void: var m := measure_inferability(b) # 产物断言(棋盘生成 出生区安全与反退化布雷):实际雷数 ≤ 目标雷数 N——先布后删只减不增,失败即致命 var n_target: int = int(round(float(params.density) * float(params.w * params.h - BoardData.SPAWN_AREA_CELLS))) @@ -332,6 +350,8 @@ func _finalize(b: BoardData, params: Dictionary, attempts_used: int, accept_mode "illegal_product": accept_mode == "accept_worst", "ring_removed": attempt_facts.get("ring_removed", 0), "r0_count": m["r0"], + # R₀≤cap 重掷闸尝试事实(迭代14① T3——占比=T5 闸触发率读数,过高=甲乙配比失衡信号) + "r0_cap_rejected": r0_cap_rejected, } b.illegal_product = accept_mode == "accept_worst" b.degraded_product = accept_mode == "accept_best" diff --git a/game/data/schemas/board_gen_table.gd b/game/data/schemas/board_gen_table.gd index eef3ff8f..d178bbff 100644 --- a/game/data/schemas/board_gen_table.gd +++ b/game/data/schemas/board_gen_table.gd @@ -65,6 +65,17 @@ func validate() -> Array: var bt: String = str(row.get("board_type", "")) if not BOARD_TYPE_VOCABULARY.has(bt): errs.append({"category": "cross_field", "message": "(%d,%d) board_type 越词表: %s" % [L, D, bt]}) + # 初始展开收窄批两参数(迭代14① T1——加载期校验违例致命;缺省 shave=1 现行投值 / cap=0 闸关防御口径) + var sr: int = int(row.get("shave_ring_radius", 1)) + if sr < 0 or sr > 2: + errs.append({"category": "domain", "message": "(%d,%d) shave_ring_radius 越域 [0,2]: %d" % [L, D, sr]}) + var r0_cap: int = int(row.get("r0_max_cap", 0)) + if r0_cap > 0: + # 护栏(任务书 §二):cap ≥ 出生格数 9(BoardData.SPAWN_AREA_CELLS)、cap ≤ 板格数一半 + if r0_cap < BoardData.SPAWN_AREA_CELLS: + errs.append({"category": "cross_field", "message": "(%d,%d) r0_max_cap 低于出生保障面 %d: %d" % [L, D, BoardData.SPAWN_AREA_CELLS, r0_cap]}) + if r0_cap > (w * h) / 2: + errs.append({"category": "cross_field", "message": "(%d,%d) r0_max_cap 超板格数一半 %d: %d" % [L, D, (w * h) / 2, r0_cap]}) anchor_ok[L] = anchor_ok.get(L, false) or D == 0 for L in anchor_ok.keys(): if not anchor_ok[L]: diff --git a/game/data/tables/board_gen.tres b/game/data/tables/board_gen.tres index b31bf16d..a783327e 100644 --- a/game/data/tables/board_gen.tres +++ b/game/data/tables/board_gen.tres @@ -14,7 +14,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 50, "max_gen_attempts": 16, -"board_type": "dungeon" +"board_type": "dungeon", +"shave_ring_radius": 1, +"r0_max_cap": 45 }, { "level_index": 1, "node_depth": 1, @@ -25,7 +27,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 50, "max_gen_attempts": 16, -"board_type": "dungeon" +"board_type": "dungeon", +"shave_ring_radius": 1, +"r0_max_cap": 45 }, { "level_index": 1, "node_depth": 2, @@ -36,7 +40,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 50, "max_gen_attempts": 16, -"board_type": "dungeon" +"board_type": "dungeon", +"shave_ring_radius": 1, +"r0_max_cap": 45 }, { "level_index": 1, "node_depth": 3, @@ -47,7 +53,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 50, "max_gen_attempts": 16, -"board_type": "dungeon" +"board_type": "dungeon", +"shave_ring_radius": 1, +"r0_max_cap": 45 }, { "level_index": 1, "node_depth": 4, @@ -58,7 +66,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "dungeon" +"board_type": "dungeon", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 0, @@ -69,7 +79,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 1, @@ -80,7 +92,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 4, @@ -91,7 +105,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 5, @@ -102,7 +118,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 6, @@ -113,7 +131,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 7, @@ -124,7 +144,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 2, "node_depth": 9, @@ -135,7 +157,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 60, "max_gen_attempts": 24, -"board_type": "underdark" +"board_type": "underdark", +"shave_ring_radius": 1, +"r0_max_cap": 43 }, { "level_index": 3, "node_depth": 0, @@ -146,7 +170,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 1, @@ -157,7 +183,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 4, @@ -168,7 +196,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 5, @@ -179,7 +209,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 6, @@ -190,7 +222,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 7, @@ -201,7 +235,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 70, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 51 }, { "level_index": 3, "node_depth": 9, @@ -212,7 +248,9 @@ rows = [{ "solver_rules": "single_subset", "min_safe_count": 82, "max_gen_attempts": 32, -"board_type": "deep_underdark" +"board_type": "deep_underdark", +"shave_ring_radius": 1, +"r0_max_cap": 59 }] ; 切片调参登记(SLICE-TUNED provisional,调参所有权仍归 C3): diff --git a/game/smoke/calibrate_boards.gd b/game/smoke/calibrate_boards.gd index 98aaad7a..680c9852 100644 --- a/game/smoke/calibrate_boards.gd +++ b/game/smoke/calibrate_boards.gd @@ -28,7 +28,7 @@ func _initialize() -> void: quit(1) return var gen = load("res://core/board_generator.gd").new() - print("level,depth,w,h,n,mines_mean,mines_med,safe_mean,safe_med,r0_mean,inf_mean") + print("level,depth,w,h,n,mines_mean,mines_med,safe_mean,safe_med,r0_mean,r0_sd,r0_p90,r0_max,inf_mean,cap_rej_mean") for row in db.board_gen.rows: var rd := { "level_index": int(row.level_index), "node_depth": int(row.node_depth), @@ -36,6 +36,9 @@ func _initialize() -> void: "mine_density": float(row.mine_density), "inferability_target": float(row.inferability_target), "solver_rules": String(row.solver_rules), "min_safe_count": int(row.min_safe_count), "max_gen_attempts": int(row.max_gen_attempts), "board_type": String(row.board_type), + # 初始展开收窄批(迭代14①)两新参数透传(.get 缺省与生成器防御口径一致) + "shave_ring_radius": int(row.get("shave_ring_radius", 1)), + "r0_max_cap": int(row.get("r0_max_cap", 0)), } var fdb := FakeDB.new() fdb.row = rd @@ -43,6 +46,7 @@ func _initialize() -> void: var safes: Array = [] var r0s: Array = [] var infs: Array = [] + var cap_rejs: Array = [] for i in range(n): var rg := RandomNumberGenerator.new() rg.seed = 900000 + i @@ -53,12 +57,14 @@ func _initialize() -> void: safes.append(b.safe_cells().size()) r0s.append(int(b.metrics.r0_count)) infs.append(float(b.metrics.inferability)) + cap_rejs.append(int(b.metrics.get("r0_cap_rejected", 0))) if mines.is_empty(): printerr("L%d d%d 生成全部失败" % [int(row.level_index), int(row.node_depth)]) continue - print("%d,%d,%d,%d,%d,%.1f,%d,%.1f,%d,%.1f,%.3f" % [ + print("%d,%d,%d,%d,%d,%.1f,%d,%.1f,%d,%.1f,%.2f,%d,%d,%.3f,%.2f" % [ int(row.level_index), int(row.node_depth), int(row.board_width), int(row.board_height), - mines.size(), _mean(mines), _med(mines), _mean(safes), _med(safes), _mean(r0s), _mean(infs)]) + mines.size(), _mean(mines), _med(mines), _mean(safes), _med(safes), _mean(r0s), + _sd(r0s), _p90(r0s), _max(r0s), _mean(infs), _mean(cap_rejs)]) quit(0) @@ -69,6 +75,26 @@ func _mean(a: Array) -> float: return t / float(a.size()) +func _sd(a: Array) -> float: + var m := _mean(a) + var t := 0.0 + for v in a: + t += (float(v) - m) * (float(v) - m) + return sqrt(t / float(a.size())) + + +func _p90(a: Array) -> int: + var b := a.duplicate() + b.sort() + return int(b[mini(a.size() - 1, int(ceil(a.size() * 0.9)) - 1)]) + + +func _max(a: Array) -> int: + var b := a.duplicate() + b.sort() + return int(b[b.size() - 1]) + + func _med(a: Array) -> int: var b := a.duplicate() b.sort() diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 5a3bbbe2..569c7410 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -360,7 +360,9 @@ func _smoke_adventure() -> void: cand_ok = false var seen := {} for c in cands: - var ckey := "%s|%s" % [String((c as Dictionary).get("kind", "")), String((c as Dictionary).get("tier", ""))] + # 身份键 = kind|tier|relic_id(迭代14① T4 断言基线复核——TP0 v2.2 relic 按 relic_id 分列 + # 不参与同 kind 去重〔_token_identity relic: 前缀〕,同 tier 三枚不同流派件=三个不同选项合法态) + var ckey := "%s|%s|%s" % [String((c as Dictionary).get("kind", "")), String((c as Dictionary).get("tier", "")), String((c as Dictionary).get("relic_id", ""))] if seen.has(ckey): cand_ok = false seen[ckey] = true @@ -1253,6 +1255,24 @@ func _smoke_board_generator() -> void: check(_board_dump(b2) == _board_dump(b3), "L%d 同种子两次生成逐格相同" % L) var b4 = board_generator.generate(L, 0, _mk_stream("board_gen", 778), _db) check(_board_dump(b2) != _board_dump(b4), "L%d 异种子产物不同(退化护栏)" % L) + # ---- 初始展开收窄批断言(迭代14① T4)---- + # ① 结构断言:R₀ ≤ cap(正式表行投值,合法性闸承载——出图必过);② r0_cap_rejected 尝试事实在位; + # ③ ring_removed 量级:剃雷域收窄后 ≤ 域内候选雷格数(5×5−出生 9=16——全域剃雷退役); + # ④ 闸压线行为:cap=9(出生保障面下限)时出图必 r0≤9 或 accept_worst 非法标记(三分出口诚实降级,玩家永不卡死) + var cap_val: int = int(row.get("r0_max_cap", 0)) + check(cap_val >= BoardData.SPAWN_AREA_CELLS, "L%d r0_max_cap 正式行投值在位(%d ≥ 出生保障面 9——板面 30%% 锚)" % [L, cap_val]) + check(int(b1.metrics.r0_count) <= cap_val, "L%d 结构断言 R₀=%d ≤ cap=%d(R₀≤cap 重掷闸承载)" % [L, int(b1.metrics.r0_count), cap_val]) + check(int(b1.metrics.get("r0_cap_rejected", -1)) >= 0, "L%d r0_cap_rejected 尝试事实指标在位(本图 %d 次触发)" % [L, int(b1.metrics.get("r0_cap_rejected", -1))]) + check(int(b1.metrics.get("ring_removed", 99)) <= (2 + int(row.get("shave_ring_radius", 1))) * (2 + int(row.get("shave_ring_radius", 1))) * 4 - 5, "L%d ring_removed=%d ≤ 剃雷域候选雷格数((3+2r)²−9——全域剃雷退役)" % [L, int(b1.metrics.get("ring_removed", 99))]) + var row9: Dictionary = row.duplicate() + row9["r0_max_cap"] = BoardData.SPAWN_AREA_CELLS + row9["max_gen_attempts"] = 4 + var stub9 := _BoardRowStub.new() + stub9.row = row9 + var b9 = board_generator.generate(1, 0, _mk_stream("board_gen", 909), stub9) + check(b9 != null and (int(b9.metrics.r0_count) <= BoardData.SPAWN_AREA_CELLS or b9.illegal_product), + "L1 cap 压线 9:出图 R₀=%d %s(三分出口诚实降级——超阈即 accept_worst 非法标记,玩家永不卡死)" % [int(b9.metrics.r0_count), "≤9" if int(b9.metrics.r0_count) <= BoardData.SPAWN_AREA_CELLS else ">9→illegal_product"]) + check(int(b9.metrics.get("r0_cap_rejected", 0)) >= 0 and String(b9.metrics.get("accept_mode", "")) != "", "L1 cap 压线出图指标集完整(accept_mode=%s / 闸触发 %d 次)" % [String(b9.metrics.get("accept_mode", "")), int(b9.metrics.get("r0_cap_rejected", 0))]) func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator: @@ -1313,6 +1333,15 @@ class _CountVariantRng extends RngServiceCore: return super.open_stream(purpose) +# 板行覆盖桩(迭代14① T4——cap 压线行为断言;接口面 = resolve_board_gen 单点) +class _BoardRowStub: + var row: Dictionary + func resolve_board_gen(_L: int, _D: int) -> Dictionary: + return row + func status_effect_row(_id: String) -> Dictionary: + return {} + + func _smoke_global_variant() -> void: print("--- 全局作用域变异 首发批(门控三维 + 替换制 + 资源面偏斜)---") # ① 跨字段互锁负样本(resource_face ⟺ scope=global 三条 + effect_value 新域 [0,50]) @@ -3654,6 +3683,7 @@ func _smoke_shop_room() -> void: check(runner.effective_ac() == int(_db.hero.armor_class) + 1, "AC = 10+1(armor_class 加算区轴,无百分比通道)") # 余额不足购买被拒(零副作用):hp_up 连购至不可负担后兜底拒绝 var guard_drain := 20 + var hp_buys := 1 # 夹具前段已购 1 笔(购买 hp_up 受理断言)——总数 = 前段 + 本循环 while guard_drain > 0: guard_drain -= 1 var hp_price: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"]) @@ -3661,6 +3691,7 @@ func _smoke_shop_room() -> void: break if not runner.buy_product("hp_up"): break + hp_buys += 1 var gp_dry: int = runner.gp var tier_dry: int = runner.purchased_tier("hp_up") var hp_dry: int = int(_shop_products_by_id(runner.shop_products())["hp_up"]["price"]) @@ -3673,8 +3704,10 @@ func _smoke_shop_room() -> void: check(runner.effective_atk() == int(_db.hero.atk) + 1, "主角攻击生效值 = 2+1(基础表值 + 加算区)") check(runner.pick_next_node(9) and runner.current_battle() != null, "选 Boss(节点 9)开战") var snap: Dictionary = runner.current_battle().presentation_snapshot() - check(int(snap["hero"].get("atk", -1)) == int(_db.hero.atk) + 1 and int(snap["hero"].get("max_hp", -1)) == int(_db.hero.max_hp) + 3, - "战斗开始参数 = 基础表值 + 加算区(atk %d = 2+1 / max_hp %d = 17+3)" % [int(snap["hero"].get("atk", -1)), int(snap["hero"].get("max_hp", -1))]) + # max_hp 期望按实际购买笔数推导(迭代14① T4 断言基线复核——棋盘换代改变战局 GP 流,可购笔数 + # 随经济漂移;断言语义=「加算区笔数×3 全额入战斗开始参数」,不再锚死恰好 1 笔) + check(int(snap["hero"].get("atk", -1)) == int(_db.hero.atk) + 1 and int(snap["hero"].get("max_hp", -1)) == int(_db.hero.max_hp) + 3 * hp_buys, + "战斗开始参数 = 基础表值 + 加算区(atk %d = 2+1 / max_hp %d = %d+%d×3)" % [int(snap["hero"].get("atk", -1)), int(snap["hero"].get("max_hp", -1)), int(_db.hero.max_hp), hp_buys]) # 冒险收束(Boss 胜或败北——基线裸装口径任一结局)→ 钱包清零 var fin_end := {} runner.level_finished.connect(func(p): fin_end["p"] = p) From e1beb2555a4647d1a44047c8f42d705db5de001d Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 08:36:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E6=94=B6=E7=AA=84=E6=89=B9T5/T7/T8=EF=BC=88=E8=BF=AD=E4=BB=A31?= =?UTF-8?q?4=E2=91=A0=EF=BC=89=EF=BC=9A=E6=94=B9=E5=90=8E=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E8=AF=BB=E6=95=B0=EF=BC=88calibrate=20200=E6=9D=BF/?= =?UTF-8?q?=E8=A1=8C=EF=BC=9AR=E2=82=80=E5=9D=87=E5=80=BC39.7/37.9/42.8/46?= =?UTF-8?q?.6=E2=80=94=E2=80=9410=C3=9710=E6=94=B6=E7=AA=8442%=E8=87=AA68.?= =?UTF-8?q?6=E3=80=8112=C3=9712=E6=94=B6=E7=AA=8454%=E8=87=AA83.2=EF=BC=9B?= =?UTF-8?q?=E5=B0=BE=E9=83=A8=E8=A2=AB=E9=97=B8=E7=B2=BE=E7=A1=AE=E6=88=AA?= =?UTF-8?q?=E6=96=ADr0=5Fmax=3D=3Dcap=E5=85=A8=E8=A1=8C=EF=BC=9B=E9=9B=B7?= =?UTF-8?q?=E5=AF=86=E5=BA=A619.2-21.6%<25%=E7=9B=B8=E5=8F=98=E7=BA=BF?= =?UTF-8?q?=EF=BC=9B=E9=97=B8=E8=A7=A6=E5=8F=9122%/42%/42%/24%=E5=85=A80.5、预警 <0.3**),字段随 81000 重锚入库后补算终值。 diff --git a/design/gdd/systems/排雷循环/棋盘生成.md b/design/gdd/systems/排雷循环/棋盘生成.md index 3a46d988..f05e786d 100644 --- a/design/gdd/systems/排雷循环/棋盘生成.md +++ b/design/gdd/systems/排雷循环/棋盘生成.md @@ -95,10 +95,11 @@ | 反退化规则 | 内容 | |---|---| -| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把开局免费展开域外扩一圈内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测 | +| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把剃雷域内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测。**剃雷域已收窄(2026-10-05 初始展开收窄批)**:从「开局免费展开(flood)域∪外扩一圈」缩到「出生 3×3 ∪ 外扩 r 环」(切比雪夫距离 ≤1+r,r=shave_ring_radius 现行 1 → 5×5=25 格)——全域剃雷=开局免费展开巨大(10×10 板 R₀ 均值 68.6=板面 68.6%)的根因;收窄后开局免费展开=出生邻域剃雷诱发的自然连锁,均值降至板面约四成(10×10 实测 39.7) | | 出生区安全 | 出生 3×3 与开局免费展开域内恒无雷;变异不落两域由布置段顺序保障(非本管线义务) | | 开局白给板拒绝 | 开局免费展开域不得覆盖全部安全格——等于即退化板,尝试弃用重试;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) | | 清图可达性 | 每个安全格都必须能从出生区沿安全格八向连通走到;带孤岛安全格的板判非法,不进降级候选 | +| R₀≤cap 重掷闸(2026-10-05 初始展开收窄批) | 每次尝试出板后实测自然 R₀(开局免费展开格数),超过该行 r0_max_cap 即整板作废同流重试——合法性先于质量评分(同白给板先例);全部尝试超阈 → 既有三分出口接受最不坏+非法产物标记诚实降级,玩家永不卡死;闸触发次数随指标集 r0_cap_rejected 观测(占比过高=剃雷半径与闸配比失衡信号) | 清图可达性与可推理率是两道独立的闸:合法性先查、质量分后算——一张"分高但通不了"的图没有意义。另一条推理前提也由本系统保证:数字恒真,每个非雷格的数字恒等于它的八邻雷数,整局推理都建立在这句话上。 @@ -210,6 +211,8 @@ | min_safe_count | int [1, 999] | 现行值见 board_gen.tres | 最小安全格数下限 | | max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 | | board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1,2026-09-20 第三关内容批增补) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 | +| shave_ring_radius | int [0, 2] | 现行 1(board_gen.tres 全行) | 先布后删剃雷半径:剃雷域=距出生中心切比雪夫距离 ≤1+r 的格(r=1 → 5×5=25 格;r=0 即只剃出生 3×3 本身=无环剃雷)。**2026-10-05 初始展开收窄批新参数**(调参项非结构冻结) | +| r0_max_cap | int [出生格数 9, 板格数一半](护栏,违例加载期致命) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面 30% 锚(30/43/51/59)经 S1 停机呈报用户裁上调:10×10→45(r=1 自然均值 39>30 结构性倒挂;其余行 30% 锚维持)。**2026-10-05 初始展开收窄批新参数** | 结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段 2026-09-20 已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记于 registry board_gen_table 条目,调整走文档修订)、先布后删语义。 @@ -227,6 +230,8 @@ - 降级诚实:零合法板照常出图,必带非法产物标记与最高级告警;进程不死锁,玩家界面得到诚实告知。 - 加载期校验:布雷数下限、计数可行性、标签非空等违例组合加载期致命。 - 黄金图回归:手工核验小板集的可推理率输出与登记整数对逐位相等(整数对比对,禁浮点容差);换生成参数(推理定义、信息源、定义版本号)必须重制向量并入版本库。 +- R₀≤cap 闸(2026-10-05 初始展开收窄批):每张出图自然 R₀ ≤ 该行 r0_max_cap(合法板),或带非法产物标记(accept_worst 诚实降级);闸触发次数入指标集 r0_cap_rejected。 +- 剃雷域参数化(同批):剃雷域=出生中心切比雪夫 ≤1+shave_ring_radius 的方域,出图 ring_removed ≤ 域内候选雷格数 (3+2r)²−9;同种子布雷序列与收窄前逐位一致(零 RNG 消费变化)。 - 表实一致:配置表字段定义与 registry `board_gen_table` 条目一致。 ## 版本历史 @@ -237,3 +242,4 @@ | v0.2 | 2026-09-15 | 雾格残留清理:删除「待拍板」五项旧版失义条目(雾参数两字段与雾域跨字段校验、双判据与 inferability_core、雾相关生成约束、雾致清图预算增量两指标、黄金图向量的 core 整数对);验收标准「表实一致」条去掉指向该节的清理登记。参数表、五阶段管线与三分支出图等现行规则不变 | | v0.3 | 2026-09-17 | 数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),3 处失同步修正(雷密度、可推理率及格线、生成尝试上限——文档面旧 provisional 值与 board_gen.tres 现值不一致,改指路);成本闸 16384 改标注「结构护栏常数,登记于 registry board_gen_table 条目」,其余引用处指路;调参表「现行值」列整列指路化 | | v0.4 | 2026-09-20 | **第三关内容批(与切片代码 / registry / 03-内容规模 / 难度曲线与Boss / 地形变异 同批,参数行值零改动)**:图类型词表 v1.0 → v1.1,增补第三值 deep_underdark(灰矮人矿道方向);正文词表句与调参表 board_type 行随批同步(L3 = deep_underdark)。[地图战斗资源](../战斗循环/地图战斗资源.md)的图类型差异化插槽句不随批动——clear_deep_underdark 启用仍为预留 | +| v0.5 | 2026-10-05 | **初始展开收窄批(迭代14①号卡 T7——甲乙混合,用户裁 D1-D5+S1 方案A)**:①反退化规则表「先布后删」行换代(剃雷域=出生 3×3∪外扩 r 环参数化,全域 flood 剃雷退役)+新增「R₀≤cap 重掷闸」行;②调参表 +2 行(shave_ring_radius [0,2] 现行 1 / r0_max_cap 护栏 [9,半板] 现行 45/43/51/59——10×10 经 S1 停机呈报用户裁上调 30→45);③验收标准 +2 条(R₀≤cap 闸 / 剃雷域参数化+ring_removed 量级);④改后结构读数入 registry initial_expansion_narrowing 条(R₀ 均值 39.7/37.9/42.8/46.6,收窄自 68.6/83.2;雷密度 19.2-21.6% <25% 相变线;inf 全行达标);玩法侧零改动(排雷玩法「初始展开恰等」验收原样为真);裸数字截断路否决退役(D3)不立文 | diff --git a/design/registry/entities.yaml b/design/registry/entities.yaml index 9be2a317..1d83ed9a 100644 --- a/design/registry/entities.yaml +++ b/design/registry/entities.yaml @@ -175,6 +175,7 @@ entities: mvp_reference_rows: L1·D0 与 L2·D0 两参考行——**全部 provisional,仅 schema 自洽性证明,曲线数值归 难度曲线与Boss 调参所有权**;参考行现行值不列于本 registry,读 data/tables/board_gen.tres(2026-09-18 指路化收口——原 d0.10/t0.95/att16、d0.12/t0.92/att16 读数随切片 SLICE-TUNED 改值作废)。**2026-09-20 第三关内容批**:L3 战斗/Boss 节点 (3, 0/1/4/5/6/7/8) 七行精确铺满——板面 13×13 / Boss 14×14(「Boss 板 = 本关最大板形」纪律)、min_safe_count 70/82(~0.42 格占比外推)、max_gen_attempts 32/32、board_type=deep_underdark;行值全 provisional 归 难度曲线与Boss minesweeper_dual_containment: 双包含回验登记 排雷玩法 GDD——① 排雷玩法 实际展开域 ⊆ 棋盘生成 排除域(既有)② 棋盘生成 求解器初始态 ⊆ 排雷玩法 实际初始展开域(F1 注记④度量保真对偶) golden_vectors: 推理器黄金图回归向量协议(五类手工核验小板,整数对比对禁浮点容差,逐格信息源推导记录入版本库;换 solver_rules/信息源/metric_version = GDD 修订 + 向量重制)——数据配置 R2 先例同源 + initial_expansion_narrowing: (2026-10-05 初始展开收窄批 T1-T3,迭代14①——D1-D5 已裁+S1 停机呈报用户裁方案A)两新参数:**shave_ring_radius**(int [0,2] knob 现行 1——剃雷域=距 spawn_center 切比雪夫距离 ≤1+r 的格,r=1→5×5=25 格;原「R₀ flood 域∪外扩 1 环」全域剃雷退役=开局开阔地巨大根因治理;零 RNG 消费变化,同种子布雷序列逐位一致)+ **r0_max_cap**(int 护栏 [出生格数 9, 板格数一半] 加载期致命;0=闸关 legacy 防御口径;现行按板形投值 **45**〔10×10〕/43〔12×12〕/51〔13×13〕/59〔14×14〕——板面 30% 锚**除 10×10 用户裁 S1 方案A 上调 30→45**:r=1 自然 R₀ 均值 39>30 锚结构性倒挂〔94% 尝试被拒、inf 0.976→0.719、常态 accept_worst 非法板〕,P1「上调若闸过频」预案字面执行;12×12/13×13 健康侧〔inf 达标、拒绝 42%<50% S1 线〕维持)。机制面:R₀≤cap 合法性闸(r0_cap_exceeded——合法性先于质量评分同 inv4 先例;超阈整板作废同流重试;耗尽走既有三分出口 accept_worst 诚实降级)+ metrics 增 r0_cap_rejected 尝试事实(占比=闸触发率读数)。改后结构读数(calibrate_boards 200 板/行,2026-10-05,种子 900000 系):R₀ 均值 39.7/37.9/42.8/46.6(改前 68.6/83.2——10×10 收窄 42%、12×12 收窄 54%)、尾部被闸精确截断(r0_max==cap 全行)、实际雷密度 19.2-21.6%(<25% 相变线;改前 12.9/15.7% 上浮=知情登记,联动四带复算归 T6)、闸触发率 22%/42%/42%/24%(全 <50%)、inferability 0.939/0.881/0.929/0.921 全行 ≥0.88。T6 MC 四带复算读数批后置(跑批待用户批准,07 挂单);**锚换代声明**:改前 R₀ 结构读数(68.6/83.2 等)与清图率历史锚只测不判 referenced_by: [排雷玩法, 战斗结算, 地图战斗资源, 难度曲线与Boss, 存档序列化] - name: minesweeper_event_surface From 09e714f12a9d407d5ef1b81a8a34042611cf1a1c Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 08:37:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E6=94=B6=E7=AA=84=E6=89=B9T7=E6=94=B6=E5=8F=A3=EF=BC=88?= =?UTF-8?q?=E8=BF=AD=E4=BB=A314=E2=91=A0=EF=BC=89=EF=BC=9Aroadmap=E2=91=A0?= =?UTF-8?q?=E5=8D=A1=E2=9C=85=E8=90=BD=E5=9C=B0=E6=A0=87=E6=B3=A8=EF=BC=88?= =?UTF-8?q?S1=E6=96=B9=E6=A1=88A=E5=AE=9E=E5=BD=95+=E6=94=B9=E5=90=8E?= =?UTF-8?q?=E8=AF=BB=E6=95=B0+T6=E5=90=8E=E7=BD=AE=E6=8C=8207=EF=BC=89+?= =?UTF-8?q?=E2=91=A1=E5=8D=A1=E5=8F=B0=E8=B4=A6=E7=AC=94=E8=AF=AF354?= =?UTF-8?q?=E2=86=92356=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roadmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roadmap.md b/roadmap.md index e5dd122f..170bf1f7 100644 --- a/roadmap.md +++ b/roadmap.md @@ -59,7 +59,7 @@ | 迭代 11+ | **✅ 三批已落籍(2026-10-03,台账 323-325)**:①魔法道具同调实施批 bc17b66(冒烟 645/0→671/0 基线演进)→ ②GP 商店房重构批 395b2ab(共享池账本+抽 3 买 1 全重抽+A=1.8/b=1.1 provisional+MC off 对拍逐位 PASS+on 新锚 N=60)→ ④视野迷雾实施批 e6260a5(菱形灯光区 R8+区外全黑+暗淡记忆态+探针 case⑮;纯呈现 MC 零跑)——各批合并后主区全量冒烟复跑全绿;**迭代 11 门=待出口人闸关闭(人闸材料包=design/qa/m4-iter11-exit-package-2026-10-03.md:三批检查单+追认清单 18 项+迷雾目检指引+读数报告)**。原登记:**2026-10-03 用户裁迭代 11 范围(三批,推荐序)**:①魔法道具同调实施批 → ②GP 商店房重构批 → ④视野迷雾实施批(各批独立出口闸;同调批先行——商店批共享池账本与通关率复测建在 aux 卡退役后的终局池上,读数只锚一次;迷雾批纯呈现不扰读数,序位可穿插);**反制批移迭代 12**(前置=双层 BD 外部调研+仲裁后重新立项;2026-10-03 用户终裁=同调位反制道具层级错配失败设计废弃,「每变异≥1反制道具」契约作废——地形变异.md v0.6/魔法道具.md v0.8 同批落文(06 条目已收口移除));**Beta 方向立项撤出本窗口**(待 Alpha 内容填充+试玩轮次后再议);关卡内容扩展留讨论位(世界观设定待用户补正主——摩索不达城 repo 无载)。↓ 原登记:反制批 Alpha · **魔法道具同调实施批**(任务书 v1.1 全裁 P1-P8(任务书已退役,落籍=①bc17b66),2026-10-02 用户裁 P7 乙归本窗口,发令即开工——任务书含 T0-T10 可升 loop 计划书)· **GP 商店房重构批**(2026-10-02 用户裁三选一同构化:买一全重抽/重抽绑购买/价格=基价×b^(关序−1)×A^(进店已购次数)〔系数归 game-balancer 研究〕,取代 09-20 无刷新裁决——06「GP 商店房重构」条在册待立项)· 关卡内容扩展 · Beta 方向立项(原迭代 10+ 三主题顺延——迭代 10 位已由奖励结构重构批占用,2026-09-30 用户拍板 P-E;各批顺序按 Alpha 读数定;含营地 2D 画面议题——2026-09-29 裁缓至此再议) | M-3 出口闸(**已解**——2026-10-03 迭代 9 出口闸收官:M-3 关闭、Alpha 到手) | 立项时按「迭代粒度界定」拆任务卡 | | 迭代 12 | **双层 BD 实施批(反制批位移承接——变异应对局内化在本批落地)**:**2026-10-03 用户五裁全落**=R1 甲(树形态融合案:主干脊柱 row-gating+三脉+彩蛋 ≤3+A/B 集中同调脉)/R2 乙(**两层全入本迭代**:批次一 T0-T7=机制件基建+七流派全量铺〔R3 乙〕+地形转化件+商店保底+MC 锚;批次二 T8-T10=天赋树+存档 v4+营地 UI 重构;超软时间盒切 12/12b,切分点=批次一出口)/R3 乙(七流派批次一全量铺)/R4 甲(**信息型永不对冲**+复查闸=T10 呈报信息型真人读数仅呈报不提案;净化工兵仅限伤害型、清除工具件族不做、深挖钻头改非信息税设计)/R5 甲(喂雷流不做,06 留正式待办+kill-switch 判据)。未落地备选内容已自包含迁 06「双层 BD 延期与备选内容总登记」。设计事实源=`design/research/双层BD体系-整合定稿-2026-10-03.md`(双模型并行调研仲裁版),任务书已退役(落籍=e780063)。**✅ 已全批落籍(2026-10-04,台账 328-333)**:TP0 令牌池先行(normal 重锚)→批次一 T0-T7(27 件七流派+MC 成型锚 L1 5%→75% 分岔+红线自检①过)→批次二 T8-T10(天赋树 33 节点+存档 v5+营地树 UI+A/B 面 0.0pp)一次合并 e780063;试玩反馈四连修复(钻头 AP 锁死/v2 收益重投/流派件呈现双界面/清图奖励 toast)至 c43276d;批末冒烟 718/0+run_all 15+探针绿+doc 三闸基线同款+熵增 PASS;**出口人闸待用户**(人工检查清单=台账 328-333+design/qa/m4iter12 两报告);前置=迭代 11 三批出口+M-4 数值批令牌池落地+商店批共享池 | 迭代 11 出口 | T0-T10 两段式(任务书 §四) | | 迭代 13 | **工程债与测试基建批(含 D6 爆破工兵包实施)**:六条目=ui_click_probe 完整局适配(D1——分派链序修正+停点/锁期/重放三态断言)/探针只读出口(D2——六出口 26 直入清零)/ArmedTimer helper(D3——P4 乙三处计时收口缝零动)/main.gd 二期瘦身(D4——bonus_interact_controller+camp_shop_presenter 拆件 1370→1119,家族②契约3绑定面留置;~900±50 锚差=族级清单上限不自洽已归因)/aux 二期合并(T5 判不合收口)/杂项尾差四件(D5)/爆破工兵包中立移除雷格(D6——P1 甲邻接冻结/P2 甲退色降档,判定逻辑零改动,充能表驱动零新码)。**✅ 已落籍(2026-10-04,台账 342)**:worktree m4iter13-debt-20261004 八提交 cd7d3ea…2402877 合并 eff8cb8;闸=冒烟 718/0(断言数持平基线)+run_all 15+click 三种子绿+全探针绿+doc 三闸零新增+熵增 PASS+MC 零跑(静态零漂移证明);合并后主区全量复跑同绿 | 迭代 12 出口 | T0-T9 ≈4.8-5.3d(知情超限单批,实际单会话) | -| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告 §九(已退役,git 1da9a41)),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 354)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 |**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 | +| 迭代 14 | **初始展开收窄批(2026-10-04 用户拍板甲乙混合立项)**:甲=先布后删剃雷域收窄至出生 3×3∪外扩 r 环(参数化半径,现值 r=1——开阔地均值从板面 66.5% 根因性降至约三成)+乙=生成重掷闸 R₀≤cap(合法性门序列、cap=板面 30% 锚〔10×10=30/12×12=43/13×13=51〕、重试耗尽走既有三分出口);**玩法侧零改动路线**(排雷玩法「初始展开恰等」验收原样为真,minesweeper_rules.gd 零 diff);裸数字截断路否决退役(可见 0 格+未开邻居=扫雷不可能态)。可行性报告=`design/research/研究-初始展开收窄可行性-2026-10-04.md`,任务书=`design/research/任务书-初始展开收窄批-2026-10-04.md`(T0-T8≈5.25d,读数批 T5-T6 可切独立后批;拍板点 P1-P3 全读数后置;停机点 S1 相变警戒/S2 带越界回调)。**✅ 实施批落地(2026-10-05,worktree m4iter14-narrow-20261005 台账 357;S1 停机呈报已裁=用户方案A)**:T0-T4+T7+T8 全落(T5 结构读数随批出讫;T6 MC 四带复算读数批按切分预案后置,跑批待用户批准挂 07 现行义务)——甲=剃雷域收窄(shave_ring_radius 参数化,r=1→出生 5×5,全域 flood 剃雷退役,零 RNG 消费变化)+乙=R₀≤cap 重掷闸(合法性闸序列+同流重试+耗尽三分出口诚实降级+r0_cap_rejected 指标)+参数面两列(schema 域校验加载期致命+19 行投值)+断言面 +12(R₀≤cap/ring_removed 量级/cap 压线诚实降级/确定性逐位)+夹具复核 3 处(relic 候选身份按 TP0 v2.2=kind|tier|relic_id、商店购买笔数推导防 GP 流漂移、极性探针种子自愈);**S1 停机实录**=r=1 自然 R₀ 均值 39>cap30 锚结构性倒挂(94% 拒绝/inf 0.976→0.719/常态非法板)→用户裁方案A「10×10 cap 30→45」〔P1 上调预案字面〕,12×12/13×13 健康侧维持;改后结构读数=R₀ 均值 39.7/37.9/42.8/46.6(收窄自 68.6/83.2——10×10 −42%、12×12 −54%)/尾部闸精确截断/雷密度 19.2-21.6%<25% 相变线/inf 全行达标;玩法侧零改动(minesweeper_rules.gd 零 diff、「初始展开恰等」验收原样为真);闸=冒烟 767/0(+12);registry initial_expansion_narrowing 条+棋盘生成.md v0.5+07⑬ 四信号组;06 视野条目已于 745b92ea 清账批退役(收窄立项即正主)。**②挖掘风险不等式判式换代批(2026-10-04 用户裁编入本迭代,作为迭代内需求)**:判式三层换代(条款2 标中旗锚/条款3 聚合健康式「(1−ρ̂)E_dig−ρ̂V_mine≥0」/旗边际引理+条件二旗溢价)+β 比值带判读 [1.2,2.5](u=3 登记态)+标中兑付溢价 δ=1.25(形态 a 兑付公式一处·雷安同池冻结不动)+runsum 旗行为五字段+audit 工具常量刷新(池 77/直伤 6-8-8/AP 8);裁决全落零新拍板点(方案报告 §九(已退役,git 1da9a41)),任务书=`.zcode/plans/mine-inequality-revision-miniloop-plan-2026-10-04.md`(T0-T5≈2.5d;条件二 T3 落文按登记已知破·T4 机制转绿;契约红线=DamageController 零改/直伤雷 6-8-8 与 p_perfect 不动——iter8 缺口四选一解绑独立在案;开工门=U0)。**✅ 实施批落地(2026-10-05,worktree m4iter14-mineq-20261005 台账 356)**:T0-T5 全落——audit 工具常量刷新(改前静态锚与方案报告 §四 逐位吻合)+runsum 五字段(行侧判据考证=授予行专带 highlight,87行==87插旗1:1)+F1 条款3 重立三层口径(v0.8)+战斗结算 v0.25+难度联动表+6 行+registry clause3_inequality 重立条(改前锚+P7 修正注记)+06 破线条收口+**T4 标中兑付溢价机制**(settlement.flag_hit_premium=125 provisional,grant 单点只挂 flag_hit 正向·percent 幅度贯穿应用与呈现,标空/挖格不乘,DamageController 零改/同池冻结)+smoke 750/0(+3 断言;max 路径种子 42→43 重采);判读三件=β 带 u=1/2 带内 u=3 登记态/δ 敏感度行为无感(η 位移 <1.4pp<5pp,保留+登记)/条件二判式口径等号压线转绿(整数量级实现 u=1/2 绿·u=3 微欠 −1.1% 登记面);改后锚换代 runsum_m4iter14mineq_post_n200_20261005(perfect 冒险通关 65.3%→72.0% 增强向位移,四带判读归 M-4);出口报告=design/qa/m4iter14-mineq-exit-report-2026-10-05.md(provisional 追认单 8 项+07⑫ 人工项);damage_probe A1 红灯=改前既有非本批新增(在册)。**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 |**③全局作用域变异首发批(2026-10-04 用户拍板立项——调研报告 P1-P8+盘问 Q1-Q4 全按推荐案落,批内序位待排)**:L2/L3 Boss 图恒定一型 scope=global 变异,首发型=**案A 资源面·微贫向偏斜**(正向格面池合计不变、进攻族 attack/blast/pierce/magic 权重上浮/生存族 heal/defense 明显下调、EV 微降 3-5% provisional、gp/action 白名单不动;v1.0「沃土+雷密对冲」形勘误作废——雷数为生成器事实、布置段不可加,改生成端=踩结构面否决理由);**替换制**(Boss 图不再布 region 片——L2 完美 Boss 承伤 55.8% 已越带不叠加;迭代 12 四件地形应对件在 Boss 图失效=知情代价,registry/调参日志随批登记);L1 Boss 免疫(带B [50,85] 教学保护);三层预告(开战横幅+HUD 常驻角标+帮助手册行);带A 判读后置 M-4(落地 off/on 对拍只测不判;off 基线=替换制后零变异 Boss 图,与现行带 region 片 Boss 图语义不同须注明);偏运硬币合成序=图级先件级后(代拍随批锚登记)。调研报告(事实源,v1.1 裁决落盘)=`design/research/调研-全局作用域变异设计空间-2026-10-04.md`,任务书已退役(git 01bfc15 批;裁决全录另见调研报告 §7)(T0-T8≈5.75d,读数批 T7 可切独立后批→主体≈5.25d;零新拍板点·provisional 追认单随批;停机点 S1 普通图逐位漂移/S2 读数越带只呈报/S3 互锁误伤;开工门=U0;**⑥A4 批开工门含本批出口——本批落地图级偏斜投影点为⑥合成链中段**〔2026-10-05 注:⑥已移出迭代 14 挂起,此依赖句冻结待其重启〕)。与①②互不撞(收窄=普通图初始展开轴/判式=不等式判读口径/全局变异=Boss 图资源面轴),出口读数各自分开归因。**✅ 实施批落地(2026-10-04,worktree m4iter14-gvar-20261004 台账 345)**:T1-T8 实施批全落(T7b MC 读数批按切分预案切独立后批,跑批待用户批准)——skewed_veins 贫矿脉行+互锁三条+effect_value [0,50]/门控第三维节点身份/替换制+兜底回落/装板序全局决议前置(数据依赖调和,出口报告在册)/资源面偏斜投影(整数最大余数守恒 77+合成序图级先件级后)/三层预告三层全接/七正主落文+06 收口;闸=冒烟 747/0(+29)+run_all 15+golden 普通图逐位 12/12 全等+六探针+三闸熵增终录见批报告 design/qa/m4iter14-gvar-exit-report-2026-10-04.md(Q3 四件应对件知情代价登记+静态推演+provisional 追认单+人闸目检清单);**③出口成立——⑥A4 开工门解一半**(另半=②出口);off/on 双档读数待 T7b(带 A 判读归 M-4 只测不判)。**④技能池执行批(2026-10-04 用户点名入列——调研+四裁+任务书全齐,06 Alpha 验证条目随之收口)**:文档五件(敌人系统.md 池构成表补 L2/L3 五敌种行/护甲列改读表口径/Boss 三代错峰句/意图呈现节补解锁弹出规格/版本 v0.13+EV 锚整数口径重登记+enemy.tres 批注消歧)+**新机制一件=Boss 半血解锁新独占伤害技**(三 Boss 血量 ≤50%〔用户口径定死〕解锁:酋长「震地怒击」类 ×2.5/CD4·卓尔遏毒类 ×2.0/CD3·石君王「岩崩」类 ×2.5/CD4——参考档即工作值,命名 T5 定稿、倍率冷却 provisional 归调参;enemy.tres 池条目扩 unlock_hp_pct 键〔int [1,99] 缺省无=无门槛〕;未解锁条目双面过滤不进摇号与保底集合;解锁出一次归因明细行「XX 解锁了 YY」);首拍加权取消(杂鱼纹理注销——巨蜘蛛 52% 读数已被 Package B 抬血自愈、地精两行终裁不加工);呈现=明细行+既有类型级预告+解锁时技能名一次性弹出(零动画资产、不改演出);裁决 D1-D8 零待裁;任务书=`design/research/任务书-技能池执行批-2026-10-04.md`(T0-T7≈4.25d,切分预案在册)——开工=用户发令升计划书。**⑤魔法提灯 +2 效果接线(小卡)**:零调研直入——2026-09-30 拍板④已裁(灯甲视野外扩 +2 格、类型微光不随视野扩),迷雾批已留常量 LIGHT_RADIUS_LANTERN_BONUS,纯接线+断言估 0.5d 内。原候选卡注记终态(2026-10-04):敌人系统内容批=已具化为④;教学引导定稿批=用户裁改排 Beta(06 教学节头注记在案),移出本迭代候选。**⑥冒险前资源配比预设批——已移出本迭代(2026-10-05 用户令挂起:暂不做;条目保留 06-待办清单「冒险前资源配比预设(构筑提案)」〔已裁待实施→挂起〕,八项裁决全数有效、任务书冻结保留=design/research/任务书-冒险前资源配比预设批-2026-10-04.md;重启须用户另行发令,届时开工门仍=②③号卡出口〔若②③已落籍 master 则自动解——合成序与包络数值锚依赖②判式换代与③变异投影,三者共用摇号投影点〕)**。 | 迭代 13 出口(**迭代 13 已落籍 2026-10-04 eff8cb8**,台账 342) | 初始展开批 T0-T8(可两段切分)+判式换代批 T0-T5≈2.5d(独立 worktree 合并)+全局变异首发批 T0-T8≈5.75d(读数批可切,独立 worktree 合并)+技能池执行批 T0-T7≈4.25d(独立 worktree 合并)+提灯接线小卡 0.5d(可并入任一批顺路)〔⑥配比预设批 A4 已移出本迭代挂起,2026-10-05 用户令〕 | | 迭代 15 | **①调试功能整合批(2026-10-05 用户令自「14.5」临时卡改编入册——原周期外 0.5 卡,落地事实与验证读数零变化,只改编号归属)**:主菜单三调试散件(随机种子输入框/角色数值调整板/两层调试入口)收一张调试浮窗 DebugOverlay——入口=开始覆盖层右下角「调试」角标(与主按钮组非平级,DS_DEBUG=1 环境变量门控沿用迭代 8 卡④口径);浮窗=悬浮菜单之上 Dialog(不隐藏开始层,同确认弹窗形态;旧 TunePanel「与开始层互斥」形态与类整体吸收退役含 .uid);可扩展滚动列表页四区块(随机种子/数值调整/批量模拟/两层调试入口——后续调试项往下追加滚轮下探)。四拍板全落(2026-10-04 用户裁)=P1 甲 DS_DEBUG 门控/P2 乙全摊平/P3 仅开始菜单可开·对局不可达(_show_debug_overlay 门禁护栏+对局发起随开随收)/P4 可扩展列表。**✅ 已全批落籍(2026-10-05,worktree iter145-debug-hub 两提交 48c0b34/46dadbb,主区 merge --no-ff d0a3c6b/10c301b,台账 352)**:闸=冒烟 747/0+探针 ui_tune/ui_click/ui 三绿(worktree+主区双跑,主区跑前 --import 重刷类名缓存在册坑);遗留=实机目检归用户(DS_DEBUG=1 启动→右下角角标→浮窗四区块→两层调试入口) | 卡①门:迭代 14 出口(注:本卡先于迭代 14 出口落籍——编入时点迭代 14 ③已闭/①②④⑤在飞/⑥挂起,门列仅记编入时点状态,不构成追溯闸) | 单批已落地(原估 0.5d,实际一次会话);后续扩调试项=debug_overlay.gd _build() 列表区追加区块(P4 扩展口径) | | 迭代 15 | **②奇物概念收口与词族对齐批(2026-10-05 用户令编入本迭代)**:概念层已由用户逐轮裁定定稿(《奇物》v1.0→v2.7,7 轮),本批只做**落地对齐**、不做二次设计。三批内容:**①三套旧词族全面对齐**(顶层已改名「奇物」而代码仍叫旧名=用户最初抱怨的"文档与代码分开"):`feature_*`→`curio_*`(103 处/7 文件)、`relic_*`→`feat_*`(162 处/12 文件)、运行层 `bonus_*`→`curio_*`(160 处/8 文件)。**硬约束:`reward_*` 已被 `reward_pick`/`reward_node`/`reward_preview` 占用,统一词族不得使用**;`relic_table.gd` 与两个控制器类改名须同步 Godot `.uid`/`.tscn`(非文本层无法自证)。**②三条渠道按分类分离**(现行三渠道共用同一个 98 张池、三类混编):关底 Boss 击败=通过这一关→只出专长;奖励节点/商店→属性值提升+资源、专长在此**只以门票形式**出现。**兑付频率红线**:奇物不是打一场战斗给一份,关内普通战斗节点打完不给任何奇物,一关之内只兑付一次(用户 2026-10-05 纠错)。**③两个新种类入池**=刷新次数(须先与"商店独立刷新机制"划清边界)+ 专长获取门票(拿到即开不可囤积/罕见只在概率/一局限购一次/计步保底:连续 5 次三选一展示未出→第 6 次必出,刷新重展计入、奖励节点与商店共享计数);附带 `shop.tres` 补回复(默认原则要求分类内成员都在该出现的渠道池里)与 charge 标签补至 ≥4 件(现仅 3 件,档二永远达不到——数据缺陷)。设计事实源=`design/gdd/systems/冒险循环/奇物.md` v2.7,任务书=`design/research/任务书-奇物词族对齐与渠道分离批-2026-10-05.md`(T0-T8≈4.5d,两段切分预案在册〔段一词族 T0-T3≈2d/段二渠道+入表 T4-T8≈2.5d〕,切分点=T3 出口;11 条设计契约含 6 条 🔴 停机级;12 条批末验收断言;代拍板白名单 5 项;待用户裁点 4 项〔玩家可见面违规/第四关档二复裁/门票四参数终值/存档键正式迁移〕)。**开工门**:与在途 M-4 各批(判式换代/全局变异/配比预设)撞同一批文件(`adventure_table.gd`/`level_runner.gd`/`adventure.tres`),须确认不并行或用户明示插队 | 卡②门:迭代 14 出口 | 卡①已落籍(原估 0.5d);卡②T0-T8≈4.5d(可两段切分:词族对齐段 + 渠道入表段) | | 迭代 15 | **③秘宝代码词族对齐批(2026-10-05 用户令编入本迭代)**:设计侧已完成(消歧更名批 `430419c`+`06e94b7`,26 个设计文档「魔法道具」→「**秘宝**」,同调位机制名保留不变),本批只做**代码侧对齐**、不做二次设计。内容:`aux_*`/`AuxItem*` 词族全族换词 **358 处 / 36 文件**(重灾 `adventure_runner.gd`79 / `level_runner.gd`27 / `bonus_interact_controller.gd`19 / `battle_orchestrator.gd`18 / `config_db.gd`14 / `main.gd`13),分五组落:**A 玩家可见文案(P0,5 处)**=`battle_narrator.gd:117-118` + `bonus_interact_controller.gd:76` + `hero_info_panel_view.gd:56`(槽位标题 `UiKit.label`)+ `:178`(tooltip)· B schema 与数据表(`aux_item_table.gd`/`aux_items.tres`/`aux_items.gd` 文件名+类名+`ConfigDB` 持有变量与访问器全链跟改,**须同步 Godot `.uid`/`.tscn` + `--import` 重刷类名缓存**——迭代 14.5 实证在册坑)· C 文档链接修复(含 `architecture.md` 两处既有断债顺带清偿)· D 中文注释层(**须分色**:`魔法矢`/`魔法反噬`/`魔法族`/`魔法护甲` 属敌方伤害护甲语汇🔴不动)· E 测试文件名+内部变量。**用户三项拍板**:全族彻底改(含数据表)· **断点存档键一律保留**(`bonus_aux_carry`/`aux_detail`/`aux_cleared`/`aux_cleared_last`/`aux_items` 断点数组/`attunement_charges` 共 34 处引用一字不改,破档即进度丢失)· registry 条目键 `aux_items` 不改(数据契约键)。设计事实源=`design/gdd/systems/排雷循环/秘宝.md` v0.9,任务书=`design/research/任务书-秘宝代码词族对齐批-2026-10-05.md`(T0-T9≈5.0d,**超软盒 3 日上限·知情预挂**:T7 段末闸后 L3 呈报切点不擅切;**三档降级面 G1/G2/G3 在册**〔G3 下限=仅组 A 完成〕;5 条设计契约含 5 条 🔴 停机级〔存档兼容零破坏/数值零漂移/schema 契约面零变更/零字段更名/核心层零 await〕;代拍板白名单 5 项;**C1/C2 已裁关闭·全改保一致·待裁点 0 项**)。**撞批已消解**:② 奇物批 2026-10-05 收口落库(合并 `c571af2`),并行风险解除,本批为迭代 15 唯一在途需求;**T0 须重取基线**(判式换代批 T5 读数 750/0、② 又动数据层,§1.2 的 747 为②前旧数禁沿用)并复核事实表。**✅ 裁决(用户 2026-10-05「全改保一致」)**:C1 `"aux_item"` 域串**照改**(实测连锁面收窄——`reward.tres` 已零 aux_item 数据行,池种随迭代 11 T7 退役;16 处字面量全在代码内闭合无存档依赖;唯一连锁项=`smoke_all.gd:3932` 断言须同步)· C2 `aux_items` 一名两义**拆分**(ConfigDB 持有变量+表注册键✅改 / 断点存档键+冒烟夹具🔴禁改——**「键名禁改」与「变量名禁改」是两回事**,禁改的只是落盘字面量)。新增**组 F**(分派语汇与域串 16 处),任务卡扩为 T0-T10≈5.5d。**开工门**:✅ 已无待裁点,可直接发 T0 | 卡③门:迭代 14 出口(**裁点已全决·可开工**) | 卡①已落籍(原估 0.5d);卡②已落籍(`c571af2`);**卡③可开工**(无待裁点;T0 取基线后回填估时) |