Files
gplan-2/game/README.md
T

99 KiB
Raw Blame History

Dungeon Sweeper · 垂直切片(v2:第一关完整关卡)

// VERTICAL SLICE - NOT FOR PRODUCTION // Validation Question(v2,2026-09-11):线性第一关(战×2→道具→战×2→恢复→Boss)能否承载 // "数值提升→通关期望改善"的 Roguelike 元进度验证——基线属性应该难到打不过、天赋数值提升把 // 通关期望拉回可玩带,且这条曲线能用数值调整板 + 批量模拟测量出来 // (通关攻击期望 / 败北血量数学期望);v1 的单战斗循环问题(逐行归因 P2 / Core headless 可跑) // 已于 2026-09-10 验证并保持回归(smoke_all 前 46 项)。 // Date: 2026-09-10(v1)· 2026-09-11(v2 关卡扩展)· 引擎 Godot 4.7.2 · 本目录仅作设计验证参考,禁止 import 进生产代码

运行

  1. 用 Godot 4.7.2 打开本目录(含 project.godot 的文件夹)
  2. 按 F5 运行(主场景 presentation/main.tscn)
  3. 主入口:▶ 开始冒险(三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城)——一条命走完三关(冒险结构实现批 2026-09-21:生命/GP/加算区跨关同账、非末关通关发大奖励〔上限提升+血回满+钥石〕、任意战斗倒下冒险终、结算屏出冒险摘要五件事;选路停点可「放弃冒险」(同失败结算,2026-09-21 用户拍板补入口));首关节点链:战→战→赏→战→战→疗→王。唯一试玩入口 = 完整冒险——单关测试直入口(L2/L3)已退役(2026-09-23 用户拍板)
  4. 调试 角标浮窗(开始界面右下角,DS_DEBUG=1 门控——2026-10-04 迭代 14.5 调试整合批:原数值调整板/随机种子框/两层调试三散件收一):攻击/生命百分比加成(模拟天赋树解锁)+ 批量模拟(输出通关率/承伤期望/败北节点分布)+ 两层调试入口

headless 冒烟(752 项断言〔计数随批增长,现值以最新批末闸读数为准〕,含关卡线性推进/满配通关/裸装败北/回放确定性;2026-10-02 性能报告实测 60.55 秒,报告在 性能实测报告(已退役,git 历史可查)):

Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/smoke_all.gd

场景级 UI 探针(项目运行模式实例化 main.tscn 驱动第一关,断言棋盘真实渲染——D1 教训"呈现层零测试承载"的原型兑现):

Godot_v4.7.2-stable_win64_console.exe --headless --path . res://smoke/ui_probe.tscn

调试浮窗场景探针(缺陷⑤回归载体沿袭——2026-10-04 迭代 14.5 随批改接浮窗形态:打开可见性〔浮于菜单之上,开始层不隐藏〕/滑条联动/应用写表/重置/批量模拟全链路):

Godot_v4.7.2-stable_win64_console.exe --headless --path . res://smoke/ui_tune_probe.tscn

其余八场景探针(十探针全 roster 登记——ui_click_probe 行为链 / ui_input_probe 输入合成 / ui_layout_probe 布局 / t17_defer_probe 结算演播延迟链回归 / shot_probe·fx_probe·fx_shot_probe·board_shot_probe 画面与特效采样,同上式运行)+ 板图校准工具 smoke/calibrate_boards.gd(board_calibration.csv 重跑入口,--script 运行):

全冒险期望扫描(零加成三关连探批量——通关率/止步分布/败退节点;调参期难度读数一律走全冒险口径):

Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/adventure_monte_carlo.gd -- [N] [seed0]

(原关卡期望扫描 level_monte_carlo.gd 走单关直入口口径——满血零上下文进关与真实冒险脱节,随口径退役删除,2026-09-23 用户拍板。)

(原可选类供给跨种子扫描 supply_scan.gd 随可选类道具/库存/供给控制器整体删除而退役——2026-09-15 格面资源批,扫描对象已不存在。)

日志合规(2026-09-12 用户要求):任何模拟运行与真人试玩均落全量 JSONL(user://logs/)——逐操作(op/cell/accepted/round)、逐结算明细行、轮次状态快照、battle_end、level_end。模拟(verifier/adventure_monte_carlo / 调试浮窗批量模拟)一文件多局,run 行携带种子/档位切分局次。

试玩画像口径(2026-09-19 用户拍板固化——全项目试玩/扫描/面板模拟一律只用以下两档,随机策略口径退役):policy="normal" = 普通画像·基础定式(单数字满足规则——满足即标/满足即开,无处可推盲挖边界格、不刷新;教学后正常玩家的下限近似);policy="perfect" = 完美画像(single+subset 全推理零盲挖/卡死刷新——技能上界仪)。实现单一出口 = smoke/auto_player.gd(novice_action / perfect_action)经 smoke/level_autoplay.gd,调试浮窗批量模拟与各扫描工具自动同口径;战斗层冒烟夹具与调试转储的 choose_dig 直调是机制测试夹具、不承载画像语义。分级依据与新旧读数(乱点 0%/5% → 基础定式 65%/90%)见 auto_player.gd 普通策略档节与台账 77。

单关诊断工具(level_debug.gd)随单关直入口口径退役(2026-09-23)——败退归因走 balance_verifier 冒险段(层/节点/敌人人读归因)。 战斗级工具(v1 遗产):dump_battle.gd(结算流水)/ monte_carlo.gd(战斗期望)/ experiment_density.gd(密度调参)。

范围(v1 范围 + v2 追加,用户 2026-09-10/11 确认)

  • v1 在范围内:D2(10 表 + ConfigDB + RngService)· A1(single_subset 求解器 + 双判据验收)· A2 · A3(AP8/RAP)· A4(迷雾,L2)· B1(七段结算 + 13 类行协议 + 高光双落)· B2(grub/ambusher/伏击池 cap4)· B3(四行状态容器)· B4(install 预分配/F5 保底/道具窗口)· D1-lite 程序化呈现
  • v2 追加:LevelTable(线性节点链数据表)· C1-lite 关卡推进器 level_runner.gd(原 c1_level_runner,2026-09-11 领域命名批更名)(关卡域生命周期:共享 B4 关内延续 + HP 跨战斗携带 + 奖励/恢复节点兑付 + 关卡末清库)· Boss 遭遇行(Dmax=4)· 节点奖励 API(B4 grant_node_active)· 测试用角色数值调整板(atk%/hp% 覆盖 + 批量模拟,模拟天赋树——正式侧归 C4)
  • 裁剪不变:A5 / C1 路径分支选择(用户拍板线性)· C2–C4 / B5 战斗动画 / D3–D6 / A1 黄金向量与 F4 批量工具 / gdUnit · 注:标错惩罚(原 A2 OQ1)已于 2026-09-12 批上线(标空旗三选一确定性反噬:暴走 / 伏击 +2 层 / 失衡,坐标×板序号派生、不走随机流),本批(2026-09-15)已收编进现行文档,不再属裁剪项

2026-09-11 可选类供给控制器(用户拍板批——修改记录)

背景:供给控制器批前实测每关可选类 ≈24.8 件(≈18.5 把刀,刀总伤 ≈180 > Boss 130 HP)——"道具获取期望太高"定量坐实。用户重新定义三尺度指标并拍板实现:

尺度 指标 实现机制
安全格 期望极小(全图摊平 < 0.01/格) 可选类退出格子权重池——格子池只剩即时类四行
雷图 ≈0.78/板 战斗首件保证 ÷ 每战板数(≈1.28)折算
战斗 期望 ≈1,首件保证:获取首件前每张新板必注入 1 件;之后按 p0×decay^(j-1) 指数递减(永不绝育) RewardSupplyController(B4 私有组合件,战斗域计数)

拍板四条 → 落点:① 注入占比 小刀 60% / 精工短刀 30% / 治疗包 10%(治疗资源宝贵)→ reward.tres active_inject 池;② 清图奖励改一次性高额伤害(clear_knife 入库刀 → clear_blast instant_aoe 40,当场兑付全体存活敌,不入库、不占可选类供给——清图与供给脱钩);③ 注入选格均匀随机(雾格不加权);④ 指数递减(active_p0=0.4 / active_decay=0.5 → 0.4/0.2/0.1/0.05…,RewardConfigTable 新参数,provisional 归 C3 标定)。

实现结构(对象封装——伪代码审阅后落地):

  • core/reward_supply_controller.gd(新):notify_battle_start()(计数清零)/ should_inject(stream)(j==0 恒真;否则 randf < p0×decay^(j-1),取号经传入封闭流)/ notify_granted() / granted_count()。行值快照抗热重载;零自有随机数。
  • B4RewardEconomy(改造):_supply 组合件 · notify_battle_start()(B1.begin_battle 转发)· roll_board 重写(身份批即时类单遍 → 清图槽 → 注入判定/选格;旧 F5 草稿重 roll 循环删除)· grant() 挂钩 notify_granted()(发放即获取——预分配未挖到不计数;去重幂等天然防双计)· supply_granted_count() 观测面。
  • B1BattleOrchestrator:begin_battle 门序列增 b4.notify_battle_start()(编排唯一性不变)。
  • 表/护栏:RewardTable POOL_TAGS + active_inject;RewardConfigTable + active_p0/active_decay、k_dmg 1→0(F5 休眠);ConfigDB 跨表护栏更新(clear_no_value 含即时类 / no_damage_row 扫描全池活行 / 新增 inject_pool 护栏:非可选类拒绝 + 空池致命)。

实测(N=200 板/深度,工具 reward_expectation.gd):注入 1.00 件/板(j=0,多件板 0)· 占比 小刀 59–65% / 精工 25–29% / 治疗包 7–17%(名义 60/30/10)· 格池零可选类泄漏 ✓。实际获取期望(level_monte_carlo「可选类/战」列,N=15——工具已退役,数据归档):基线 0.88 → +200% 攻击 0.68 件/战(低于分配保证 1.0 的机理 = 注入格均匀随机,落在残余格/速杀未挖区时该件不获取;战斗末无兜底补发——是否加"战斗末 j==0 补发 1 件"待用户拍板)。每关合计 ≈ 4.5–6.5 件(原 24.8)✓ 拍板目标达成。

⚠️ 供给侧副作用(本轮扫描发现,待拍板):可选类退出格子池后,其 25% 概率质量被动流向即时类——攻防 buff 每格频率从 44% 升至 59%,基线通关率 55%→80%(N=15)、整关承伤 127→80:难度不降反升方向反了。即时类是"每格必有货"锁定设计下无法清空的(除非引入空白格 = 违反锁定事实)。候选杠杆:① 接受更快的 buff 节奏,敌 HP 曲线上调对冲(C3 主杠杆)② 下调 attack_up/defense_up 在即时池内的相对权重(压 buff 频率)③ buff 幅度下调(触碰 B3 表值)。

正式侧义务:B4 GDD「install 期 roll / F5」章节修订(F5 → 战斗首件保证语义)+ registry reward_table/reward_config 条目改写 + RewardConfigTable knob 登记(active_p0/active_decay)——接口漂移批随实现落位。

2026-09-12 轮内刷新(方案 A,用户拍板批——修改记录)

背景:用户发现刷新实现(仅 Waiting 结算窗口受理)与设计预期不符——预期为扫雷阶段遇到推理死路时,有剩余 AP 且 RAP 足够即可当场刷新继续挖。影响分析(三方案对比 + 16 代码触点 + 8 文档 + 5 数值连锁)后用户拍板方案 A。

拍板语义:① Active 相位可刷(RAP ≥ 8 且本轮未达上限)→ 当场 retire+install 换新图,轮次继续:AP 保留不重置、相位不动、不触发结算(敌方时间税语义变更——GDD 修订义务);② Waiting 相位刷新保持现状(登记意图,exit_distribution 换图);③ 每轮兜底上限 2 次(Active/Waiting 合计,ActionEconomyTable.refresh_max_per_round = 2 表值);④ RAP 来源不变(停手 1:1 转存)。

实现落点:A3 request_refresh_active()(仅扣 RAP,相位/AP 不动)· A2 install_board/retire_board 增 during_round 显式参数(Active 通道,其余相位守卫不变——fail-fast 保留)· B4 query_full_snapshot() · B1 can_request_refresh() 查询面 + player_request_refresh() 双相位重写 + _refresh_used_this_round 计数 + facts 身份快照隔离(缓冲期捕获身份快照、授予走快照——防旧图已挖格在轮末错拿新图同坐标身份;_grant_cell 增 snap_override)· 呈现层按钮"弃图刷新(RAP -8 · 每轮至多 2 次)"。

核心实现难点(分析批未暴露):轮内换图后旧图已挖未结算格与新图坐标重叠——轮末授予 b4.grant(cell) 会错拿新图身份。解法 = facts 缓冲期用 query_full_snapshot 冻结身份,授予段直通快照(绕过现行 mapping/_granted,批次隔离;库存语义不变)。

验证:冒烟 88/88(+14 轮内刷新断言:当场换图/相位 AP 保留/RAP 扣减/上限拒绝/跨图 facts 完整兑现〔4 格跨三图快照授予〕/回放确定性)· 三探针全 PASS · 期望扫描与刷新前持平(80%/0.88——模拟策略不主动刷图,真人专用出口)。调试教训(规范 4.6 补充案例):蛆虫 HP 已调 24 而"18 未掉血"误判——排查数值问题先核对当前表值;GDScript lambda 对局部 int 按值捕获(计数器必须用容器)。

正式侧义务(GDD/registry 修订清单):A3 GDD Rule 11(受理相位 Waiting → Active∪Waiting + 相位机表 + 时间税语义注记)· A2 GDD install 四不变式轮内场景 · B1 GDD 编排专章(轮内换图 + facts 快照协议)· B4 GDD E5/E6(query_full_snapshot/grant 快照直通)· game-concept 轮次流程 + "战斗:扫雷图 = 1:M"措辞(一轮跨多图新形态)· registry action_economy(refresh_max_per_round)· 数值连锁重跑(清图支配性条款⑤/获取期望——模拟不覆盖真人刷图行为,需 playtest 实测)。

2026-09-15 补记(用户拍板):Waiting(等待结算)相位刷新通道整体移除——呈现层入口此前已按 OQ12 退役(2026-09-12 战斗屏批),本批拆除核心层残留:账本侧 Waiting 受理入口 request_refresh() 删除、编排侧 can_request_refresh 不再放行 Waiting、player_request_refresh 等待期登记意图分支删除、出口分发删除 _refresh_used_this_waiting → new_board 换图分支(非清图轮恒同图)、字段与诊断快照键同步移除。文档侧无需修订——行动经济只写挖掘期刷新、战斗结算明文"非清图轮恒同图",拆完代码即双双收敛。冒烟断言改为"等待期刷新请求被拒且状态不变"。

同批其它改动(口径读法):明细行协议 13 类 → 15 类(新增窗口打开锚行 window_open、窗口跳过锚行 window_skip,服务"窗口段恒在案"验收;单点定义见战斗结算);状态表 四行 → 六行(暴走 / 失衡两行随标错反噬批收编);达标判定回归单一判据(可推理率 ≥ 及格线);求解器禁读雷位真值。本文正文的 v1/v2 范围登记与各历史批条目保留当时陈述,计数以现行文档与代码为准。

2026-09-11 关卡扩展批 · 切片级偏差登记(实现期决策,正式化时须回 GDD/ADR)

  1. C1 线性推进器 provisional:节点链来自 LevelTable(结构位 = 未来 C1 的数据承载面);路径分支/奖励点分布定稿权归 C1/C3。节点类型 closed enum {battle, reward, rest, boss};末节点必须 Boss(LevelTable schema 校验)。
  2. B4 新增 grant_node_active()(接口漂移):关卡奖励点在可选类活行 {damage_item, heal_pack} 中 roll 一件直接入库;消耗 reward_roll 恰一 scope(与 board install 批同流异 scope,流集合封闭不变)。正式侧应走 B4 GDD 修订(节点奖励 = clear_reward 插槽族的新来源候选)。
  3. B2 spawn max_hp 语义修复(切片 bug):原实现 max_hp = hero_hp 入参——跨战斗携带 HP 时 max_hp 被压扁成当前 HP,恢复点/治疗包满血守卫失效。修复为 max_hp = HeroTable.max_hp(接口语义澄清,正式侧回 B2 GDD Rule 注记)。
  4. A4 迷雾纪律遵守:L1 全程无雾(迷雾 unlock_level=2 已锁事实——迷雾自第二层解锁);Boss 板以 12×12 大板区分。
  5. 属性覆盖 = 测试专用:调整板直接写运行时 HeroTable(atk 域 [1,999] 内 clamp ≥1);关卡结束/回菜单恢复基线。正式天赋树归 C4,禁止生产代码引用本机制。
  6. UI 复用 b1 引用:关卡模式下呈现层 b1 = runner.b1(与调试模式共用 HUD/棋盘路径);runner 在关卡结束置 b1 = null。
  7. runner 信号时序(playtest 缺陷①修复登记):node_entered 必须先于 begin_battle 发出——后发时首板安装的 board_changed 到达呈现层时 b1 尚未接手,首战棋盘不渲染。场景级探针 smoke/ui_probe.tscn 为该缺陷的回归断言载体。
  8. A2 旗动作末点 AP 软锁(playtest 缺陷②修复登记——A2 核心 bug,v1 即存在):_do_flag_place/_do_flag_pull 花完末点 AP 后 A3 相位翻 Waiting 但不发 round_end——B1 的 Waiting 结算点依赖 round_end 到达,事件缺席 = 整局软锁(Boss 图插旗多,末点 AP 花在旗上即触发)。修复 = 旗动作检查相位翻转并补发 _emit_round_end_flags_and_payload()(与 _do_dig 同款)。v1 冒烟盲区根源:自动玩家不用旗。回归断言入 smoke_all(旗动作耗尽 AP 必须进入第 2 轮)+ 行为探针 smoke/ui_click_probe.tscn(合成鼠标事件走真实 UI 路径,随机混合插旗/拔旗/停手/窗口刷新/无效点击,4 种子全关通扫)。正式侧义务:A2 GDD F4 事件序契约须补"旗动作路径的 round_end 发射"措辞(接口漂移)。
  9. 呈现层固定分区(playtest 缺陷③修复登记):侧栏全部动态区(RAP/敌人/增益/库存/悬停状态)固定槽高 + clip_contents——悬停文案切换与库存增长不再推挤整体布局(此前"第 N 轮"库存行被挤出视口 + 全 UI 抖动)。区域独立,超长裁剪不回流。
  10. L1 12×12 板生成余量:D2–D4(及 L2)max_gen_attempts 16→24(F2c 24×144=3456 ≤ 16384 合法)——16 次尝试下偶发"重试耗尽接受最优"(best≈0.85–0.87 < target 0.88);24 次后仍偶发(best 0.866),密度×推理率的根本解归 C3。
  11. 道具使用后不消失(playtest 缺陷④修复登记——UI 层契约违例):B1 窗口选择契约 = _window_items 位置(义务④"选定序"),UI 选用按钮却传 item.index(库存数组句柄)——未消耗过时二者巧合相等;一旦消耗过一件,已耗条目仍占库存数组位,后续窗口条目"句柄 = 位置 + 已耗数"错位 → 选中件不消耗、邻件被误耗(可用次数语义本身存在且正确:use() 一次性标记 Used 不可逆)。修复 = UI/行为探针一律传窗口位置;探针加"选用必生效"断言(选用件库存态变 Used,失效即退出码非零)。
  12. 数值调整板被遮挡不可见(playtest 缺陷⑤修复登记 + 专属测试补建):调整板覆盖层在场景树中位于不透明的开始覆盖层之前,_show_tune_panel 只置 visible 不隐藏开始层 → 面板被完全遮住 = "点击无反应"。修复 = 打开隐藏开始层 / 关闭(含"应用并关闭")恢复。专属测试:smoke/ui_tune_probe.tscn(场景级全链路:打开可见性〔缺陷⑤回归〕/ 滑条→生效预览联动 / 应用写 hero 表 12/75 / 重置回基线 6/50 / 批量模拟 N=10 全链路〔与 headless 扫描同口径〕/ 关闭回开始界面 / 加成跨模式持久)。
  13. 呈现层模块化重构(2026-09-11 用户批——"上帝对象"拆分):main.gd 随功能追加长成 ~1100 行上帝对象(棋盘渲染/HUD/日志/四种覆盖层/调整板/模拟器/关卡流程全糊在一个类)。拆分为 9 个单一职责单元(总行数不变,最大单类 433 行):views/board_view.gd(棋盘渲染+输入意图翻译,动作经信号外发)· views/hud_view.gd(侧栏纯视图,setter+定长槽)· hud_presenter.gd(核心状态→文案装配,MVP 静态装配器)· views/battle_log_view.gd(13 类行协议格式化)· views/item_window_overlay.gd(窗口,选择=位置语义收口)· views/node_overlay.gd · views/level_strip_view.gd · views/tune_panel.gd(调整板自持加成语义+批量模拟)· views/ui_kit.gd(共享小部件)。组合根纪律:main.gd(433 行)= 模式流转 + 信号接线,核心写调用(settle_batch/submit_window_selection/runner 推进)只在此处发生;视图零核心写、装配器无状态。回归验证:冒烟 74/74 + ui_probe/ui_tune_probe PASS + 行为探针 2 种子(通关 + 选用生效 1/2 失效 0)。

切片调参登记 v2(2026-09-12 起已由 C3 GDD 转正为 MVP 默认曲线——下方登记保留作溯源)

EnemyTable L1 深度轴(D0–D4,Boss=Dmax=4——A1 第三轴登记约定),设计意图 = 基线难、天赋拉回可玩带:

节点 行 敌种×数量 hp atk 环
战1 (1,0) 蛆虫×1 24 4 [attack]
战2 (1,1) 蛆虫群×2 24 4 [attack]
战3 (1,2) 伏击兽×1 36 6 [attack,charge,heavy]
战4 (1,3) 伏击兽群×2 26 4 [attack,charge,heavy]
Boss (1,4) 遗迹守卫×1 130 7 [attack,attack,charge,heavy]

首版(敌 HP 总量 208:18/36/26/40/88)实测基线通关率 73%——预警⑥速杀退化在关卡尺度依旧成立,与"基线非常难"意图相反;v2 上调至 290(24/48/36/52/130)+ Boss atk 7。群战对价:unit_count=2 行单位 hp/atk 下调(B1 条款③满配语境约束;C3 正式调参须按 clause3_supply 复算——registry 已登记 unit_count>1 行须降密度或降 m_amb)。

BoardGenTable L1 深度行:D0/D1 = 10×10、D2/D3/D4 = 12×12,全部 d0.25/t0.88。登记:d0.28/t0.87 首测不达标(best≈0.805–0.817,降级告警"接受最优出图")——密度轴上调与求解器能力一起解,留给 C3。

奖励获取期望实测(问题2 汇报批,工具 smoke/reward_expectation.gd,N=200 板/深度,走真实 B4 roll 管线含 F5 保底条件化):

深度 板面 资格格均(min/max) 可选类/板 均 其中刀 治疗包
D0 10×10 12.4(1/36) 3.32 2.57 0.75
D1 10×10 11.1(2/32) 3.00 2.40 0.60
D2 12×12 22.8(4/63) 5.70 4.42 1.27
D3 12×12 23.8(5/61) 5.87 4.55 1.31
D4 12×12 24.1(6/64) 5.87 4.54 1.33

公式:每资格格 P(可选类) = 25/100 = 25%(小刀 15% / 精工短刀 4% / 治疗包 6%);每板期望 ≈ 25%×|资格格| + F5 保底条件化加成(k_dmg=1 整批重 roll 至少 1 刀——12×12 板无刀概率 0.81²³<1%,加成可忽略;10×10 板 ≈+0.2);清图奖励 clear_knife 仅真清图兑付(理性策略不整清 ≈0);完美排雷 ×2 条件苛刻不计基线;节点奖励恒为 1 件可选类。

每关合计 ≈ 23.8(板)+ 1(节点奖励)≈ 24.8 件可选类(≈18.5 把刀 + ≈5.3 治疗包)——刀总伤 ≈180,超过 Boss 单体 130 HP。用户"道具获取期望太高"的定量坐实:关内不清库(2026-09-11 裁决③)× 每格必有货(B4 锁定)× 12×12 深板资格格翻倍,三者相乘。候选杠杆(全部 C3 所有权,等拍板再动):① 可选类占比 25%→8–12%(改 knife_t1/knife_adv/heal_pack 权重)② 敌 HP 曲线上调对冲 ③ 刀伤下调 ④ 库存上限(触碰 B4 E 节结构,需修订)。

期望扫描数据(N=20/格,种子 4200+20,工具 level_monte_carlo.gd;理性玩家策略近似):

atk% / hp% 通关率 整关承伤 均/p90 通关剩余HP均(胜) 进BossHP均 平均轮数 败北节点分布
+0 / +0(基线) 55% 126.8 / 190 33.1 44.6 18.4 蛆虫群×4 · 伏击兽×2 · 伏击兽群×3
+0 / +100 100% 165.8 / 219 61.5 88.7 26.1 —
+50 / +0 70% 109.8 / 155 27.1 45.5 17.1 分散(含 Boss×1)
+100 / +0 100% 96.3 / 121 33.5 47.4 17.4 —
+200 / +0 95% 61.1 / 99 36.6 49.0 12.9 伏击兽群×1

读法:基线=明显吃紧(55%,死亡集中在前中期群战)→ 攻击+100% 即满通关带;HP 翻倍是独立有效的第二杠杆(战斗拖长 → 承伤期望上涨 165 但预算翻倍)。v1 敌数值(HP 208)时基线通关 73%——预警⑥速杀退化在关卡尺度坐实,v2(HP 290)压到 55%。注意:模拟者 = 理性策略近似(免费链式开格、无避雷推理),真人基线通关率应显著低于 55%——目标带定在哪儿(30%?10%?)待 playtest 拍板,杠杆 = EnemyTable hp/atk 深度曲线(C3)。

已知热点(playtest 观察项)

  • 基线难度体感:基线(无面板加成)应"明显吃紧、可能打不过";如果基线就能轻松通关 → 敌数值仍偏弱(找 C3 杠杆:EnemyTable hp/atk 曲线);如果 +100% 攻击还打不过 → 奖励供给或恢复点数值偏弱。
  • 奖励点随机主动道具的体感:roll 池 = 小刀 8 / 精工短刀 16 / 治疗包 12(等权);到手的刀是否改变了 Boss 战规划(囤刀 vs 即用)。
  • 恢复点(30% max_hp)时机:位于战4 与 Boss 之间——是否制造"要不要省治疗包给 Boss"的决策。
  • Boss 战节拍:遗迹守卫环 [attack,attack,charge,heavy]——蓄力拍是否被玩家用作"安全挖掘拍";重击 14 点是否构成规划压力。
  • 节点进度条/奖励恢复覆盖层可读性;v1 遗留观测项(结算逐行归因、完美排雷可达性)继续有效(原"雾池体感"一项随雾格移除作废)。

L2 试玩采集清单(分支节点图批 2026-09-17——关卡 2「幽暗地域」试玩观测项)

入口:「开始冒险」主入口推进到第二关段(单关测试直入口已退役——2026-09-23 用户拍板,唯一试玩入口 = 完整三关冒险;种子框同用)。

  • 选路行为:战斗胜利/兑付确认后弹出选路覆盖层(整图 + 候选按钮)——玩家是否理解"零自动推进、每跳都要选";单候选节点(恢复点→编号 6)是否被读成"卡住"。
  • 岔路使用率:四处真实岔路的走向分布(入口 0→[1,2];战斗 1→[3,4];奖励 2→[4,5];深层 4→[6,7])——奖励点路线 vs 纯战斗路线的选择比例;整图渲染是否被实际用来规划(对比只点按钮的玩家)。
  • 新敌种可读性:熊地精(突刺/重击池)的意图可读性;巨蜘蛛群行(2–3 只)的数量压力体感;蛛化卓尔精灵 Boss 的毒爆(×2.5)与重击(×2.0)是否构成规划差异(对照关卡 1 酋长的硬化池)。
  • 顶栏图条:图形态行进序列(已过暗金 → 当前金 → 候选亮边)是否足以反映位置;编号显示(节点编号 = 关内地址)是否被理解。
  • 数值读数参照(provisional,N=20 双策略扫描 2026-09-17):基线裸值通关 0%(死因集中 Boss×16);hp+100% 档 35% → atk+150%/hp+100% 档 80%——真人试玩体感与读数的偏差即试玩采集的主要增量。

2026-09-11 用户拍板(四条,已落地本切片)

# 拍板 切片实现落点
① 基础攻击恒存在:atk 域 [1,999]、0 拒绝加载、MVP=6;战斗段主角先手攻击顺位最前敌,attack_up 唯一吃修正 hero.tres atk=6 · hero_table.gd 域校验 · B1 战斗段⓪先手(hero_attack 行);attack_up 经 effect_pool_map → hero_offense 活行
② 奖励两类:即时 75%(当场兑付不进库存)/ 可选 25%(刀/治疗包入库走窗口);heal_pack 稀缺化 w6 p12 reward.tres 行集 w75/25;B1 _resolve_instant
③ 库存关内延续:跨战斗不清,关卡末 level_clear 清空 B1 _battle_over 不清库;v2 起由 C1 runner 在关卡末统一调用
④ 道具窗口至多选一件 B1 submit_window_selection 截断 slice(0, 1)

文档对齐:四条拍板的 GDD/registry 回写已由文档会话先行完成(b1/b2/b4 GDD、registry、systems-index、d2、game-concept、b3);本切片程序与文档逐项对齐核查通过(详见 session-state 条目 16)。语义注:本切片为参考实现,与文档冲突以 GDD/registry 为准。

2026-09-12 试玩日志器 + 诊断转储(playtest 数据采集基建)

新增:① PlaytestLogger(呈现层组件)——订阅 B1 新信号 settlement_snapshot(每结算末尾全量状态:关卡/深度/轮次/verdict/英雄/敌人/行动经济/板序号统计/buff/库存/本轮 facts)+ battle_finished/node_entered/level_finished,逐行写 JSONL:user://logs/playtest_<seed>_<时间戳>.jsonl(每行一个完整状态,直接可喂 pandas);② 诊断转储按钮(侧栏底部"🩺 诊断转储")——卡死时点击,全量核心状态(B1 相位机/计数器/facts、A2 棋盘、A3、B4、runner)+ 最近 200 结算行/100 操作环形缓冲 → user://logs/diag_*.json(行为探针 _dump_state 的产品化)。

顺手修复(日志首秀即抓真 bug):_start_full_level 面板加成双写叠加——tune_panel.apply() 先写表(6→18),runner.set_hero_override 再以 18 为基线 ×3(→54)。修复 = 关卡模式单一应用路径(runner 写表),日志快照 atk 54→18 证实。教训(规范 5.x 补充案例):同一加成的多应用路径必须单一事实源;JSONL 快照是数值回归的最低成本探测器。

冒烟 103/103(+7:快照信号/字段齐备/板序号/JSONL 解析/诊断文件)。日志目录:%APPDATA%/Godot/app_userdata/DungeonSweeperVerticalSlice/logs/。

2026-09-12 C3 GDD 落地 + 试玩采集清单

落地:C3 GDD(design/gdd/c3-difficulty-curve.md,solo 出稿未评审)的设计承诺落回切片——① DifficultyTable 结构位(schema + 空表 + ConfigDB 挂载 + B2.spawn 套乘钩子:行值快照前施加、越域 clamp 至 [0.1,10];MVP 空表零行为——AC-10 冒烟断言含注入/越域验证);② 切片调参登记(敌深度轴/板参数/供给参数)转正为 MVP 默认曲线——切片当前数值 = C3 GDD 背书的设计态,试玩即体验 C3 定稿难度。冒烟 96/96。

试玩数据采集清单(反哺 C3 六个 OQ——试玩时请记录):

  1. OQ3 真人修正系数(首要):你无面板加成打第一关的通关/败北结果(模拟基线 80% 通关——真人预期显著更低,落差就是修正系数)。
  2. OQ2 Boss 血量:Boss 战实际打了多少轮、是否觉得血量压迫合理还是拖沓(模拟值 130HP 占比 0.81 越带)。
  3. OQ6 轮内刷新:你实际用了几次"弃图刷新"、是否觉得"挖-刷-挖"太顺滑(免结算=敌人不出手)。
  4. OQ4 弃图倾向:有没有"挖一半就想弃图刷 RAP"的冲动(模拟测不到真人策略)。
  5. 难度台阶可感知性:D2 伏击兽/D4 Boss 相比 D0 蛆虫的变强是否有具体面孔(新敌种=新图像线索)。
  6. 奖励供给体感:可选类道具(刀/治疗包)获取频率与囤积感受(供给控制器批后每关 ≈4.5–6.5 件)。

试玩方式:F5 → 「▶ 开始冒险」基线打一局(一条命三关连探——冒险结构实现批 2026-09-21 起,第一关读数即冒险首关) → 调整板 +100% 攻击再打一局(对照"数值提升→通关期望改善"的元进度体感)。

2026-09-12 试玩批次 1 → v3 数值批(F7 流程实践)

试玩反馈(v2 数值):满血全通关(三策略均通)/ Boss 血量 OK 或可上调 / 刷新零使用 / 零弃图倾向 / 治疗包零使用 / DND 命名指令(地精/熊地精/食人魔酋长)。

v3 数值批:atk 4/4/6/4/7 → 7/5/9/6/9(承伤主杠杆);D0 goblin 24 保持(20 会被首轮粉尘秒杀——冒烟旗回归断言抓获)、D1 群 13×2、D2 bugbear 40/9、D3 群 26×2、Boss ogre_chief 150/9(用户拍板可上调);L2 锚行同步。DND 命名:goblin 地精 → bugbear 熊地精(DND 原型即伏击手)→ ogre_chief 食人魔酋长;enemy_id 同步更名。

v3 扫描对照 F5:基线 60%(带 40–60% 上沿 ✓,v2 80%)· 败北 4/6 集中 Boss(压迫预期兑现)· +50%→87% / +100%→93% / +200%→100%(天赋曲线成立)· 承伤 90(v2 80)。C3 GDD 回写:F3 带 [0.5,1.1](OQ2 裁决)、OQ2/3/4/6 试玩读数、试玩批次记录。

冒烟 103/103(旗回归断言改用 Boss 行——D0 20HP 级被盲挖粉尘秒杀无法承载场景;DifficultyTable 断言对齐 v3 行值)。下一批 = v3 真人试玩(OQ3 定量/OQ2 终裁)。

2026-09-12 遭遇随机化(Roguelike 局感引入批——Peglin 对比报告落地项)

触发:用户试玩反馈"关卡完全没有 Roguelike 的体现"→ Peglin 对比报告(design/research/peglin-comparison-2026-09-12.md)→ 用户拍板先做遭遇随机化(节点分支/多波/遗物协同后置)。

设计(C3 GDD Core Rule 8):EnemyTable 行 unit_count 升级为区间语义 [unit_count, unit_count_max](新字段可省略=定值,旧行零迁移);B1.begin_battle 实例化期按区间均匀骰,RngService 新增 encounter 封闭流(registry 接口漂移登记——挖掘决策域之外 P1 合规);B2 零随机纪律保持(spawn 收 override 即确定值);同种子全程可回放;新敌种首遇节点固定数量(教学位不加骰)。

L1 区间:地精 [1,2] · 地精一伙 [2,3](hp 13)· 熊地精固定(教学位)· 熊地精双雄 [2,3](hp 18)· Boss 固定——期望总量 ≈304(+8%),F6 带内。

扫描(N=15):基线通关 47%(区间期望总量上移 +8% 的叠加效应——F5 带 40-60% 带内 ✓);+50% → 67%;败北分散(Boss×3/战1×4/战3×1)。注意:区间骰使难度分布更宽(运气成分进入遭遇层——Roguelike 体的核心),真人体感待批次 2。

冒烟 149/149(+46:区间双值出现/全域内/同种子可回放/D2 教学位固定)。

2026-09-12 试玩批次 1 → v3 数值批(F7 流程实践)

2026-09-12 攻击类型 × 护甲克制批(用户拍板——三段伤害 + 标错惩罚落地)

触发:设计会话(本日)定稿"怪物护甲类型(轻甲/魔法护甲/重甲)× 角色伤害三段构成(普通/穿刺/魔法)"的克制对策系统(穿甲弹/高爆弹式三角)+ 标错旗随机惩罚。(本段写于 2026-09-12,原文使用位置名 无甲/护甲A/护甲B 与 基础/伤害A/伤害B——2026-09-15 命名统一批已全仓改为语义名,映射见下方该批小节。)设定表经用户多轮审阅确认"没有问题"后落程序(GDD 正式修订另批进行——本批以表格结论为实现依据)。

拍板结构 → 落点:

设定 实现落点
敌人护甲类型:轻甲 / 魔法护甲 / 重甲 EnemyTable 新字段 armor_type({light,ward,heavy},缺省 light 向后兼容)· 映射:goblin=light / bugbear=ward / ogre_chief=heavy(教学梯度候选,provisional)· B2.spawn 行值快照入单位字典
伤害单分量(2026-09-19 充能退役) B1 三分量 主角攻击 = 单一基础分量:量 = atk(表值)、类型 = hero.attack_type(营地换型 = 改字段);hero_attack 行携带实际攻击类型键 + roll/ac/tier 掷点读数(P2 归因)。攻击类型是伤害的属性轴,与来源无关(2026-09-15 抽象分离批纪律保留)
充能供给(2026-09-19 退役) SettlementTable 字段 charge_grants 已删除——挖掘攒弹药的第二伤害供给取消,克制应对 = 冒险前配型(hero.attack_type)+ 棋盘火力(穿刺弹/魔法矢直伤道具)
克制矩阵:克制 ×150 / 中性 ×100 / 被克 ×50 SettlementTable 新字段 armor_effectiveness({normal,pierce,magic}×{light,ward,heavy} percent,缺项回退 100)——刀/AOE/清图奖励恒定表值不吃克制(道具=万能稳定伤害,暂定待拍板)
标错旗 → 随机轻惩罚三选一(时效 1 结算) _apply_miss_backlash():① enrage 暴走(敌 +25% 进 enemy_output 池)② 敌方伏击 +2 层(复用 ambush 行)③ off_guard 失衡(我方 +25% 进 hero_defense 池 = 多挨打);新 B3 行 ×2(dur=1 与 weaken/ambush 同款先兑付后衰减);沿用 _flag_miss_seen 每雷格实例一次去重
随机载体 零新流确定性派生:(x×7 + y×13 + 板序号×5) mod 3——同种子可回放、不扰动既有三条封闭流取号序;正式侧候选 = RngService 新增封闭流(待拍板)
呈现 敌人卡环点行常驻护甲标签(轻甲/魔法护甲/重甲——克制对策可读前提)· 结算明细主角攻击行拆"(普通 X + 穿刺 Y + 魔法 Z)" · 反噬效果行入明细流 · settlement_snapshot 增 armor/charge 字段(JSONL 数值分析面)

数值全部 provisional 待拍板/调参(登记于 enemy.tres / settlement.tres 注释):charge_grants(2026-09-19 退役)· 矩阵 150/100/50(加法核 +1/0/−1 换装)· enrage/off_guard 25% · 伏击 +2 层 · 护甲映射 goblin/bugbear/ogre——C3 调参时按 F6 供给平衡式复算(三段充能是新增伤害供给,裸装败北/基线通关率两条冒烟路径已复验仍成立)。

正式侧义务(GDD/registry 修订清单,待文档批):B2 GDD(EnemyTable armor_type 字段 + schema)、B1 GDD(F3 主角攻击三分量构成 + flag_miss 反噬编排 + 克制矩阵载体)、B3 GDD(六行 MVP 状态表 + source_class flag_miss 授予)、A2 OQ1(标错惩罚候选升级为三选一随机池 + 重复性口径=每雷格实例一次)、registry(enemy/settlement_table/status_effect 条目 + A3 条款②锚与条款③不等式重推导——标中旗收益从纯 weaken 变"weaken+魔法 充能")、C3(数值 provisional 接管)。lore 侧:design/research/lore-nest-metaphor-2026-09-12.md(穿刺=地利/魔法=封印暴露、反噬=封印失败——待新会话拍板后写回 game-concept)。

验证:冒烟 161/161(+12:护甲快照三档传播 / 克制矩阵三行表值 / hero_attack 行三分量字段〔全战斗回放 ×2〕/ 标错旗 flag_miss+反噬效果行 / 标中雷充能进主角攻击 / 反噬派生同种子回放)· ui_probe PASS · ui_tune_probe PASS · ui_click_probe(done=true、选用失效=0、问题=0)。

2026-09-12 战斗屏五区改造批(battle.md 落地——ui-programmer 批)

背景:design/ux/battle.md(/ux-review APPROVED)+ design/ux/interaction-patterns.md(核心 8 pattern)落地到切片呈现层。core/ 与 data/ 零改动(本批纯 presentation/ + smoke/)。

五区布局(1280×800 基座):A 区 28px 顶栏关卡进度条(level_strip_view.gd 改造:暗金已过/奖励金当前高亮);B 区 252px 战斗画面(battle_stage_view.gd 新建 = hero_card_view.gd + 轮次·阶段指示 + 兑现演出区 + enemy_card_view.gd ×1–3〔顺位徽标/意图徽标常驻/环点拍数/伏击共享池/死亡灰化+碎裂残位禁瞬消〕+ 底部结算明细带);C 区 240px hero_info_panel_view.gd(直角细线数据框 + 修正来源角标 + RAP 点阵 + status_slot_row.gd ×4〔形状+色相双通道/层数角标/剩余结算点/悬停 tooltip 来源+语义+剩余/空态槽隐藏〕);D 区 board_zone_view.gd(ap_bar_view.gd 44px〔AP 点阵+停手居左;图例+弃图刷新居右——确认 chips 异位 pattern 7〕+ board_view.gd 改造〔悬停三语义自绘光标/目标格边框/BFS 路径蓝点预览/可挖域 8 向呼吸微光/奖励徽章 R₀ 域外/去饱和 shader〕+ toast_stack.gd 2.5s 消退 + board_fx_view.gd 演出层)+ desaturation.gdshader(去饱和+金橙偏移、明度不变);E 区 280px inventory_panel_view.gd(常读列表固定槽高 + 原位窗口态 pattern 2/8:描边金光/标题切换/时机指示/usable_now 禁选+原因/跳过/政策注记;属性简述投影、来源不呈现)。旧 hud_view.gd 删除(HUDView 职责由 B/C/D 三区视图承接)。

全屏 States 与模态:legend_overlay.gd(图例,状态槽空态说明)/ settlement_review_overlay.gd(明细回看)/ battle_end_overlay.gd(胜=金蜡封落于棋盘中央+判定行+回看入口;败=暮蓝 #5A6C8C+旗化光点收回)——统一模态登记序管理(_open_modal 打开时显式隐藏上方遮挡层,缺陷⑤纪律)。清图金粒喷泉+彩纸 / 完美排雷金光带+横幅 / 标中旗加重弹道 / Boss 紫赤影子爬棋盘 / 零合法板诚实 toast / chord·非相邻一次性提示(每 run 去重,ux_hint_shown 遥测)。发现并修复历史 quirk:TunePanel 默认 visible=true 靠被不透明开始层遮蔽的树序巧合——已显式初始化 false(缺陷⑤家族)。

遥测(playtest_logger 增 ux 行族,呈现层观测不改 core):ux_round_input_ratio(原始输入:AP 消耗,快照驱动)/ ux_round_exit{path_tag}(快照 round_facts.path——呈现层只订 B1 的 ADR 纪律下唯一合法源)/ ux_refresh_attempt{result, round_refresh_index} / ux_window_choice / ux_reject{source, sub_reason} / ux_hint_shown{hint_id}。

探针:ui_probe 增五区构建断言;ui_click_probe 增刷新确认链/图例开关/tooltip 触发/模态遮挡断言(图例/回看/窗口态/终局)/窗口期去饱和断言/首格可点计时(进入战斗屏口径 133–151ms ≤500ms AC;场景冷启动 ~700ms 为脚本首载编译域,观测项)——既有全部断言保留。** Waiting 刷新代理已按 OQ12 退役**:UI 刷新按钮仅挖掘期 Active 受理(presenter 门禁),原探针"窗口期点刷新"行为由 Active 确认链测试替代。

回归:smoke_all 149/149 · ui_probe PASS · ui_tune_probe PASS · ui_click_probe PASS(PROBE_SEED 7/11/23/99/42/77 六种子 done=true、选用失效=0、问题=0)。

占位登记:敌人意图视觉映射按 enemy_id 程序化占位(资产定稿归 B5);D区演出(喷泉/彩纸/弹道/影子)全部程序化占位;CJK 字体依赖系统回退(Windows 可用,随包字体归 D1 正式化硬性前置——ADR-0003);金蜡封/暮蓝氛围为色块占位级。

2026-09-15 补记(雾格移除):雾格机制已整体移除(见不做清单)——本节五区规格里的已开雾格 tint 残留、雾区全开一次性信号、图例「迷雾 = 无雷盲区」条目与雾首遇提示已随机制同批从实现与探针中删除(现行格态收窄为已开 / 未开两态,一次性提示只余 chord 与非相邻两项)。本文以上各历史批次条目保留当时陈述,现行实现与呈现义务以战斗屏规格与 HUD框架等现行文档为准。

2026-09-12 呈现层 code-review 修复批(/code-review CHANGES REQUIRED → 全项清偿)

触发:全切片 53 脚本 ~9400 行 /code-review(CLAUDE.md 代码规范 + ADR-0001/0003/0004 对照),裁决 CHANGES REQUIRED(7 项必改)。core/ 12 文件与 smoke 断言面整体健康;病灶集中于 tune_panel 封装破口、main.gd 结构回涨、三处呈现契约错位。

BLOCKING 修复:

# 缺陷 修复
1 TunePanel 视图写核心表(apply() 直写 _db.hero.atk/.max_hp)+ run_simulation 内 load("res://smoke/...") 驱动 core——面板模拟按 pct² 口径、模拟后表值残留污染真实对局(runner 把放大值当基线再乘) tune_panel 重构为纯视图(apply_requested/reset_requested/simulate_requested 信号外发 + setter 注入);加成落表收口组合根唯一路径 _apply_hero_override(每次从 _ready 捕获基线重算,幂等禁叠加);模拟编排拆 tune_sim_controller.gd(先复位基线再移交);报告文案归 HudPresenter.tune_sim_report
2 意图徽标双翻译:presenter 先把 beat key 译中文投影、EnemyCardView 再按英文 key 匹配 → 色相/重击"▼"通道永久失效;BEAT_NAMES 两处重复 presenter 直传 B2 原键(attack/charge/heavy);名/色/标记渲染映射唯一定义处 = EnemyCardView(set_intent 契约头注成文)
3 C 区 RAP 死分支:_refresh_economy 从不投影 a3.rap,"RAP 滚动归零"反馈(A3 D1 义务)不可达;视图靠解析自身 label 文本当状态 presenter 持续投影 a3.rap;hero_info_panel_view 改 _last_rap 成员存储,删除 _rap_value() 文本解析
4 smoke_all 恒真断言(check(true, "全部计数在域内")——越域也 PASS) 改带分布标签的真实域内断言

结构/封装修复:

  • main.gd 761 → 667 行(评审记录基线 433 行,400 行审视线):节点构建拆 ui_assembler.gd(只 new/add_child/布局,零接线零核心写);模态层级状态机拆 modal_stack.gd(缺陷⑤纪律载体);战斗流程叙事文案拆 battle_narrator.gd(兑现 main 头注"不拼呈现字符串");模拟编排拆 tune_sim_controller.gd。剩余行数 = ADR-0001 规定的接线 + 模式流转 + 核心写调用唯一出口(再压需移动 ADR 规定职责,登记为 D1 正式化批候审)。
  • level_runner core↔core 接线 lambda → 方法 Callable ×4(ADR-0001 静态规则 S6——lambda 捕获 self 延长 RefCounted 生命周期/成环)。
  • B1 新增 diagnostic_snapshot() 诊断观测面:组合根诊断转储与 click_probe 停滞诊断全部改走成文 API,零下划线私有字段直读(此前直读 8 个)。
  • 信号处理体去 lambda 化:main 三处多行/单行 lambda(inter 层继续/单场入口/库存拒绝)改命名方法 + bind(规范 4.1)。
  • 顺带:can_request_refresh() 断行格式修复(原单行内嵌 tab 不可读);_build_inter_overlay 死参 parent_root 删除;_start_battle 重复 _start_overlay.visible = false 去重;调试两层入口改由 _start_battle 统一取加成后满血(原传参在加成前取表值)。

探针同步(缺陷回归断言随契约更新——3.3):ui_tune_probe 重写——应用/重置走真实按钮信号路径(press_apply_for_probe 接缝,ADR-0004"合成输入走真实翻译出口"口径);新增两条回归断言:⑦模拟后 hero 表保持基线(无残留)⑧应用加成 + 启动完整关卡后 runner 写表值 = 基线 × 单次加成(12/75;旧缺陷表现 24/112 在此被抓获);ui_click_probe 停滞状态与诊断转储改走 diagnostic_snapshot()。

验证:smoke_all 141/141 · ui_probe PASS · ui_tune_probe PASS(含新回归⑦⑧)· ui_click_probe 六种子(7/11/23/99/42/77)全 PASS(done=true、选用失效=0、问题=0)。新增 4 脚本 .uid 经 headless 编辑器扫描生成(语言纪律⑤)。

登记待办(非本批范围):自动玩家策略四份复制收口(评审 W-3);schema 溯源行补齐(W-9);S1–S8 静态扫描脚本化后 S1 自建 RNG 豁免口径登记(W-1);views 转发层信号契约头注补齐(W-2)。

2026-09-13 封装收口批(代码架构审查 E1–E5/O1–O5/P3 修复——ADR-0009 候选项的切片侧预收口)

触发:/architecture-review 改编批——以 architecture.md + ADR-0001~0005 + code-conventions 为基线做代码组织/封装专项审查(报告:代码架构评审(已退役,git 历史可查),Verdict: CONCERNS),用户拍板 P1+P2+P3 全修(P2 中涉接口漂移两项另出设计稿待审)。

核心封装修复(P1):

# 项 修复
E1 B1 协作对象全公开 → 呈现层链式穿透(b1.b2.hero、b1.a3.phase 式层层下钻 main×18 / presenter×15 处) a1/b2/b3/b4 私有化(a2/a3 保留公有 = 架构文档 API Boundaries 的 D1 契约面);新增 presentation_snapshot()(载荷 schema 头注成文)/is_battle_live()/stock_count()/query_reward_identity() 四个成文只读出口——diagnostic_snapshot 同款模式
E2 A2 状态字典公开且被视图绕过查询面直读(board_view:278/303 直读 .revealed,头注自称"只读查询面"自相矛盾) board/revealed/flags 私有化;新增 current_board()/reveal_record() 查询面;B1/组合根/探针全部改走命名面
E3 B2 裸字典容器公开(hero/enemies 可被任意写;presenter 为死亡残位直读原始数组) 私有化 + hero_unit()/all_enemies()(含死亡残位,句柄语义与 query_alive 同构)投影面;presenter 残位渲染需求收进 API
E5 "只读"字段仅靠纪律(phase/ap/rap/last_round_end/master_seed 架构文档定只读,实际公开可变) getter-only 属性 + 下划线后备字段(外部读法 a3.phase 不变,写入仅剩方法通道——GDScript 层面机制化)

组织修复(P1/P2/P3):

  • O1/O2 调试模式抽离:main.gd 调试分支(单场/连续两层/HP 携带/共享 B4)拆 presentation/debug_session.gd——调试语义单一实现点(O2 双实现漂移收口);组合根保留接线(battle_created 先于 begin_battle 发出,ADR-0001 接线唯一归组合根 + 缺陷①时序义务)与终局 UI 决策。ui_probe 抓获初版时序缺陷(battle_ready 才接手 b1)——即缺陷①同款,battle_created 接手修复。
  • O3 DamageMath 抽取:B1 伤害公式族(F2 乘区/充能分量,零状态纯算术)拆 core/damage_math.gd(规范 1.2 工具函数挂宿主类);board_generator 同一合法板重复调用两次 measure_inferability 合并为一次(全库最贵求解器)。
  • P3 清债:头注溯源补齐 ×4(board_data/config_db/rng_service/reward_supply_controller——规范 1.4);B4 grant/grant_clear/stock/use 失败返回统一 false→null(E6 消费方 is Dictionary 判定天然兼容);equivalence_supply 表行 duplicate 防配置源泄漏;load()→preload/类名直引 ×3(main logger/runner、tune_sim autoplay)。

加固(基线既有噪声根治):main.gd _on_board_action 的清图演出判定在 settle_batch 同步重入(结算→battle_over→关卡终局置空 b1)后仍摸 b1.a2 → SCRIPT ERROR(基线 click_probe 每跑必现)——补 b1 != null 守卫,探针 stderr 归零。

验证:冒烟 141/141(与基线一致)· ui_probe PASS · ui_tune_probe PASS · ui_click_probe PASS(done=true、选用失效=0、问题=0,SCRIPT ERROR 0——优于基线)· 新增脚本 .uid 经 headless 编辑器扫描生成(语言纪律⑤)· presentation 层残留穿透引用 grep 归零(呈现面调用 19 处全部为命名 API)。

登记待办(P2 设计稿待审——见审查报告 §4):E4 db.hero 表值运行时改写参数化(涉 B2.spawn 契约 = 接口漂移,须 GDD/registry 修订批);O4 自动玩家策略四份复制收口(与既有待办 W-3 合并)。

2026-09-13 P2 收口批(E4 表值参数化 + O4 自动玩家单一实现——用户拍板两项均做)

E4(db.hero 表值运行时改写 → 参数显式传递):

  • B2.spawn 增 atk_override/max_hp_override 参数(-1 = 表值兜底;沿用 unit_count_override 先例;EC16 越界守卫改对生效上限判);
  • B1.begin_battle encounter 增 hero_atk/hero_max_hp 字段(缺省表值——冒烟直呼路径零改动),战斗段 _hero_atk 快照替代 db.hero.atk 读取;
  • LevelRunner:start_level 表写删除、生效值进 encounter、restore_hero_base 只清百分比(表值不可变后无基线可恢复)、_base_* 字段删除(直接读恒定的表);
  • main:_apply_hero_override/_scaled_override 表写路径废除 → _debug_hero_override() 生效值供给 Callable(面板百分比现算经 encounter 入战斗);_on_tune_apply/_on_tune_simulate 去复位步骤;_db_base_* 字段删除。
  • 收益:双写叠加(6→18→54)与双基线同步整类隐患随表写移除;D2「单一事实源」原则机制化(表值运行期不可变)。
  • 登记义务:registry architecture.yaml 新增 hero_override_parameter_passing 条目(ADR-0009 候选;B2.spawn 签名 +2 / B1 encounter +2 = 接口漂移,正式侧 B1/B2 GDD 修订随 ADR-0009 批)。
  • 探针语义升级:ui_tune_probe ⑦「表值残留」→「hero 表运行期不可变」(reintroduce 表写即 FAIL);⑧ 双写叠加回归改为完整关卡路径 + 呈现快照单次生效断言(12/75;旧缺陷形态 24/112 仍被抓获)。ui_probe 的 _start_single 语义注记:调试单场恒基线(入口清零滑条——原行为,非缺陷)。

O4(自动玩家策略四份复制 → 单一实现,合并既有待办 W-3):

  • 新增 smoke/auto_player.gd:choose_dig(最近可挖格)+ window_selection(治疗优先于刀;差异参数化 heal_hp_div 2/3 · round_gate 0/3 · knife_compare best/sum——四调用点原语义逐一保留:smoke_all 3/3/best · monte_carlo 2/0/sum · dump_battle 3/3/sum · level_autoplay 2/3/best);
  • 四消费方删除各自的 _choose_dig/窗口策略块改走单一实现;click_probe 的 level_autoplay._choose_dig 引用同步改指 AutoPlayer;
  • 等价性证明:smoke_all 同种子回放断言(步骤流逐行相同)重构后保持全绿。

验证:冒烟 141/141 · ui_probe PASS · ui_tune_probe PASS(含 E4 新断言)· ui_click_probe PASS(done=true、选用失效=0、问题=0)。

2026-09-13 零承伤根因分割探针 + playtest-09-12 Bug #1–#3 处置批(报告 Top3 授权任务)

触发:playtest-2026-09-12-designer 报告 Top 3 Priorities(探针分割 → Bug 建档修复 → 多种子复扫基线);数值拍板与设计变更不在授权范围(待拍板清单见文末)。

① 零承伤根因分割(新探针 smoke/damage_probe.gd——boss/level 两模式):

  • 快照盲区发现:settlement_snapshot 取在衰减段之后,时效 1 的 defense_up 当轮授予当轮衰减——真人局 JSONL buffs[] 恒空 ≠ 池为空(报告悬置的直接原因)。探针改从结算行(effect 行 pool_value)重建战斗段时点池值,池归属经 settlement.effect_pool_map 表驱动(零字面量)。
  • Run A(fresh 池零挖掘裸验):Boss 攻击拍 d_tick = atk.total 全额兑现(attack 9/9 ×2 · charge 0 设计语义 · heavy 18/18),6 轮击倒英雄(defeat)——「Boss/敌攻击链缺陷」否证;拍名轮转与真人局逐拍一致(attack→attack→charge→heavy→attack)。
  • Run B(自动挖掘墙行为):池 -30 → d_tick 21→14、池 -60 → 残余 ×0.40,墙轮承伤恒 >0;表值判定墙最深 -60 > pool_clamp_lo -100 = 归零不可达(09-13 调参批在当前数据上重证)。
  • 结论:真人局 12/12 轮零承伤 = 旧数据 defense_up -50×2 = 池触 clamp 下限 ×0(设计语义)——任何 atk 曲线乘在 ×0 上(原报「v3 主杠杆乘在 ×0 上」坐实)。报告 Bug #2 = 设计问题非 bug。

② Bug #1–#3 建档与处置(BUG-0002/0003/0004,production/qa/bugs/,编号自 BUG-0001 顺延):

  • BUG-0002(报告 #1 浅深度空遭遇)——Rejected as coded:seed 42 当前构建全关回放复现同款遥测签名(d0 spawn=1 / d1 spawn=3 + round-1 victory + unit_count 0)但实为首轮全灭(英雄爆发 + 爆裂粉尘 instant_aoe 全歼低 HP 敌群;与 20:41 局 d1 双地精各剩 1 HP 逐点吻合);遭遇骰数学下限 ≥1(B1 roll_lo)+ B2.spawn count<1 fail-fast 双闸,100 场扫描零越域。快照盲区修复:settlement_snapshot 增 spawn_count(实例化总数含死亡残位)——unit_count=0 时「全灭 vs 空场」可判别,同类误读机制化排除。
  • BUG-0003(报告 #2 Boss 攻击零兑现)——Rejected as coded:根因见①;候选改法(clamp 收紧 / 乘法衰减 / 重击拍穿防)列待设计批。
  • BUG-0004(报告 #3 grant_node_active 绕过 _supply.notify_granted)——Fixed:stock 受理成功后补入账(与 grant() 同一「发放即获取」口径);计数器战斗域清零语义不变 = 零战斗数值影响,纯计数口径修复(报告 Top3 #3 的上报义务执行)。
  • 回归断言(代码规范 3.3):smoke_all +7——快照 spawn_count 字段与等值断言;遭遇全深度 × 12 种子全域内扫描(60 场 spawn ≥1 且 ∈[unit_count, unit_count_max]);_smoke_attack_chain_fresh_pool(fresh 池非蓄力拍 d_tick == atk.total 全额兑现——攻击链健康钉死,未来真缺陷在此被抓);_smoke_supply ⑦ 节点奖励发放即入账。

③ 多种子关卡复扫(Q1 调参批基线——level_monte_carlo 增 F4 两列「普通承伤/场% · Boss承伤%」:逐战斗承伤切分 = round 回卷分段 + 末段 Boss 判定(须抵达 Boss 节点)):

  • N=30 × 10 档(种子 4200–4229;F7 切片样本量口径)。结论:全档位越带——F5 基线通关率 17%(带 40–60%)· +100% 档 43%(中天赋 ≥95%)· +200% 档 63%(高天赋 100%);F4 普通场承伤 35.1–43.1%/场(带 ≤20%)、Boss 场 71.3–134.9%(带 ≤50%)(hp+0 档;hp+100 档普通 13.9–22.6 带内 / Boss 35.8–76.7 仍多数越带)。拆墙(-50→-30 且权重 24→16)与 v3 atk 曲线叠加后,难度由严重不足摆向严重过剩。本批未动任何数值(敌 hp 曲线与奖励供给禁独立调参——registry 预警⑥联动义务;杠杆方向列待拍板,本基线 = F7 流程的测量输入)。

验证:冒烟 148/148(141 既有 + 7 新回归)· 三探针 PASS(ui_probe / ui_click_probe 6 种子 done=true、选用失效=0、问题=0 / ui_tune_probe)· damage_probe boss 模式 7/7 + level 模式(种子 42/43/44)4/4 全 PASS。

待拍板/待设计批清单(本会话零数值变更、零 GDD 变更):

  1. 难度杠杆重拍板(F4/F5 全档位越带)——候选:enemy atk 曲线回撤部分 v3 增量 / defense_up 权重回升 / heal 供给联动——归 C3 按 F7 流程(本基线为测量输入);
  2. 墙语义候选改法(clamp 收紧至 -60/-70 / stack 乘法衰减 / heavy 拍穿防)→ C3 + /propagate-design-change(连带 B1 池 clamp 语义 + B3 GDD "-50" 文字同步);
  3. 供给量重拍板:「每战斗首件保证」的总量语义(候选:关卡域首件)→ C3(BUG-0004 已封计数漏洞,关卡供给账目可完整观测);
  4. 浅深度首轮跳战可玩性(autoplay/真人 d0-d3 round-1 全灭跳过战斗过程)→ C3 结合 F4 复验数据裁决。

2026-09-13 拍板落地批(四项拍板——难度杠杆/墙语义/供给量/跳战)

拍板结果(用户四问裁决):①难度主杠杆 = 先真人试玩再拍(F5 真人修正系数标定优先于数值调整);②墙语义 = 维持现状 + 归零护栏;③供给量语义 = 先观测再拍;④跳战 = 并入难度复测再议。本批零玩法数值变更。

落地变更:

  • smoke_all 新增 _smoke_wall_zero_guard(表级不变式:2×defense_up.magnitude > pool_clamp_lo)——BUG-0003 事故类(叠满触池底 = ×0 全额免伤)永久免疫:任何未来 magnitude/clamp 调参重新造出 ×0 墙即冒烟红灯,强制显式重审;
  • level_monte_carlo 增「跳战率」列(普通战斗 round-1 即胜占比——拍板④观测面,此后每次复测自动携带);_damage_segments 升级为逐段 {承伤, r1_win} 结构;
  • defense_scan 输出标签修正:「墙轮承伤(应为 0)」→「(合法——-30 批墙帽 ×0.40)」(旧 -50 数据时代的期望文案过时清理)。

跳战率基线(N=30,拍板④"再议"数据):基线 8% · +50% 13% · +100% 24% · +150% 27% · +200% 38%(普通场 round-1 全灭占比)。seed 42(试玩固定种子)为高跳战轨迹(autoplay d0–d3 四场全部 round-1 全灭)——真人局 d0–d3 全跳的体验含显著种子成分;基线 talent 下跳战是少数派,拍板④"复测再议"的数据前提成立。其余各列与 Q1 基线逐值一致(collect_rows=true 开启不改变行为——确定性交叉验证)。

验证:冒烟 149/149(+1 护栏)。

下一步(用户侧):开一局真人试玩(任意种子;JSONL 自动落 user://logs/)。观测清单(服务拍板①③复议):通关与否 + 败北节点(F5 修正系数 = 真人通关率 ÷ 模拟 17%)· 普通场掉血体感(对照 ≤20% 带)· Boss 战撑过几轮 · d0–d3 是否发生跳战 · 治疗包是否出现缺血时刻与库存残留(拍板③数据)。事后由会话分析 JSONL 出修正系数。

2026-09-14 完美策略档测量批(OQ7 技能轴上界仪——用户拍板"增加完美策略档测试验证",零玩法数值变更)

背景:用户(扫雷强玩家)指出"完全正确开图/标雷、零踩雷 ⇒ 存活无压力"——现行扫描只有弱策略基线档(不标旗/邻格盲挖/朴素选道具),技能轴不可测;registry calibration_gap(真人显著强于模拟者)此前只有方向无机制。本批 = 测量工具批。

落地变更:

  • auto_player.gd 增完美策略求解器(perfect_action/_deduce):single + subset 推理不动点(A1 F1 measure_inferability 同族规则集,去 safe_set oracle——约束未知邻格含雷格,比生成期闸保守);零盲挖(只挖已证安全格 = 构造保证零踩雷,扫描末断言兜底违例 quit(1))· 已证雷格全标旗(旗先于挖——轮末 weaken + 魔法 首次充能,雷上旗不阻连锁)· 卡死且资源可 → b1.player_request_refresh() 轮内刷新 · 否则停手(残 AP 1:1 入 RAP)。输入只经 A2 查询面(reveal_record/is_revealed/has_flag),禁读棋盘雷区真值——测推理上界,非全知作弊。core 层零改动;
  • window_selection 增 heal_no_waste 选项(缺口 < 治疗量不用;完美档启用)+ 完美档轮次门解除(round_gate=0);
  • level_autoplay.gd 增 policy 参数(默认 "normal"——tune_sim_controller/defense_scan/level_debug 既有调用零改动);完美档经 policy="perfect" 由 _decide_act 分派承载(原专职驱动 _autoplay_battle_perfect 已随样板收口并入分派——move/dig/flag 走 A2 settle_batch、refresh 走 B1 编排、连续拒绝 ≥3 停手防死循环);st 增 mine_hits/refreshes 计数(mine_hit 证据行埋点);
  • level_monte_carlo.gd 增第 3 CLI 参 [policy](normal/perfect/both,缺省 normal 兼容既有文档命令)+ 策略/踩雷/刷新列;脚注 F5 带文案同步 [30,50] 带锚定稿。

完美档基线(N=30 · 种子 4200–4229 · 耗时 597.6s):0 加成通关率 100%(弱策略基线档 60%)、通关剩余 HP 均 47.4/50、整关承伤均 3.5(p90 18.0)、普通场承伤 0.5%(带 ≤20%)、Boss 场 5.3%(带 ≤50%)、踩雷 0.00/局(断言 ✓)、刷新 0.23/局、跳战率 20%。+50%~+200% 全档位恒 100% 满血通关(+200% 承伤均 0.4)——技能轴上界完全碾压现行曲线:F5 带与 F6 S/K 区间对完美档零分辨力(区间模型无策略水平轴的结构性证实;calibration_gap 获得机制解释与定量上界)。

验证:冒烟 149/149 全绿(默认行为零变更——弱策略档既有断言全通过)。

待拍板:① 0 加成完美档通关率的目标带(现行 [30,50] 按弱策略口径定义——是否改为按完美档口径验收?);② 杠杆选择(已预登记:r_boss 走廊 180–207 / 群战上探 / decay 0.6;本批新增候选:"上限掺运气"系——供给量值随机化(power 区间化)/ 承伤硬地板——均待完美档复测验证效果)。

2026-09-14 伤害量值区间批(用户拍板②——"上限掺运气"两步全落地 + 完美档无效性实测,宽度 provisional)

拍板:验收口径改完美策略档(0 加成通关 ≤40%);杠杆 = 伤害值区间随机(上阶/下阶,范围内 roll);覆盖面 = 奖励侧五行先行、不足扩敌方侧(分步授权已用尽)。roll 时机 = 身份预分配批(E14 快照口径不变);中点恒等现值(A3 条款①当量锚不漂移);宽度 provisional 归测量迭代。

落地变更:

  • 第一步·奖励侧五行(reward.tres + reward_table.gd schema + reward_economy.gd):heal_minor [2,6] / knife_t1 [5,11] / heal_pack [6,18] / knife_adv [10,22] / clear_blast [25,55]——power_min/power_max 可选配对字段(缺省定值行向后兼容,armor_type 先例);schema 校验 = 成对/buff 禁止/中点锚;roll 在 roll_board 身份批内追加取号(既有取号序零扰动)+ grant_node_active 同路径;快照 power = roll 值,B1/呈现零改动,授予期零随机纪律不变;
  • 第二步·敌方攻击侧(enemy.tres 六行 + enemy_table.gd schema + unit_container.spawn + battle_orchestrator):atk [min,max] = 行值 ±3 provisional(d0 7[4,10] / d1 5[2,8] / d2 9[6,12] / d3 6[3,9] / Boss 9[6,12] / L2 7[4,10]);roll = 遭遇骰同流(encounter 恰一 scope,数量骰先、atk 骰后)spawn 期整战持久——每拍抖动否决(数字可读性锚),B2 零随机纪律保持(收 override 即确定值);spawn 签名 +1 参数(接口漂移登记,ADR-0009 同批);
  • smoke_all 新增 _smoke_power_interval(4 断言:五行中点锚/roll 域内含清图槽/定值行零外溢/节点路径域内)。

实测(N=30,种子 4200–4229):

  • 奖励侧单独:完美档 0 加成 100%(承伤 3.5——与区间前逐值一致);基线档 17%(不变);
  • 敌方侧叠加:完美档 0 加成仍 100%(承伤 3.5→3.9 / p90 18→19——方差真实流动但被血缓冲全吞);剩余 HP 均 47.4 不变;
  • 验收结论:≤40% 线用数值区间杠杆族到不了——完美玩家结构性优势(零踩雷 = 零直伤 + 全标旗 = weaken −65% 顶格 + 快杀 = 敌出手次数最少)不受值域方差影响。三选待裁决:①承伤硬地板(每结算不可减免平伤——S_min 压缩,B1/B2 域);②weaken 饱和/递减语义(拆"全标旗顶格"基石,B3/B1 域);③极端宽度(数值可用但毁基线档与可读性锚——建议否决)。本批区间机制保留(对普通玩家方差体验有效,中点锚不伤当量)。

验证:冒烟 154/149+5 全绿(区间批 5 新断言 + 既有全部回归含遭遇骰分布/回放)。

2026-09-15 攻击/护甲命名统一批(用户拍板"一并修改,统一称呼"——纯改名,数值零改动)

触发:GDD 评审(战斗结算)问题 1——位置键 {base, dmg_a, dmg_b} / {none, a, b} 不承载语义(a/b 是纯位置占位符:既说不出来源,也说不出来克制谁),且同一件事在仓内已分裂成四种写法(敌人系统 {无, 甲, 重甲} / 03-内容规模 无甲/甲A/甲B / registry {none, a, b} / 本 README 无甲/护甲A/护甲B)。

新词汇(全仓唯一现行词):

面 新 旧(作废)
攻击类型(结算表矩阵行键 / hero_attack 行分量) normal / pierce / magic = 普通 / 穿刺 / 魔法 base / dmg_a / dmg_b = 基础 / 伤害A / 伤害B
护甲类型(armor_type / 矩阵列键) light / ward / heavy = 轻甲 / 魔法护甲 / 重甲 none / a / b = 无甲 / 护甲A / 护甲B
结算表字段 charge_grants(触发源→{attack_type, per_unit, cap},同日第二批抽象分离后定型) damage_a_per_cell / damage_a_cap / damage_b_per_flag("类型×来源"焊死命名;同名批曾短暂改 pierce_per_cell / pierce_cap / magic_per_flag,随即作废)
结算快照 round_facts charge_counts(各触发源计数)+ charge_points(按攻击类型分桶点数) charge_dmg_a / charge_dmg_b(既有 JSONL 留存文件仍用旧键)

映射沿教学梯度:goblin none→light、bugbear a→ward、ogre_chief b→heavy;矩阵数值逐格不动(pierce→ward 150 / pierce→heavy 50 / magic→heavy 150 / magic→ward 50 / normal 全 100)。

同日第二批 · 攻击类型与奖励抽象分离(用户裁定"攻击类型的定义和格子奖励要分离开;开格|标雷 → 奖励;奖励如何定义是可以修改的;不要将两者绑定"):攻击类型 = 伤害的属性轴(普通 / 穿刺 / 魔法,只决定查甲效矩阵哪一行,定义里不含任何棋盘来源);充能 = 按攻击类型分桶的附加伤害储备,谁能充、充哪个桶 = 奖励定义(charge_grants;开格 / 标中旗 / 踩雷 / 清图一律只作奖励触发源)。原 pierce_per_cell / magic_per_flag 式命名(类型与来源焊在一根名字里)作废。冒烟新增三条断言:奖励定义在位 ×2 + 行为断言(把"标中旗"奖励改投穿刺桶 → 同一战斗魔法分量归零;还原后步骤流逐行相同——证明改道唯一入口是奖励定义)。

落点:GDD(战斗结算 v0.5 / 敌人系统 / 难度曲线与Boss / 03-内容规模)+ registry(enemy.armor_type、settlement_table.armor_effectiveness 与三字段 + 批次注记)+ 切片(enemy_table.gd ARMOR_TYPES、settlement_table.gd ARMOR_KEYS / ATTACK_TYPE_KEYS〔原 COMPONENT_KEYS〕、enemy.tres、settlement.tres、damage_math.gd、unit_container.gd、battle_orchestrator.gd、enemy_card_view.gd〔敌卡常驻标签改 轻甲 / 魔法护甲 / 重甲〕、battle_log_view.gd〔拆行文案改"(普通 X + 穿刺 Y + 魔法 Z)"〕、smoke_all.gd / damage_probe.gd / auto_player.gd);playtest 观测记录保留当时键名并附现名。

验证(本批实跑):冒烟 201 项检查 0 失败(含分离批三条新断言:奖励定义在位 ×2 + 行为断言"标中旗奖励改投穿刺桶 → 魔法分量归零、还原后步骤流逐行相同")· ui_probe PASS · ui_tune_probe PASS · ui_click_probe(done=true、选用失效=0、问题=0)· ui_layout_probe PASS——四探针 exit=0、FAIL 行 0。命名批纯改名零行为变更;分离批为结构重构,数值链路等价(旧"计数×每单位×克制"与现行"计数→按奖励定义折算点数→×克制"结果相同,冒烟全量回归含回放断言未动)。

2026-09-15 验收 + 收口批(两批改动闭合核对;零数值零机制改动;不碰 v0.7 文件)

背景:2026-09-15 两批(攻击/护甲命名统一 v0.5 + 攻击类型/奖励抽象分离 v0.6)已完成;本批只读核对"文档口径 ↔ 切片实现"是否闭合,并收口遗留开口。范围纪律:战斗结算.md / 地图战斗资源.md 属 v0.7 格面资源批所有者文件、口径仍在移动——本批不改;③ 收口项落在 registry + 本 README + active.md,GDD 侧只报告、待 v0.7 批整体收口后回填。

核对结论(两批核心语义 9 项全闭合):charge_grants 键与值(safe_cell→pierce 1/格 cap 8 · flag_hit→magic 2/雷 cap 0)· 甲效矩阵 9 格(normal 全 100 / pierce→ward 150、heavy 50 / magic→heavy 150、ward 50)· armor_type 三值(light/ward/heavy)· hero_attack 行分量字段(normal/pierce/magic)· round_facts 键(charge_counts/charge_points)· 敌卡标签文案(轻甲/魔法护甲/重甲)· 明细行拆行文案"(普通 X + 穿刺 Y + 魔法 Z)"· 攻击类型定义不含来源 · 矩阵数值逐格不动——GDD/registry/tres/代码逐项一致。残留旧名扫描仅命中批次注记"原名"与历史观测记录;来源-类型硬绑扫描确认代码只剩两处计数埋点(_charge_counts["safe_cell"] / ["flag_hit"])+ charge_grants 键 + 行 source_class 归因。

实跑(本批):冒烟 201 项检查 0 失败;四场景探针 ui_probe / ui_tune_probe / ui_click_probe / ui_layout_probe 全部 exit=0、无 FAIL 行。

收口(③,落在非 GDD 文件):

  • ① 收益对照表充能当量覆盖缺口:登记于本 README + registry + active.md(GDD 收益对照表回填待 v0.7 批收口后)。候选口径 = 充能当量 = Σ各桶点数 × 当轮目标护甲平均甲效倍率 ÷ 100(与直伤同类 1 伤害 = 1 当量,守 行动经济 条款①单一当量);补式 / 登记待拍板二选一待回填批裁定。
  • ② 两处已知落差登记:a) charge_grants 触发源可扩展 vs 切片仅两个触发源计数埋点(新增源须加埋点);b) safe_cell/flag_hit 来源标识跨命名空间同名(明细行 source_class / charge_grants 键;RewardTable.pool_tag 已随格面资源批改 cell)。
  • ③ playtest 观测记录的快照键"现名"注记由中间名订正为现行名 charge_counts/charge_points。

注意(口径移动):本批运行期间 v0.7 格面资源批已在 GDD(战斗结算 v0.7 / 地图战斗资源 v0.4)与 registry 落地——段序七→五、行型 15→10、极性路由取代三套固定兑付、可选类道具删除。切片代码尚未同步(registry 注明"切片代码修改随新会话执行、指导已产出"),故本文以上各历史批次条目保留当时陈述。

两轴分离措辞不变:攻击类型 = 伤害属性轴(定义不含来源);充能 = 按攻击类型分桶的附加伤害储备,投桶归奖励定义 charge_grants;开格/标中旗/踩雷/清图只作奖励触发源。

2026-09-15 格面资源批 · 批 1(数据面 + 极性路由——设计权威 = 地图战斗资源 v0.4 / 战斗结算 v0.7 / 排雷玩法 v0.3 / registry 2026-09-15 条目)

模型一句话:格子分 安全|雷|封锁格 三型;每个非封锁格(安全格 + 雷格,雷安同池同分布)装板期一次摇定格面资源类型(五型 attack/defense/heal/blast/weaken);极性不在资源内,由「动作 × 格型」矩阵决定——开安全格/标中雷 = 正向(奖励),开雷格/标错安全格 = 负向(惩罚),标旗后撤旗零兑付;全部兑付在轮末授予段。可选类道具(刀/治疗包)与库存/供给控制器/道具窗口整体删除。

数据面:

  • reward.tres 结构性重写(reward_table.gd 同批):删 category/use_timing 字段与 CATEGORIES/USE_TIMINGS 常量;新增 cell_type(五型封闭枚举,清单外加载拒绝)× polarity(positive/negative)+ stacks(可省,缺省 1);pool_tag 收窄 {cell, clear_default}。行集 = 十一行:格面池正向五行 attack_up(w20,t2)/defense_up(w16,t2)/spark_aoe(flat 4,w16,t1)/heal_minor(flat [2,6],w15,t1)/weaken(w12,t1) + 负向五行 enrage(attack,t2)/off_guard(defense,t2)/heal_backlash(heal 直伤 flat 4,t1,无 effect_id)/ambush_double(blast 加层 stacks=2,t1,无 effect_id)/sapped(weaken,t1)——负向行 weight=0 纯兑付字典不参与摇号;clear_blast 保留(flat [25,55],w1,t2,clear_default)。加载校验族重写:五型 × 正负两行齐备(缺任一致命)/ cell 池 ≥1 正向行 weight>0 / percent 行 effect_id 必填(悬空校验在 ConfigDB)/ flat 行 power≥1(例外 = blast 负向加层行,消费 stacks 不消费 power——战斗结算 兑付形态表"伏击加层"独立形态的行级兑现)/ 区间配对 + 中点锚不变。
  • 删除三件:core/reward_supply_controller.gd(可选类供给控制器——首件保证/指数递减整体下线)、data/schemas/reward_config_table.gd、data/tables/reward_config.tres(RewardConfigTable 随可选类删除废止——注入概率/按板保底参数失义)。
  • status_effects.tres 六行→七行:新增 sapped(乏力——weaken 型负向:hero · −25 percent · dur 1 · max_stack 16 · stack,hero_offense 池,attack_up 镜像;值 provisional 归 难度曲线与Boss)。
  • settlement.tres:segment_order 七段→五段 [grant, buff_debuff, combat, decay, verdict](schema 冻结常量同步);effect_pool_map 增 sapped→hero_offense;source_label_map 删 item 键(ConfigDB 必需键清单同步)。charge_grants 路径不动(开格→穿刺 1/格 cap8 · 标中旗→魔法 2/雷)。
  • config_db.gd:reward_config 出表清单;跨表校验族重写——旧 ②池空/③clear正当量并入 RewardTable.validate,旧 ④⑤⑨(k_dmg 保底/零伤害后闸/注入池护栏)随 reward_config 删除退役,保留 ①effect_id 悬空 / poolmap 悬空 / source_label_map 键集 / level 节点悬空。

路由面(core):

  • minesweeper_rules.gd:cell_revealed 事件字段 reward_eligible → resource——initial 恒 false(封锁格),chain/dig 恒 true 含雷格(雷安同池——旧"mine 恒 false"作废)。
  • reward_economy.gd 重写为纯格面资源身份面:roll_board 对全部非封锁格逐一摇定类型(摇号只用正向行权重 = 类型频次,合计 79)+ 清图批尾摇 clear_blast + 区间行 power 追加取号;query_identity 返回 {reward_id, cell_type, tier},未开格恒可查(雷格同权);grant/grant_clear 幂等保持;新增 polarity_row(cell_type, polarity)(类型化字典行查询面,拷贝出口)与静默 is_mapped/phase 只读出口;删库存轴整族(stock/use/query_inventory/in_stock_count/clear_inventory/grant_node_active/supply_granted_count/notify_battle_start);equivalence_supply 投影保留(tier_min_buff = 我侧 percent 正向行最低档 = 2)。
  • battle_orchestrator.gd 授予段改极性路由:结算队列(开格/旗判定/清图三批)逐格兑付——开安全格→该格 cell_type 正向行(charge_grants 计数埋点不变)、开雷格→负向行、标中→该雷格正向行(_flag_consumed 每雷实例一次去重不变,高光 flag_hit 保持)、标空→标旗未中归因行 + 该安全格负向行(_flag_miss_seen 同键去重不变);删旧三套固定兑付(_convert_ambush 踩雷固定伏击 / _judge_flag 标中固定 weaken / _apply_miss_backlash 标错三选一哈希派生——整段删除)。负向兑付:percent 走 apply_effect(enrage/off_guard/sapped);heal 负向 = 主角直伤 4(apply_damage,不经增益状态;战斗段增 hero 存活守卫 = 致死短路;同轮后到 heal 正向遇已倒下主角记"奖励未生效"行);blast 负向 = ambush +stacks 层(_apply_ambush_grant 逐层经 ambush_grant_plan 对 cap=4 守恒,溢出逐层"溢出未生效"行——协议不变)。正向兑付:percent 挂状态、flat 当场(满层/满血/无敌/主角已倒下记"奖励未生效"行)。抵消过滤既有语义保持(旗判定批以轮末在场旗为基线——发射面过滤,勿改)。区间行快照 power 只在正向路由覆盖表值(负向字典行自带定值 power)。行型协议 15→10(删 item/consumed_ineffective/use_rejected/window_open/window_skip),SOURCE_EXEMPT 两层豁免集合同步收窄。
  • level_runner.gd/debug_session.gd:共享 地图战斗资源 容器与库存延续语义随库存删除收窄——战斗各自持容器(映射随战斗退役,零跨战斗状态),runner 删 window 转发/inventory()/level_clear 清库/submit_window_selection;奖励点节点内容随功能道具渠道(P1 未定)悬置为直通节点(零兑付,node_entered 零载荷——内容归 关卡节点地图 定稿批,待拍板);battle_finished 载荷删 remaining_items。

呈现面:

  • 删除 inventory_panel_view.gd(E 区道具面板/窗口态整件);ui_assembler 五区→四区(玩法说明文案改格面资源口径);hud_presenter 删 _fill_inventory/_inventory_row/window_rows,refresh 签名收窄;main.gd 删窗口接线/窗口状态机/库存引用(ux_window_choice 遥测随之退役);battle_narrator 文案去道具(层间延续 = HP only);battle_log_view 行格式化收窄 10 类(AGG_TYPES = reward_ineffective/overflow 两类);board_view 奖励徽章键 category→cell_type(攻/守/医/爆/弱 占位字形——类型图标预读/极性视觉归批 2,纯呈现);status_slot_row 补 sapped 图标键与语义(七行全映射);playtest_logger battle_end/level_end 载荷去 remaining_items、reward 节点零载荷。
  • "剩余安全格计数"注记:切片呈现层现无该计数器(safe_remaining 无 UI 消费方),无可改文案;呈现口径改动随批 2 一并处理。

smoke/tools:

  • 删 supply_scan.gd(可选类供给跨种子扫描——对象已不存在);_smoke_supply 整段删除。
  • smoke_all.gd 大改(201→211 项):删窗口接线族与窗口锚行段、等待期刷新探针改挂衰减行(结算段内 Waiting 相位刷新必拒);_smoke_power_interval 收窄两区间行;_smoke_damage_types 标错断言改类型化负向兑付。新增五段:_smoke_reward_identity_unit(roll 恰一次/query_identity 投影/同格重复 grant 幂等/grant_clear 幂等/退役拒绝)、_smoke_polarity_routing(真实流多轮:挖安全格只出正向 + 每格 ≥1 行、挖雷格只出负向、标中正向 origin 指回雷格、标空归因 + 负向同格同批、旗兑付零泄漏)、_smoke_negative_dictionary(sapped 数据面在位 + effect_pool_map 收编 + 逐型负向直验:enrage/off_guard/sapped 效果行、heal 直伤 4、blast +2 层与 cap 溢出守恒)、_smoke_resource_surface(chain/dig resource 恒 true 含雷格、initial 恒 false、封锁格查询 null、未开雷格可查)、_smoke_settlement_segments(segment_order 五段冻结 + 行型封闭零残留 + 逐轮行相位单调 + 衰减/判定恰一段)。
  • reward_expectation.gd 重写为类型频次测量(实测收敛权重涌现值 attack 25.3/defense 20.3/blast 20.3/heal 19.0/weaken 15.2%,封锁格泄漏 0);level_autoplay/monte_carlo/dump_battle/damage_probe/level_debug/level_monte_carlo/ui_probe/ui_click_probe/ui_layout_probe 去窗口/库存面。顺手修:monte_carlo.gd 缺 AutoPlayer preload(HEAD 起即解析失败)已补。

验证(本批实跑):冒烟 211 项检查 0 失败(回放断言全量保持——同 master_seed 同意图序列结算步骤流逐行相同);四场景探针 ui_probe / ui_tune_probe / ui_click_probe(PROBE_SEED=7 与 91 双种子)/ ui_layout_probe 全 PASS;工具回归 reward_expectation / monte_carlo / dump_battle / damage_probe(boss) / level_debug / level_monte_carlo(N=5) 零脚本错误。

表实一致注记(对 registry reward_table 条目):十一行逐字段一致;两处切片级补全登记——① 负向 heal/blast 行 registry 未定 reward_id,切片取语义名 heal_backlash / ambush_double;② blast 负向加层行 effect_id 恒空(registry flat 行口径)+ power 校验例外(power 不消费——伏击加层为独立兑付形态,见战斗结算 GDD 兑付形态表)。

待拍板(本批登记):① 关卡奖励点节点内容(功能道具渠道 P1——归 关卡节点地图 定稿批);② 已开格类型徽章与极性视觉(批 2——纯呈现);③ "剩余未探索安全区域"计数呈现口径(切片现无该计数器,随批 2)。


2026-09-16 敌人技能池批(批 1+2+3 合并落地——设计权威 proposal-skill-pool.md〔提案已吸收退役 git a6833b6a——现行事实源=敌人系统.md 技能池节〕 v1.0;文档面 v0.5/v0.11/v0.5/v0.6/v0.3/v0.4 同批)

机制:确定性出招剧本(行为环:拍枚举/环指针/同种锁步/heavy_multiplier)整体退役,改技能池 + 开轮摇号——每轮轮次开始排除冷却中技能、按行序逐敌摇定本拍动作(behavior_roll 封闭流,每敌子流 scope = spawn_index×1000000+摇号序),战斗段按技能行兑现(伤害技 = 三乘法链〔基线×倍率→d20 掷点→甲效→伏击后置→池乘区→max(1,·)〕,增益技 = 施放行 cast + 状态授予〔0 伤害不掷不折不兑伏击〕);两道闸 = 全技能各自冷却(普攻恒 0 锁死)+ 保底 M=4(连续 4 拍执行普攻 → 下拍必出特殊技、不受冷却限制);死亡即不动手改"摇定后兑现前死亡 → 作废不进账";拍结构保留(每结算每存活敌恰行动一次/行序/先作用后推进)。

数据面:新增 skills.tres + skill_table.gd(五行:普攻/突刺×1.5 cd2/蓄力 cd3/重击×2 cd3/硬化 cd4;pity_threshold=4;普攻倍率/冷却域校验锁死);enemy.tres 六行 pattern/heavy_multiplier → pool(地精 9/1 · 熊地精 6/2/2 · 酋长 6/2/2,全部 provisional);status_effects.tres 七→九行(empower 蓄力 +100 enemy_output 池 / fortify 硬化 +100 enemy_defense 敌方防御池新词汇——duration 2 = 1 个有效增益拍〔先兑付后衰减含施放当轮〕);settlement.tres effect_pool_map 增 empower/fortify 两键。

core 面:rng_service.gd 增 behavior_roll 流(salt 0x85EBCA7758C24E15,黄金向量 m=42 scope0=426657203655691839 见冒烟;open_scope 显式 scope 取号门 + BEHAVIOR_SUBSTREAM_STRIDE);新增 core/skill_lottery.gd(独立抽签器——输入可摇条目+子流、输出 skill_id,D9 封装纪律);unit_container.gd 重写(实例池快照/冷却递减/待发动作/保底计数;query_beat/query_attack/advance/steps/pattern 退役);battle_orchestrator.gd 开轮摇号编排 _roll_round_actions()(首轮同样摇、轮内刷新不重摇)+ 战斗段技能行兑现 + 主角攻击增敌方防御池乘区(Σ三分量后 ×(100+clamp(enemy_defense))/100);status_container.apply_effect 增 duration_override(技能行 buff_duration 覆盖);config_db.gd 挂技能表 + validate_skill_pool_links 跨表校验(悬空致命/每池恰一普攻/增益 ≤1)。

呈现面(批 2):presentation_snapshot 敌人数组字段定稿(beat/ring_size/ring_index 拆除 → pending_skill/pending_type/pending_name + effects 敌方增益投影;池与权重不公开);enemy_card_view 环点拆除(护甲行常驻)、意图徽标 = 摇定动画占位(普攻零表示 —/攻击系 ⚔/增益系 ✦);battle_log_view 施放行 ✦ 格式化、伤害行具名技能;status_slot_row 图标键补 empower ⇧ / fortify ▣(九行全映射);settlement_snapshot 敌方 beat 键 → pending_skill;damage_probe 拍名重建改 pending_skill 口径。

smoke(211→263 项):行为环断言全部改型(行相位 cast、fresh 池采样、削弱触底/AC12 采样改多种子扫描);新增 _smoke_skill_pool 六项验收(proposal §8):数据面(池模板/普攻锁死/空池不可能)、同种子回放逐位复现 + 单敌轨迹独立复放(D3 多实例逐轮记录 vs 只喂该敌子流的独立重放器逐位对照)、EV 抽样对锚(×5000 拍)、死亡打断作废(D2 特殊技种子 + hero_atk 999 先手击杀零行动行 + 不进账)、加载校验拒绝(悬空/池构成/普攻锁死/倍率域/权重域/空池)。

验证(本批实跑):冒烟 263 项检查 0 失败;四探针 ui_probe / ui_tune_probe / ui_layout_probe / ui_click_probe(种子 7、23)全 PASS;damage_probe(boss/level 全 PASS 含施放行)、defense_scan、monte_carlo 工具零脚本错误。

EV 抽样读数(×5000 拍,含闸长期速率 vs 静态锚):地精 1.1056(静态 1.05——保底闸把突刺率从自然 10% 抬到 ~22%,登记难度曲线重锚)/ 熊地精 0.9998(结构守恒恒 1)/ 酋长 1.0236。

文档/registry 同批(批 3):敌人系统 v0.5(技能池章节重写)/ 战斗结算 v0.11(随机口径三处/三乘法链/施放行/敌方防御池/AC 措辞四处)/ 增益状态 v0.5(九行 + 敌方防御池;顺手清偿 v0.4 挂起的 sapped 文档同步)/ 难度曲线与Boss v0.6(曲线纪律/Boss 专属池/技能池投值表 + EV 实测登记)/ 战斗表现 v0.3 / HUD框架 v0.4 / 数据配置(敌人表措辞 + 技能表行)/ 03-内容规模 / 02-系统清单 / 关卡节点地图 / ux battle.md(改型注记)/ architecture.md(单位容器 API 面)/ registry(rng/skill 新条目/enemy/status_effect/settlement/术语七词条/修订记录)/ 06-待办清单(改型"单拍行为环体验验证"、收编关闭"行为环废除与蓄力拍退役"、新增 P1 五项 + P2 技能图鉴)。

实现决策登记(提案未定处的自行拍板,按封装纪律报告):① 保底 M 载体 = 技能表全局单字段 pity_threshold(不分敌种,难度曲线单旋钮);② 冷却"施放后连续 N 拍不可摇中"的实现 = 摇号按当前冷却值排除、递减在其后(与提案"递减→排除"的可摇集合逐拍恒等);③ 增益持续与技能冷却两计时器 = apply_effect duration_override 通道;④ 敌方防御池乘区落点 = 主角攻击 Σ三分量后(hero_offense 现行走普通分量直乘的切片现状不动——登记遗留);⑤ 摇号器类名 SkillLottery(core/skill_lottery.gd)。

2026-09-19 技能池新效应词汇批(用户拍板——设计权威 proposal-status-vocabulary.md〔提案已吸收退役 git a6833b6a——现行事实源=敌人系统.md 词汇表/增益状态.md〕 v1.0)

三词收敛两词:妨害技(debuff 新类型)+ 必中附加分量(rider_mult,"固定值伤害"改形);多段命中经用户拍板退役(无防御磨损体系,无对照机制)。实装面 = 仅 L2 Boss 蛛化卓尔精灵,其余敌种不动:

  • 毒爆 venom_burst + rider_mult = 0.75——必中毒分量 = max(1, floor(atk × 0.75))(atk 开战掷定 2–4 → 毒 1–3 点),后置加法、必中全额、不进乘区不出暴击;伤害行 payload 增 rider 键 + 行文本「+附加N(必中)」。
  • 新技能行蛛网束缚 web_snare(debuff → off_guard 失衡,duration 2 = 1 有效结算,冷却 4,池权重 2 → 卓尔池 6/2/2/2 全 provisional)——0 伤害施放行,状态按 target_side 落主角(掷点阈值 10 → 8)。
  • 结构面:SkillTable type 枚举 +debuff;池纪律 +每池妨害 ≤1;施放类 side 守卫(buff→enemy / debuff→hero,validate_skill_pool_links 增 status_table 显式入参——装载序修正);意图徽标 +妨害系 ☠(紫)。
  • 验证:冒烟 306 项 0 失败(+新探针 _smoke_debuff_rider:毒爆行逐拍精确复算 / rider 键封闭 / 蛛网束缚落主角端到端 / 六项加载校验拒绝)+ 四探针 PASS;800 局模拟试玩(两关 × 20 种子 × 双画像)——L2 基线通关 90%→80%、死因全部集中 Boss(设计方向生效),L1 零行为变更回归一致(65%/85%)。
  • 顺手收口:smoke_all variant_pool(1, ["dungeon"]) → "dungeon"(并行 board_type 批签名 Array→String 的漏网同步——此前该断言被 SCRIPT ERROR 静默吞掉);analyze_playtest.py 反事实重算 +rider 识别。

2026-09-21 冒险结构实现批(三关正式序列生效——AdventureRunner + LevelRunner 账本外置 + AdventureTable 建表)

主入口升级:「▶ 开始冒险(三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城)」——一条命走完三关的完整 Roguelike 冒险;▶ 测试直入口 · 第二关/第三关 保留单关试玩模式,L1 单关直入口随批取消(冒险首关即 L1)。

冒险级语义(设计权威 = 冒险结构.md v0.6):主种子恰一次注入(冒险内不重播种,同种子同操作序列逐位可复现);生命账本跨关同账(战后回写、恢复点按比例封顶、大奖励回满);GP 钱包跨关延续、冒险收束清零;统一冒险加算区(商店购买与大奖励同账);非末关通关发大奖励(上限提升 +10 读 adventure.tres、血回满、钥石 +10),末关不发上限提升、钥石照记;任意战斗倒下 = 冒险失败;结算屏出冒险摘要五件事(打穿没有/通关几关/止步第几关/钥石合计/主种子)。

验证:冒烟 437→482 项 0 失败三闸全过(冒险表 +4 / API 闸 +8 / 冒险验收 +33:表覆盖义务、满配通关、种子复现、大奖励恰 2 次与覆盖值传播、败北线两种子扫描、重复宣布拒绝、GP 跨关延续、加算区同账、恢复数学、放弃两态);MC 回归零行为变更(run_level 旧路径同种子逐位一致)。

2026-09-21 元进度实现批(跨局循环闭合——MetaTable + MetaProgression + 营地 + 跨局注入)

跨局成长首批落地(设计权威 = 元进度.md v1.2):「存档在变厚」成为玩家可感的现实——冒险收束入账(大奖励渠道 + Boss 首杀/重复杀两档,明细在结算屏可归因)、营地消费、余额 HUD 常驻、永久强化在下一局开局注入。

玩法面:首页新增「营地 · 永久强化」入口(三柜台:属性锻造三档 flat 直购可重复升级、几何递增定价;秘宝匣六件按累计通关次数解锁——局内效果排 Alpha 魔法道具重设计批;奖励格图鉴占位锁定);A 区顶栏钥石余额常驻;冒险结算屏追加钥石入账明细(大奖励 / 逐关 Boss 首杀或重复 / 工坊新解锁)。买强化 → 下一局开局即生效(表值 + 永久强化 flat + 冒险加算区,再乘调整板百分比)。

技术面:data/tables/meta.tres 四行族(forge_products / boss_keystone / workshop_items / conversion)+ core/meta_progression.gd 账本服务(Core 层零 UI 零信号);SaveManager.apply_adventure_summary 增第二参 boss_drops(缺省 [] 零行为兼容,摘要元素附副本);AdventureRunner.start_adventure 增 params.hero_override(缺省全零 = 白板)→ LevelRunner base_override。数值全 provisional 归元进度设计批配读数(骨架先行先例 = GP+商店房批)。

验证:冒烟 522→549 项 0 失败三闸全过(表结构 +4 / 定价与购买 +7 / 注入与白板 +8 / 入账工坊摘要 +8);四探针全 PASS(ui_probe 营地开合/禁用态、click_probe 营地购买合成点击全路径——隔离存档换注保确定性,禁碰真实档);白板成立 = 空参数 = 零强化参数 = 纯表值三轴逐位一致。

2026-09-24 伤害管线单据化批(伤害对象抽象补全——伤害控制器统一入口)

架构面:伤害此前无对象抽象——五族伤害来源(主角先手 / 敌方伤害技 / 棋盘克制直伤 / 群伤 / 反噬地形)在战斗编排器内各自内联组装管线。本批新建 core/damage_controller.gd(伤害单据 + 唯一兑付管线):九栏单据、五种兑付配方封闭枚举;battle_orchestrator 六调用点退化为开单点(流程决定何时开单给谁开单,单据怎么算归控制器),掷点 / 折扣 / 暴击 / 克制 / 池乘区 / 下限 / 攻击行文本算术全部迁入控制器(_defender_ac / _clamped_pool 留薄委托供快照面与冒烟白盒直呼);unit_container 新增 unit_died 死亡事件信号(单位自行宣布死亡——怪死其未结单据作废〔死亡即不动手〕、主角死兑付终止,Game Over 仍归判定段读数)。

结账时机双模式(2026-09-24 用户三裁决之二三):目标 = 结账时刻照规则看现场解析(最前存活敌 / 主角 / 全体存活敌),开单不冻结对象;现行 = 段界结账(授予段尾 / 清图批同步点 / 战斗段尾统一兑现),开单即结保留为回切结构位(控制器 policy 常量一行切回=逐位还原迁移前行为)。同一输入两模式结果可不同(兑现时机语义差异),历史基线读数自本批以段界结账口径为准(重测归曲线调参批)。

验证:冒烟 557 项 0 失败双模式全绿三闸过;A/B 对拍探针四配置(L1/L2 × 双种子)两模式各自同种子逐位确定、四配置全部真实分岔(行数两两恒等、纯次序位移——分岔面 = 伤害行攒批位移与治疗满血判定时机,符合段界结账语义);三场景探针全 PASS。设计权威 = 战斗结算.md v0.24「伤害单据与伤害控制器」节。

2026-10-06 地图伤害账殿后批(案C,用户裁——「主角先手」歧义质询触发;设计权威 = 战斗结算.md v0.26)

裁决:每轮结算内三者顺序定死 = ①授予段兑非伤害账(资源/增益/治疗/行动点/GP/警觉)→ ③战斗段「主角先基础攻击 → 敌人按生成序逐个还手 → 地图伤害账殿后」→ ④衰减 → ⑤判定。授予段不再当场兑付任何伤害——全部伤害形态单据(爆裂/直伤/反噬/地形变异/战旗军规/熔火反噬/惊巢反制/魔能共鸣/清障炸药等)暂存,战斗段怪物还手后按授予段事件序补提交统一结账;主角死于敌方还手 → 暂存单整体不兑,逐单留「未生效(主角已倒下)」行(载荷 forfeit=hero_down)。

切片落点:battle_orchestrator.gd 暂存闸 _defer_board_damage/_deferred_board + _submit 案C 分流(sync 同闸——清图批一致延后)+ _outcome_of(暂存单按「将兑付」回报——完美第二份/高光份数依据开单时点事实)+ 授予段四处直提改走闸 + 战斗段末补提交块(死亡守卫+留痕);授予段界 flush 保留(对空队 no-op 防御位);smoke_all.gd 行相位分类器换代(damage 恒战斗段/reward_ineffective 按 forfeit 分流)+ 先手断言收紧(「存在或授予段终局」→「必存在」)+ 新增案C 段内序断言(地图账不得先于主角先手或插入敌方还手中间)。

验证:冒烟 783 项 0 失败三闸过 + run_all 17 套全绿 + probe_gate(ui_input/ui_struct/ui_contrast/--click 行为走查)全绿、残留 0。旧行为 MC 锚全数作废(死亡短路语义变化:授予段伤害不再能致死短路先手;读数重采归数值批)。

2026-10-10 秘宝匣改名(文档面同步——2026-10-10 天赋树设计会话裁)

营地柜台「道具工坊」正名「秘宝匣」(树上解锁节点与营地柜台同名):本文档现行正文扫改完毕;代码标识符(workshop_items 等)与界面文案暂未动——柜台 UI 名/表行语义连带面归 design/gdd/06-待办清单.md「天赋树结构重构批」实装批办理。

2026-10-11 专长实装批(迭代 20——奇物重设计 T0-T10 全落)

换代面:feats.tres 整表换代(旧 27 件退役→重设计 29 行=基础 27+迁入淬毒刃纹/封印爆裂——订阅行 on/when/do 四级 rarity+cap);效果引擎词表扩签(事件 18/效果类型 30/事实 18/算子 +mod_eq——heal/ac_bonus/damage_reduce/bonus_delta/blast_scaled/preview_area/target_attack_bonus 七新类型+adventure 域计数器跨战账本);池结构案D(四级档位 70/25/9/0=104+曝光槽 2+1+概率上限解耦案②+Boss 按档配比加权抽取);凭证五件入池(刷新券 F-1 修复/储备金袋/同调电池〔choose_battery_target 玩家点选〕/时沙/完美保险);流派标签/档位激活机制退役(FeatsEngine 求值摘除——HUD 特性段降级为逐件行,呈现改法归 06 在册奇物呈现条)。 验证:冒烟 864/0+run_all 21 套+probe_gate 全绿;MC 同种子重放 30 局逐位复现;新基线 normal/off 100 局通关 0%(master 对照同为 0%=零配基线本相,止步分布 90/10→93/7 可归因曝光槽)。设计权威=奇物.md(反哺点清单见 design/qa/iter20-实现报告-2026-10-11.md)。