From 1d2894b555fae990423f83a5039e4acb158623e3 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 8 Oct 2026 05:03:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=8D=A1=E2=93=AA?= =?UTF-8?q?=E2=91=A0=E2=91=A1=E2=80=94=E2=80=94=E4=B8=BB=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=BC=80=E6=96=B0/=E7=BB=AD=E7=8E=A9=E4=B8=A4=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E8=A1=A5=E4=BC=A0=E5=90=8C=E8=B0=83=E4=B8=89=E9=94=AE?= =?UTF-8?q?=EF=BC=88build=5Fadventure=5Fparams=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=9E=84=E9=80=A0=EF=BC=8C=E5=8F=96=E5=80=BC=E4=B8=8E=E8=90=A5?= =?UTF-8?q?=E5=9C=B0=E6=8A=95=E5=BD=B1=E5=90=8C=E6=BA=90=EF=BC=89+?= =?UTF-8?q?=E5=85=B3=E5=8D=A1=E5=BC=80=E5=9C=BA=E8=A1=8C=E6=94=B9=E4=BC=A0?= =?UTF-8?q?=20runner.effective=5F*=20=E5=BD=93=E5=89=8D=E7=94=9F=E6=95=88?= =?UTF-8?q?=E5=80=BC=E3=80=81=E5=90=AB=E9=9D=A2=E6=9D=BF=E5=8A=A0=E6=88=90?= =?UTF-8?q?=E5=90=8E=E7=BC=80=E6=94=B9=E8=AE=A4=E5=B1=80=E5=A4=96=E5=8A=A0?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/main.gd | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 69430c08..63d93708 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -467,7 +467,9 @@ func _resume_from_menu() -> void: log_view.clear() logger.start_session(int(bp.get("master_seed", 0))) adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct()) - if not adventure.resume_adventure(bp, {"hero_override": meta.hero_override() if meta != null else {}, "treasure_unlocked": _treasure_ui.unlocked_set()}): + # 迭代 19 卡⓪①——同调三键随续玩下传(build_adventure_params 统一构造,与开新局同源同口径) + if not adventure.resume_adventure(bp, build_adventure_params(save_manager, meta, + {"treasure_unlocked": _treasure_ui.unlocked_set()})): _fatal_screen("续玩恢复失败——见输出日志") return @@ -491,6 +493,23 @@ func _wire_adventure() -> void: adventure.set_save_manager(save_manager) # 断点承载注入(迭代 8 卡①——停点快照写盘;调试/模拟不经过此路径) +# 冒险开局参数面构造(主菜单开新/续玩两入口共用——迭代 19 卡⓪①:同调三键随开局下传,真实局此前恒空。 +# 取值口径与营地投影完全同源:装配集=save.attunement_equipped(save_manager.gd 访问器)、Y 刷新池= +# meta.attune_refresh_charges(当前等级行表值)、树 rule 键集=meta.tree_rule_keys(Fork 激活侧 effects); +# hero_override 沿用既有 meta 现算口径。static 形态=冒烟直呼单测本函数,免实例化整菜单场景)。 +# 注:runner 侧 resume_adventure 受理面现收 attunement/attune_refresh_y 两键(tree_rules 暂不消费—— +# 传参先行,受理缺口在册披露)。 +static func build_adventure_params(save_manager_ref, meta_ref, extra: Dictionary = {}) -> Dictionary: + var params: Dictionary = { + "hero_override": meta_ref.hero_override() if meta_ref != null else {}, + "attunement": save_manager_ref.attunement_equipped() if save_manager_ref != null else [], + "attune_refresh_y": meta_ref.attune_refresh_charges() if meta_ref != null else 0, + "tree_rules": meta_ref.tree_rule_keys() if meta_ref != null else [], + } + params.merge(extra, true) + return params + + # 冒险模式(三关连探——AdventureRunner 编排;转发信号签名与 runner 一致,接线照原样对接; # 信号连接只在组合根——ADR-0001) func _start_adventure() -> void: @@ -506,8 +525,10 @@ func _start_adventure() -> void: adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct()) # 永久强化注入(元进度实现批):冒险开始参数面——meta 现算 override 显式传参(全零 = 白板) # 首次冒险脚本(关卡节点图生成 v0.4):存档布尔位 false = 全关固定模板 0(教学重放);置位后逐关抽签 + # 迭代 19 卡⓪①——同调三键随开局下传(build_adventure_params 统一构造,与营地投影同源) var first_script: bool = not save_manager.is_first_adventure_done() - if not adventure.start_adventure(seed_val, {"hero_override": meta.hero_override() if meta != null else {}, "first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"}): + if not adventure.start_adventure(seed_val, build_adventure_params(save_manager, meta, + {"first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"})): _fatal_screen("冒险启动失败——见输出日志") return @@ -516,9 +537,14 @@ func _start_adventure() -> void: # 停点前移批 2026-09-23:本回调返回后才有 choices_presented 到达——入口选路层随即弹出) func _on_adventure_level_started(level_index: int, display_name: String) -> void: runner = adventure.runner() + # 迭代 19 卡⓪②——开场行改传当前生效值(runner.effective_atk/effective_max_hp 与战斗面板同源: + # 表值+永久强化 flat+加算区 flat 后乘调试浮窗 pct,本回调时点 runner 已带全部加成);「含面板加成」 + # 后缀判断同步改认局外加成——永久强化 atk/max_hp flat 或调试浮窗 pct 任一存在才带,白板局不带 + var ov: Dictionary = meta.hero_override() if meta != null else {} log_view.append_bb(Narrator.level_open_line(display_name, int(adventure.master_seed), - int(db.hero.atk), int(db.hero.max_hp), - debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0)) + runner.effective_atk(), runner.effective_max_hp(), + int(ov.get("atk", 0)) > 0 or int(ov.get("max_hp", 0)) > 0 + or debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0)) func _reset_run_scope() -> void: From fb845b78dcdf5e7ce4f7693f68c36d7a5f769a97 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 8 Oct 2026 05:05:51 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=8D=A1=E2=93=AA?= =?UTF-8?q?=E2=91=A2=E2=80=94=E2=80=94=E5=86=92=E7=83=9F=E8=A1=A5=E4=B8=BB?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E4=B8=A4=E5=85=A5=E5=8F=A3=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E6=96=AD=E8=A8=80=EF=BC=88=E7=9B=B4=E5=91=BC=20build=5Fadventu?= =?UTF-8?q?re=5Fparams=20=E5=8D=95=E6=B5=8B=E7=BB=9F=E4=B8=80=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E9=9D=A2=EF=BC=9A=E5=BC=80=E6=96=B0/=E7=BB=AD?= =?UTF-8?q?=E7=8E=A9=C3=97attunement/attune=5Frefresh=5Fy/tree=5Frules=20?= =?UTF-8?q?=E4=B8=8E=E6=9D=A5=E6=BA=90=E4=B8=80=E8=87=B4=20+840=20?= =?UTF-8?q?=E6=80=BB=E9=87=8F+6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/smoke/smoke_all.gd | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 9da0c5a9..ceb995a1 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -4658,6 +4658,33 @@ func _meta_settle_and_workshop() -> void: a12._reset_refresh_x() check(a12.attune_refresh_left() == 1, "刷新 X 每碰三选一重置(不结转——重碰面 x 回表值 1)") + # ⑬ 主菜单开局传参面(迭代 19 卡⓪①③——开新/续玩两入口同调三键随开局下传防回归:真实入口此前 + # 三键恒空(缺陷①),冒烟夹具直呼 runner 参数面拦不住——此处直呼 main.build_adventure_params + # 单测统一构造面(static 免实例化整菜单场景;真实两入口共用本构造),取值与营地投影同源) + var sv_e = _meta_new_save(_META_SMOKE_PATHS[8]) + sv_e.set_attunement_equipped(["luck_coin"]) + sv_e.set_attune_refresh_level(2) + sv_e.set_fork_side("fg_posture", "a") + var mp_e = load("res://core/meta_progression.gd").new(_db, sv_e) + var rules_e: Array = mp_e.tree_rule_keys() + check(rules_e.has("posture_first_strike") and mp_e.attune_refresh_charges() == 2, + "开局传参夹具前置:Fork 侧 a 激活 rule 键非空 + Y=Lv2 行表值 2(防断言空转)") + var p_new: Dictionary = load("res://presentation/main.gd").build_adventure_params(sv_e, mp_e, + {"first_script": true, "treasure_unlocked": {}, "shop_mode": "pool"}) + check((p_new.get("attunement", []) as Array) == (sv_e.attunement_equipped() as Array), + "主菜单开新冒险参数面:同调装配 = 存档装配集(营地装了什么开局就带什么)") + check(int(p_new.get("attune_refresh_y", -1)) == mp_e.attune_refresh_charges(), + "主菜单开新冒险参数面:Y 刷新池 = 当前等级行表值(营地升几档开局就给几次)") + check((p_new.get("tree_rules", []) as Array) == rules_e, + "主菜单开新冒险参数面:树 rule 键集 = Fork 激活侧 effects(点哪侧带哪侧)") + check(bool(p_new.get("first_script", false)) and String(p_new.get("shop_mode", "")) == "pool", + "主菜单开新冒险参数面:入口特有键(first_script/shop_mode)随 extra 原样并入") + var p_resume: Dictionary = load("res://presentation/main.gd").build_adventure_params(sv_e, mp_e, + {"treasure_unlocked": {}}) + check((p_resume.get("attunement", []) as Array) == (sv_e.attunement_equipped() as Array) + and int(p_resume.get("attune_refresh_y", -1)) == mp_e.attune_refresh_charges() + and (p_resume.get("tree_rules", []) as Array) == rules_e, + "主菜单继续上局参数面:三键与开新冒险同源同值(续玩不吃白板开局)") _meta_smoke_cleanup() From 8a654ccece0483c7268766ddd125dc70117d9798 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 8 Oct 2026 05:07:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=8D=A1=E2=93=AA?= =?UTF-8?q?=E2=91=A3=E2=80=94=E2=80=94=E5=88=A0=20adventure=5Frunner.gd=20?= =?UTF-8?q?start=5Fadventure=20=E4=B8=89=E8=A1=8C=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E8=B5=8B=E5=80=BC=EF=BC=88=E9=80=90=E5=AD=97=E9=87=8D=E5=A4=8D?= =?UTF-8?q?+=E4=B8=AD=E9=97=B4=E9=9B=B6=E8=AF=AD=E5=8F=A5+=5Fseed=5Fattune?= =?UTF-8?q?=5Fcharges=20=E7=BA=AF=E9=87=8D=E7=BD=AE=E5=B9=82=E7=AD=89=3D?= =?UTF-8?q?=E9=9B=B6=E8=A1=8C=E4=B8=BA=E5=8F=98=E5=8C=96=EF=BC=8C=E8=AF=81?= =?UTF-8?q?=E6=8D=AE=E4=B8=8E=E5=9B=9B=E4=BB=B6=E5=AF=B9=E7=85=A7=E8=A7=81?= =?UTF-8?q?=E5=87=BA=E5=8F=A3=E6=8A=A5=E5=91=8A=EF=BC=89=EF=BC=9B=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=8A=A5=E5=91=8A=E9=9A=8F=E6=89=B9=E8=90=BD=E7=B1=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qa/iter19-card0-exit-report-2026-10-08.md | 96 +++++++++++++++++++ game/core/adventure_runner.gd | 3 - 2 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 design/qa/iter19-card0-exit-report-2026-10-08.md diff --git a/design/qa/iter19-card0-exit-report-2026-10-08.md b/design/qa/iter19-card0-exit-report-2026-10-08.md new file mode 100644 index 00000000..5c23571a --- /dev/null +++ b/design/qa/iter19-card0-exit-report-2026-10-08.md @@ -0,0 +1,96 @@ +# 迭代 19 卡⓪「主菜单开局缺陷修复批」出口报告(2026-10-08) + +- worktree:`D:\code\g-plan2-iter19-card0`(分支 `iter19-card0-20261008`,基点 b0a73df = master 顶部) +- 台账号:**398**(记账前以 `git -C D:/code/g-plan2 show master:active.md` 查撞——master 无 398;397 条预配「卡⓪398」与本卡一致,未撞未顺延) +- MC/verifier:零跑(本卡 MC=静态论证,见 §5) + +--- + +## 1. 四件逐件改动对照(file:line 改前 → 改后) + +### ① 主菜单两入口补传同调三键 + +T0 实查:行号与任务书一致(新冒险入口 main.gd:510、继续上局入口 main.gd:470);接收面确认 start_adventure :129-130+138 三键齐、resume_adventure :215-216 仅两键(见 §7 披露项)。三键来源复用既有营地投影口径,零新读取逻辑: + +| 键 | 来源(既有访问器) | 与营地投影同源依据 | +|---|---|---| +| attunement | `save_manager.attunement_equipped()`(save_manager.gd:314-316) | `meta.attune_camp_status()["equipped"]` 同一读数源(meta_progression.gd:368) | +| attune_refresh_y | `meta.attune_refresh_charges()`(meta_progression.gd:394-395,当前等级行表值) | `attune_camp_status()["refresh"]["charges"]` 同一读数源(:386) | +| tree_rules | `meta.tree_rule_keys()`(meta_progression.gd:241-253,Fork 激活侧 effects) | 树 rule 键集唯一既有取值口 | + +改动(均 `game/presentation/main.gd`): + +- **新增 static 构造函数 `build_adventure_params`**(改前 :493 空、改后 :496-513)——两入口共用参数面构造;hero_override 沿用既有 `meta.hero_override() if meta != null else {}` 口径原样搬入;static 形态=冒烟直呼单测(③),免实例化整菜单场景。 +- **继续上局入口**(`_resume_from_menu`,改前 :470 内联 2 键 dict `{"hero_override", "treasure_unlocked"}` → 改后 :470-471 `build_adventure_params(save_manager, meta, {"treasure_unlocked": ...})`,产出 5 键)。 +- **开新冒险入口**(`_start_adventure`,改前 :510 内联 4 键 dict → 改后 :528-530 `build_adventure_params(save_manager, meta, {"first_script", "treasure_unlocked", "shop_mode"})`,产出 7 键)。 + +runner 侧受理零改动(任务书明令「无需改 runner 侧受理」)。 + +### ② 关卡开场行攻血改传当前生效值 + 后缀认局外加成 + +改动(`game/presentation/main.gd` `_on_adventure_level_started`,改前 :517-521 → 改后 :539-549): + +- 攻/血:改前传初始表值 `int(db.hero.atk)` / `int(db.hero.max_hp)` → 改后传 `runner.effective_atk()` / `runner.effective_max_hp()`——与战斗面板同源(battle_orchestrator begin_battle enc 的 `hero_atk`/`hero_max_hp` 即 LevelRunner.effective_*,level_runner.gd:479-480)。回调时点 runner 已带全部加成:`level_started` 在 `_runner.start_level_external(...)` 之后 emit(adventure_runner.gd:946,改后 :943),base_override/加算区/调试 pct 均已注入。 +- 「含面板加成」后缀判断:改前只认 `debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0` → 改后追加认局外加成 `meta.hero_override()` 的 atk/max_hp 两轴 flat 任一 >0(调试 pct 条件保留)。白板局(无局外 flat、无面板 pct)不带后缀。后缀文案本身零改。 +- 依据:06-待办清单「关卡开场行攻血显示初始表值」条——「战斗面板用 level_runner.gd:480 生效值……两处数字对不上;后缀只认调试浮窗 pct,局外加成不触发注记」,用户 2026-10-07 确认缺陷成立。 + +`battle_narrator.gd:38-40`(level_open_line)零改——签名与拼装能力本就够用。 + +### ③ 冒烟补主菜单入口传参断言 + +改动(`game/smoke/smoke_all.gd`,新增 :4661-4687,⑫同调段之后、`_meta_smoke_cleanup()` 之前): + +- 形态:直呼 `load("res://presentation/main.gd").build_adventure_params(...)` 单测统一构造面(static 免实例化整菜单场景,对既有冒烟夹具零侵入——level_autoplay 直呼 runner 的旧口径原样不动)。 +- 夹具(隔离档 `_META_SMOKE_PATHS[8]`=smoke_meta_tree.json,随段尾既有 cleanup 清理):装配 `["luck_coin"]` + Y 升 2 档 + Fork `fg_posture` 取 a 侧;前置断言防空转(rule 键非空 + Y=Lv2 行表值 2)。 +- 断言 6 项(大白话文案): + 1. 前置:Fork 侧 a 激活 rule 键非空 + Y=Lv2 行表值 2; + 2. 开新冒险:同调装配 = 存档装配集(营地装了什么开局就带什么); + 3. 开新冒险:Y 刷新池 = 当前等级行表值(营地升几档开局就给几次); + 4. 开新冒险:树 rule 键集 = Fork 激活侧 effects(点哪侧带哪侧); + 5. 开新冒险:入口特有键(first_script/shop_mode)随 extra 原样并入; + 6. 继续上局:三键与开新冒险同源同值(续玩不吃白板开局)。 +- 两入口覆盖说明:真实两入口共用 `build_adventure_params`(①的落法),开新/续玩两组断言即两路径的传参面;构造函数被两入口弃用回归时第 2-6 项即转红。 + +### ④ 删 adventure_runner.gd 三行重复赋值 + +改动(`game/core/adventure_runner.gd`,改前 :132-134 三行 → 删;现 :129-131 单组赋值收尾): + +零行为变化证据: + +1. **逐字重复**:被删 :132-134 与保留 :129-131 三行逐 token 相同(`_attunement = params.get(...)`、`_attune_refresh_y = maxi(0, int(params.get(...)))`、`_seed_attune_charges()`),同一 params 实参下二次赋值结果逐位相等。 +2. **中间无扰动**::131 与被删 :132 之间零语句——两次 `_seed_attune_charges()` 连续背靠背调用。 +3. **`_seed_attune_charges` 幂等**(:635-640,改后 :632-637):函数体 = `attune_charges = {}` 整体重置后按 `_attunement`+表行重灌——纯函数(读 params 已落地的 `_attunement` 与 db 表行,零 RNG、零信号、零 db 写),连续两次调用终态与一次相同。 +4. **闸实证**:删后 run_smoke 840/0、run_all 17 套件全绿(含 breakpoint_resume/curio_refresh_paid 等直呼 start_adventure 参数面的套件)——充能账本/刷新双源行为断言零漂移。 + +## 2. 闸数字(改前基线 / 改后) + +| 闸 | 改前(主区 b0a73df 实测基线) | 改后(本 worktree 批末) | +|---|---|---| +| run_smoke | 834 项 0 失败,三闸过 | **840 项 0 失败,三闸过**(+6=③新增断言,失败数持平 0) | +| probe_gate 默认段 | input/struct/contrast 三探针全绿 | 三探针全绿 | +| probe_gate --click | 全绿 | 全绿(click 走查真跑主菜单开局一场冒险,问题=0) | +| run_all | 17 套件全绿 | 17 套件全绿 | +| 残留 Godot | 0 | **0**(probe_gate 批末闸「本闸残留 Godot=0 · 全局 Godot=0」) | + +中间轮次:改动落齐后即跑轻闸(probe_gate 默认段全绿 + run_smoke 840/0),批末重闸三件全跑如上。 + +## 3. MC 零跑静态论证(一句话) + +本卡 MC=静态论证:MC 取数面不经主菜单入口(adventure_monte_carlo/level_autoplay 直呼 AdventureRunner 参数面,在册夹具口径不动),故 ①② 的呈现层改动对 MC 路径零触及,MC 零跑零风险。 + +## 4. 范围外三件未触碰声明 + +- X/Y 刷新双源语义倒置(adventure_runner.gd 原 :658-659/:706-709,删重后 :655-656/:703-706):**零触碰**(④删除的三行在其上方,纯行号平移,内容未动——待用户裁定甲/乙)。 +- 被动同调件呈现:**零触碰**。 +- Fork 规则归因行(呈现层):**零触碰**。 +- 主区其余脏文件:**零触碰**(全程只在本 worktree 改动三文件+出口报告+active.md;主区仅 `git -C` 只读查询)。 + +## 5. 遗留与移交项 + +1. **runner 侧 resume_adventure 受理面无 tree_rules 键**(:215-217 仅收 attunement/attune_refresh_y;任务书「接收面 :215-217 现成」对 tree_rules 不成立)。本卡按「无需改 runner 侧受理」执行:两入口三键均已传出,续玩局 tree_rules 暂不被消费(=续玩局 Fork 规则键暂不生效,与修复前同态、无回归)。移交:runner 侧补一行受理(`_tree_rules = params.get("tree_rules", ...)` 同 :138 款)即可闭环,归用户裁定后随任一后续批落。 +2. X/Y 双源语义倒置仍待用户裁定(范围外,登记 06)。 +3. 开场行后缀在「局内有加算区 flat 但无局外加成」时无注记(数字含加算区但 suffix 不带)——按任务书「局外加成存在才带」字面口径执行,如需扩展认加算区归设计批裁定。 + +## 6. 提交清单 + +(本节随提交落定,见 git log——分四笔:修复①② / 断言③ / 清理④+出口报告 / 台账 398 记账。) diff --git a/game/core/adventure_runner.gd b/game/core/adventure_runner.gd index 6f214914..b3b8cd2a 100644 --- a/game/core/adventure_runner.gd +++ b/game/core/adventure_runner.gd @@ -128,9 +128,6 @@ func start_adventure(seed_val: int, params: Dictionary = {}) -> bool: _treasure_unlocked = params.get("treasure_unlocked", {}) if params.get("treasure_unlocked", {}) is Dictionary else {} _attunement = params.get("attunement", []) if params.get("attunement", []) is Array else [] # additive(迭代 11 第①批 T5) _attune_refresh_y = maxi(0, int(params.get("attune_refresh_y", 0))) # additive(迭代 11 第①批 T5b——Y 冒险周期池) - _seed_attune_charges() # 迭代 11 第①批 T6——冒险开始充能账本按装备主动件重置(每冒险充能语义) # additive(迭代 7 T5) - _attunement = params.get("attunement", []) if params.get("attunement", []) is Array else [] # additive(迭代 11 第①批 T5) - _attune_refresh_y = maxi(0, int(params.get("attune_refresh_y", 0))) # additive(迭代 11 第①批 T5b——Y 冒险周期池) _seed_attune_charges() # 迭代 11 第①批 T6——冒险开始充能账本按装备主动件重置(每冒险充能语义) # 特性开局注入(迭代 12 T7——MC 成型画像载体:params.relics_seed 非空=开局持有集〔七流派 # 各 2 件档一成型——测量面专用;真实局规则改写型特性只走局内随机渠道,红线②层级纪律不破〕) From 14839e883c802b740eef8d15046de45ae7bc434a Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Thu, 8 Oct 2026 05:11:47 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=8D=A1=E2=93=AA?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E8=AE=B0=E8=B4=A6398=E2=80=94=E2=80=94?= =?UTF-8?q?=E8=BF=AD=E4=BB=A319=E5=8D=A1=E2=93=AA=E4=B8=BB=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=BC=80=E5=B1=80=E7=BC=BA=E9=99=B7=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=89=B9=E5=B7=A5=E4=BD=9C=E6=97=A5=E5=BF=97=EF=BC=88=E5=9B=9B?= =?UTF-8?q?=E4=BB=B6=E5=85=A8=E8=90=BD+=E9=87=8D=E9=97=B8=E4=B8=89?= =?UTF-8?q?=E4=BB=B6=E5=85=A8=E7=BB=BF+resume=20tree=5Frules=E5=8F=97?= =?UTF-8?q?=E7=90=86=E7=BC=BA=E5=8F=A3=E6=8A=AB=E9=9C=B2=EF=BC=9Bmaster=20?= =?UTF-8?q?=E6=9F=A5=E6=92=9E=E6=97=A0398=E3=80=81397=E6=9D=A1=E9=A2=84?= =?UTF-8?q?=E9=85=8D=E5=8F=B7=E4=B8=80=E8=87=B4=E6=9C=AA=E9=A1=BA=E5=BB=B6?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- active.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/active.md b/active.md index b2abd741..4b9be751 100644 --- a/active.md +++ b/active.md @@ -903,3 +903,5 @@ 396. **天赋树货币甲案修复批+卡③提案 S2 纠偏重写落籍(2026-10-07,裁决依据=用户 2026-10-07「按甲方案修复完」——树全钥石单币落定,T8「GP 余额域缺位」双币骨架披露销账;worktree g-plan2-iter18-treefix 分支 iter18-treefix 基点 3e9360d 三提交 d7a6406 修复/30154e5 提案 v1.1/129c21c 出口报告,主区 merge --no-ff 3b86c9b 零冲突)**:①修复六文件——meta_tree.tres 脊柱 16 行(sp_hp/atk/hit/ac × r1..r4)currency gp→keystone(价格 10/20/30/40 不动 provisional 归 M4)+表尾 T8 注释改钥石口径+裁甲销账行注;meta_progression.gd tree_buy 删 currency 分叉直走 spend_keystone(tree_buy_fork 原本同口零改动);meta_tree_table.gd CURRENCIES {gp,keystone,free}→{keystone,free}(缺省容忍语义不变)+头注单币口径;camp_overlay_view.gd 树购买钮「购买 N」→「购买 N 钥石」;smoke_all.gd 4670/4677 断言消息文字随批换代(逻辑零改);meta.tres 表尾陈旧注释顺带订正(「与 GP 商店同族…base 10」→同族指数值档位非货币+base_price 现值 20 系 2026-09-22 对齿批投值)。②卡③提案 v1.1 盘问轮 S2 纠偏——货币前提全案订正(现役营地一切消费货币=钥石非金币:buy_forge/tree/刷新升级全走 spend_keystone 消费口;GP=局内一次性货币开局清零不入存档两币永不互兑 元进度.md:55;错误根源=meta_tree.tres 脊柱行 gp 声明+meta.tres 陈旧注释「与 GP 商店同族」误导成文):〇节原案一/F1 事实行/4b 乙引文/5a 丙论据/第九节定价行/汇总表 5b-1、5c 行逐处换代;裁点 5b 整节重组(甲=纯钥石推荐/乙=局外金币余额域淘汰/丙=第三货币锻造币淘汰);裁点 5c 前提换钥石(甲=纯钥石零材料推荐,原「不要材料」结论存活);文末新增修订记录 v1.1;全文「金币」扫尾残余 9 处均系订正说明与备选案描述对象合法。③文档随批 F 三文档 grep 全零命中零改动(元进度.md 实际在 systems/跨局循环/〔任务书误写冒险循环目录,偏差披露〕无树双币表述/entities.yaml 无树货币登记/06-待办清单无 T8 树货币追认挂单项)。闸=worktree 基线冒烟 834/0+改后冒烟 834/0+probe_gate --click 全绿批末残留 0+ui_layout exit0 零脚本错误+ui_tune PASS+run_all 17 套件全绿+doc 三闸/熵增闸既有命中零新增(死链 4/gdd_lint 2 文件/退役术语 3/design-diagrams 越界均基点在案,本批触碰文件不在扫描域);MC 零跑(静态论证:tree_buy 改动前后同走 spend_keystone+free 行 price=0 零额消费无副作用+currency 字段全仓无残余消费方;经验背书=改后 834/0 全绿);主区落籍闸=冒烟 834/0+probe_gate --click 全绿(残留 Godot=0)。出口报告=design/qa/iter18-treefix-exit-report-2026-10-07.md(提交清单/闸数字/改动对照/文档命中清单/偏差披露六节);主区并行遗留脏文件全程只标旗不碰。;编排全程零停机点触发、零用户中断(③⑤⑦④ 各卡 §8 停机点全未触发,过程红灯八笔全部卡内自救闭环并留痕各出口报告);主区终态=冒烟 834/0(本迭代 811→834,+3 混编+20 生涯)+probe_gate --click 全绿+ui_layout/ui_tune exit0;四卡产物=提案 311 行 17 裁点待盘问/混编行 (2,5) 落表+07⑱ 读数义务/种子三分+浮窗四件+生涯页+存档 v6;**编排坑三笔在册**=①roadmap 相邻行换代合并冲突→「分支内并入 master」union 解(先例台账 386)②worktree 守卫豁免判据=命令文本须显式指向兄弟 worktree 路径且不含主区路径,主区内临时分支 git commit 放行不可靠(钩子按当前分支读值瞬时态)→台账统一走专用 ledger worktree 路线③合并后全局类名缓存陈旧致 click 探针挂死(--import 重刷即愈);主区并行遗留脏文件全程只标旗不碰(10→12 件系并行美术会话所为)。**人闸与裁决移交**=①卡③ 提案 17 裁点盘问裁决(异步不阻塞)②实机目检总清单 design/qa/迭代18-实机目检总清单-2026-10-07.md(⑤四项/⑦八项/④六项)③卡⑦ 代拍板追认六项+卡④ 追认十一项④卡⑤ 难度带 MC 取证顺延 Alpha 收官 M4 数值批届时另令;M4 数值批保持 Alpha 收官位未排期待用户发令。 397. **迭代 19 五卡 goal T0 开工(2026-10-08,用户令五卡打包一次跑完——卡⓪主菜单开局缺陷修复批先行+卡①②③并发≤3+卡④收尾,全绿前禁停;本 goal 即 U0)**:定义面落籍单独一笔提交(roadmap 迭代19/20 行+06-待办清单+四任务书〔卡①自动化验收 v1.1/卡②旧界面断言回补 v1.1/卡③CI预接线 v1.2/卡④提灯载体 v1.2〕六文件入库;主区其余脏文件全属在飞遗产禁碰零触碰);基线复读三闸全绿=冒烟 834/0 三闸过+run_all 17 套件全绿+probe_gate 含 click 全绿(残留 Godot=0);台账预配号分配=卡⓪398/卡①399-400/卡②401/卡③402/卡④403/总收口404起(各卡记账前逐笔查撞,撞号顺延+出口报告披露)。 +398. **迭代 19 卡⓪主菜单开局缺陷修复批(2026-10-08,裁决依据=roadmap 卡⓪任务面+06-待办清单两缺陷条〔2026-10-07 用户确认成立〕;worktree g-plan2-iter19-card0 分支 iter19-card0-20261008 基点 b0a73df)**:四件全落——①主菜单开新/续玩两入口补传同调三键(main.gd 新增 static build_adventure_params :496-513 两入口共用构造,:471/:530 接线;取值与营地投影同源零新读取逻辑=装配集 save.attunement_equipped/Y 刷新池 meta.attune_refresh_charges/树 rule 键集 meta.tree_rule_keys;runner 侧受理零改动);②关卡开场行改传当前生效值(main.gd:539-549——int(db.hero.atk/max_hp) 表值→runner.effective_atk/effective_max_hp 与战斗面板同源,「含面板加成」后缀判断追加认 meta.hero_override atk/max_hp 局外 flat,白板局不带);③冒烟补两入口传参断言 +6 项(smoke_all.gd:4661-4687 直呼 build_adventure_params 单测统一构造面,开新/续玩×三键与来源一致+extra 并入,夹具 smoke_meta_tree 档 luck_coin+Y2 档+fg_posture a 侧,834→840);④删 adventure_runner.gd 三行重复赋值(原 :132-134 与 :129-131 逐字重复+中间零语句+_seed_attune_charges 纯重置幂等=零行为变化,删后 run_all 直呼参数面套件零漂移佐证)。重闸三件全绿=冒烟 840 项 0 失败三闸过(+6 全系新增断言)+probe_gate 含 click 全绿(click 走查真跑主菜单开局一场冒险问题=0)+run_all 17 套件全绿+残留 Godot=0;MC 零跑静态论证在案(MC 取数面直呼 runner 不经主菜单入口零触及);范围外三件(X/Y 双源倒置/被动同调呈现/Fork 归因行)零触碰。**披露/移交**——runner 侧 resume_adventure 受理面无 tree_rules 键(:215-217 仅两键,任务书「接收面现成」对 tree_rules 不成立):两入口三键均已传出、续玩局 tree_rules 暂不被消费与修复前同态无回归,补一行受理即可闭环归用户裁定随后续批落。出口报告=design/qa/iter19-card0-exit-report-2026-10-08.md;提交四笔 1d2894b(①②)/fb845b7(③)/8a654cc(④+出口报告)/本笔(台账记账)。 +