chore: initial commit

This commit is contained in:
DKChan committed 2026-09-14 18:18:49 +08:00
commit ddd2960fa6
317 files changed
+41717

No files matched your search

@@ -0,0 +1,70 @@
# Gate Check 报告:Concept → Systems Design(重审)
- **日期**:2026-09-07
- **执行**:gate-check 技能 · 评审模式 lean(`production/review-mode.txt` 不存在,取默认)
- **背景**:上一轮(2026-09-06)四总监 CONCERNS(流程债 FAIL)。本轮为流程债清偿后的重审。
- **Verdict: CONCERNS**(无阻塞项,遗留项均为登记级文档修正)
## 必备物证:3/3 通过
- ✅ `design/gdd/game-concept.md` — 有实质内容(受众/术语/循环/难度分层/待定问题)
- ✅ 游戏支柱 — `game-pillars.md`,4 条支柱各带裁剪判据
- ✅ Visual Identity Anchor — game-concept.md:13,1 句总规则 + 4 条支撑原则
- ✅ (推荐项)概念原型 REPORT — `prototypes/minesweeper-battle-concept/REPORT.md`,Verdict: PROCEED,CONFIRMED(核心)
## 质量检查:4/4 通过(1 项注明)
- ✅ 核心循环已描述且文档间一致
- ✅ 目标受众已定稿(game-concept.md:6)
- ✅ VIA 含一句规则 + ≥2 支撑原则(实为 4 条)
- ✅ 概念已评审 — 无独立 `/design-review` 报告文件,由两轮四总监门禁评审代行,无 MAJOR REVISION 级判定
## 总监评审
### Creative Director — CONCERNS
1. 流程债四项验证属实清偿;情绪核心与支柱全文档一致
2. 验证证据质量:CONFIRMED 依据为开发者自测主观反馈,预注册验证信号未逐条记录 → 垂直切片前补一次按信号记录的正式 playtest(可与标错惩罚实测合并)
3. 未登记创意风险:安全格奖励**可预期性**无文档承载(P2 规划前提)→ 进 GDD 前登记,B4/A4 落实奖励可见性/探测
4. 未登记创意风险:"我算对了"缺高光兑现节点(如全图标中/零误标加倍结算)→ 进 GDD 前登记,B1/B4 设计
### Technical Director — CONCERNS
1. 四项已登记技术风险(双舞台管线、可回放结算、headless 可测、RNG 归 D2)核实;依赖无环,前 10 GDD 满足拓扑序
2. systems-index:55 依赖笔误:`A5 ← B2,A4` 应为 `A5 ← A2,A4`(奖励侧挂 B4 未入箭头)→ 进 GDD 前修正
3. C3 口径不一::62 称"C3 消费 B1 输出"但 :56 依赖表为 C3 ← D2,B2 → C3 GDD 内定稿回写,可延后
4. stage.txt 未写入(门禁关闭动作);两条未登记工程约束(headless 测试载体、事件总线载体)归 D2/B1 GDD 章节
### Producer — CONCERNS
1. **流程债四项逐项验证 ✓ 全部清偿**(支柱/受众/VIA/REPORT 均非占位、有定稿日期)
2. 里程碑分层与 GDD 设计顺序可执行;待定问题均有归属
3. 两条跨系统前置未登记进 systems-index:标错惩罚实测(A2 GDD 前)、格子样张测试/art-bible 排期(game-concept:24 指向不存在的"art-bible 任务")→ A2 前补齐;**前 5 份 GDD(D2/A3/A4/B3/A1)无未清前置,可立即开写**
4. active.md 轻微失真:"v1→v3 验证完成"应为"v2 核心假设 CONFIRMED,v3 待终验"
### Art Director — CONCERNS(代评)
> 注:AD 代理派单连续 4 次失败(基础设施错误),本项由主会话按已读文档代行评审;如需独立评审可重跑 `/gate-check systems-design`。
1. VIA 足以支撑后续美术工作(色弱双通道、绘制优先级、调色板交换均到位);三项美术风险均已登记
2. art-bible 未创建且未排期:不阻塞进入 Systems Design,但最晚须在 **D1 GDD(设计顺序第 10 位)前**、至迟垂直切片前存在(含格子样张测试)
3. 格子样张测试归属模糊;战斗表现美术测试(B5 GDD 前一屏样张)已登记清晰
4. D1 行未登记"移动路径预览"归属(game-concept:25 有)
## 阻塞项
无。
## 建议(按优先级)
1. 补 systems-index 登记:标错惩罚实测(A2 前)、art-bible + 格子样张(D1 GDD 前最晚)、B4"使用时机"字段、D1"移动路径预览"
2. 修 systems-index:55 依赖箭头(A5 ← A2,A4,B4)
3. 修 active.md 失真(v3 待终验)+ README 标题 v2→v3 + game-concept:121 拆分停手(×2)/清图(×1)
4. 登记 CD 两条创意风险(奖励可预期性、"我算对了"高光节点)
5. 垂直切片前:按预注册信号做一次正式 playtest(与标错惩罚补丁实测合并)
## Chain-of-Verification
5 问核验,结论不变。工具实证:VIA 节(grep game-concept.md:13)、支柱裁剪判据数 = 4、REPORT PROCEED 行、stage.txt 确认不存在、design/gdd/ 仅 3 文件。无 CONCERN 可升级为阻塞;上轮 FAIL 项经文件证据逐项确认清偿。
## 阶段处置
- **stage.txt 未写入**(判定 CONCERNS,且技能要求阶段变更须用户明确确认)
- 门禁实质通过;用户确认推进后执行:`production/stage.txt` ← `Systems Design`,并同步 active.md 阶段字段
+85
View File
@@ -0,0 +1,85 @@
# Bug Report
## Summary
**Title**: 结算战斗段首行下发时 StatusSlotRow 按索引误取 tooltip 节点崩溃,结算协程中断 → 结算阶段永久软锁
**ID**: BUG-0001
**Severity**: S1-Critical(核心循环阻断——结算阶段永久假死,只能杀进程)
**Priority**: P1-Immediate
**Status**: Closed
**Reported**: 2026-09-12
**Reporter**: 用户(设计师本人,垂直切片试玩)
## Classification
- **Category**: Crash / 软锁(soft lock,无崩溃弹窗的假死)
- **System**: C 区状态效果槽(StatusSlotRow)呈现层 × B1 结算编排(信号链中断面)
- **Frequency**: 条件必现(前置 = 状态槽悬停过一次 + 其后任一结算行刷新时英雄侧效果 ≥1;悬停是新增益出现后的自然操作,实际对局高频可触)
- **Regression**: Yes——`status_slot_row.gd` 与 C 区数据框为 2026-09-12 五区改造批新增;2026-09-11 build 无此视图
## Environment
- **Build**: 垂直切片 · battle.md 五区改造批(2026-09-12);卡死会话种子 42,19:22:19 开局
- **Platform**: PC · Win10 · Godot 4.7.2 (OpenGL Compatibility · RTX 2060 SUPER)
- **Scene/Level**: 完整关卡模式(第一关)· 轮末结算(道具窗口跳过后、战斗段首行)
- **Game State**: 第 1 场战斗结算中;道具窗口以「跳过」关闭;英雄侧存在本结算新授予的状态效果(槽可见)
## Reproduction Steps
**Preconditions**: 对局中英雄侧至少有 1 个状态效果(如安全格授予的增伤),状态槽在 C 区可见。
1. 鼠标悬停任一状态效果槽(tooltip 弹出——此步把 `_tip` 挂入 StatusSlotRow 子节点表)
2. 正常结束本轮(停手或 AP 耗尽),进入轮末结算
3. 结算段任一 step_row 下发(如道具窗口跳过 → 战斗段「主角攻击」行)触发 `_refresh_presentations`
4. 游戏无声冻结:棋盘保持去饱和、阶段文案停在「结算中」,所有输入通道无效
**Expected Result**: 结算七段完整回放,逐行兑现后进入下一轮(或终局 overlay)。
**Actual Result**: `status_slot_row.gd:118` 脚本错误沿信号链回卷,`_finish_settlement` 在战斗段(⑤)中途被中止——`_settling` 恒为 `true`、A3 恒为 `PHASE_WAITING`,结算永不恢复。
## Technical Context
- **Likely affected files**:
- `prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd:57-63`(`set_effects` 用 `get_child(i)` 按位取槽——`_tip` 入树后索引错位)
- `prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd:80-88`(`_sync_slots` 显式保留 `_tip`,与上行索引假设自相矛盾)
- `prototypes/dungeon-sweeper-vertical-slice/presentation/views/status_slot_row.gd:114-118`(`_fill_slot` 对 cast 为 null 的 `col` 调 `get_child`)
- 中断面:`core/battle_orchestrator.gd:233-263`(`_finish_settlement`——错误回卷致 `_settling` 悬挂)
- **Related systems**: `main.gd _on_step_row → _refresh_presentations`(每结算行同步刷新);`level_runner.gd:128` 转发 lambda;`hud_presenter.gd:29`
- **Possible root cause**(已由崩溃回溯证实):
tooltip 节点 `_tip` 在 `_init` 不入树,仅 `_on_slot_hover` 首次悬停时 `add_child(_tip)`,与动态重建的槽共用同一子节点表。此后 `set_effects` 内 `get_child(i)` 取到的第 0 个"槽"实为 `_tip`(PanelContainer,cast 通过),`_fill_slot` 中 `_tip.get_child(0)` 是 Label → `as VBoxContainer` = null → 118 行 `col.get_child(0)` 报
`Cannot call method 'get_child' on a null value`。
Godot 4 对信号回调内的运行时错误整条 GDScript 调用栈回卷:按钮 lambda → `submit_window_selection` → `_finish_settlement` → `_combat_segment` 全部中止,B1 无"结算恢复"路径,软锁。
## Evidence
- **Logs**(`user://logs/`,DungeonSweeperVerticalSlice):
- `godot.log`(19:22 会话)完整回溯:`_fill_slot (status_slot_row.gd:118)` ← `set_effects` ← `set_status_effects` ← `HudPresenter.refresh` ← `main._on_step_row` ← `level_runner lambda` ← `_emit_row` ← `_combat_segment (battle_orchestrator.gd:474)` ← `_finish_settlement (242)` ← `submit_window_selection (230)` ← `_on_window_skipped` ← skip 按钮 lambda
- `playtest_42_20260912T192219.jsonl`:`ux_window_choice{skip:true}` 之后再无任何事件(无 settlement 快照、无 ux_round_exit、无下一轮)——结算协程死亡实锤
- **Visual**: 棋盘去饱和锁定、阶段指示「第 N 轮 · 结算中」、明细带展开但停在该结算首行;与 2026-09-11 崩溃 #1 的"输入锁已上 + 呈现层崩溃 = 无声冻结"同族
## Related Issues
- `production/qa/playtests/playtest-2026-09-11-designer.md` 崩溃 #1/#2——同一失败家族(结算期呈现层错误 + 核心中断/输入锁死),当时的防复发三条硬性要求(载荷 schema 成文 / 场景级 headless 测试 / 状态可见性)第三条仍未覆盖本路径
- `presentation/views/board_view.gd:476` `_make_cursor_texture` 启动期 `canvas_item is null` 渲染错误(P3,独立缺陷,与本软锁无关)
- `status_slot_row.gd:57-63` 潜在次生缺陷:`set_effects` 循环上界是 `effects.size()` 而 `_sync_slots` 只建 `min(size, 4)` 个槽——英雄侧效果 >4 时(off_guard max_stack 16)同函数必崩
- 场景探针(ui_probe/ui_click_probe)未覆盖「悬停 → 结算刷新」路径——冒烟再次漏掉呈现层时序态
## Notes
- 修复方向(最小面):槽与 tooltip 分离承载——`_tip` 改挂 StatusSlotRow 之外的独立层,或 `set_effects`/`_sync_slots` 改用槽引用数组(不按子节点位序索引)。两处任选其一,后者改动面更小但必须同步修掉 >4 溢出循环上界
- 按代码规范「缺陷修复必须沉淀回归断言」:需在场景级探针补"悬停槽位后触发一次含效果行的结算,断言无脚本错误且 phase 走到下一轮"
- 本次卡死用户未点「诊断转储」(现存三份 diag 均来自探针 `{"test":true}` 上下文,core 字段为空)——诊断按钮对真实软锁会话未被使用,不影响本次定位(godot.log 回溯已足够)
## Fix Record(2026-09-12,Status 仍 Open——正式流转待 /bug-report verify)
- **修复**:`status_slot_row.gd` 槽生命周期改由 `_slots: Array[PanelContainer]` 引用数组唯一管理,`set_effects`/`_sync_slots`/`set_cleared_feedback` 全部弃用子节点位序索引;顺带修掉 effects > MAX_SLOTS 时循环越界次生缺陷(超出截断至 4 槽,符合"最多 4 槽可见"规格)
- **回归断言**:`smoke/ui_probe.gd` 新增 BUG-0001 回归段(建槽 → 悬停入 tooltip → 重刷断言槽位/填充 → 超上限截断 → 空态清槽)
- **阴性对照**:回滚修复版跑探针,精确复现野外崩溃(`status_slot_row.gd:118` 同行同错);恢复修复版后探针通过——断言有效
- **验证**:smoke_all 161 检查 0 失败 · ui_probe PASS · ui_click_probe(seed 7)关卡通关/问题=0/选用失效=0/无卡死 · ui_tune_probe PASS ×2
- **待办**:人类完整试玩复跑(playtest 报告 Top1 优先级)后走 verify/close
## Verification Record(2026-09-12)
**判定**:VERIFIED FIXED
- 复现路径核查:`status_slot_row.gd` 中 `set_effects`/`_sync_slots`/`set_cleared_feedback` 已无子节点位序索引(grep 复核,仅 `_slots` 引用数组访问)——原崩溃代码路径不复存在
- 阴性对照:修复前版本在 ui_probe 回归段精确复现野外崩溃(`status_slot_row.gd:118` 同行同错),证明断言与定位有效
- 相关测试:smoke_all 161 项检查 0 失败(关闭时复跑)· ui_probe PASS(含 BUG-0001 回归段)· ui_click_probe(seed 7)关卡通关/问题=0/无卡死 · ui_tune_probe PASS
- 人工确认:用户试玩确认"没有问题"
## Closure Record
**Closed**: 2026-09-12
**Resolution**: Fixed — StatusSlotRow 槽生命周期改由 `_slots` 引用数组唯一管理,弃用子节点位序索引(tooltip 入树不再错位);顺带修复 effects > MAX_SLOTS 循环越界(截断至 4 槽)
**Fix commit / PR**: 本地工作区直接修复(项目非 git 仓)
**Verified by**: qa-tester
**Closed by**: 用户
**Regression test**: `prototypes/dungeon-sweeper-vertical-slice/smoke/ui_probe.gd`(BUG-0001 回归段)
**Status**: Closed
+61
View File
@@ -0,0 +1,61 @@
# Bug Report
## Summary
**Title**: 浅深度战斗零敌人(d0/d1 遭遇 unit_count=0、round 1 即 victory)——遭遇骰/spawn 路径疑似掷出 0
**ID**: BUG-0002
**Severity**: S3-Minor(复核降级——原报 Medium;当前构建不可复现,遥测签名另有解释)
**Priority**: P3-Backlog(不变式回归已落地,无遗留行动)
**Status**: Closed
**Reported**: 2026-09-12(playtest-2026-09-12-designer 报告 Bugs 表 #1)
**Reporter**: 用户(设计师本人,试玩遥测);本档由 2026-09-13 会话按报告 Action Routing 建档并复核
## Classification
- **Category**: Gameplay(遭遇生成)/ 遥测可观测性
- **System**: B1 遭遇骰(C3 Core Rule 8 区间骰)× B2.spawn × settlement_snapshot 观测面
- **Frequency**: 原报两次真人局均现(d0 100%、20:13 另含 d1);当前构建复现 0/100 场
- **Regression**: No——遭遇骰批(2026-09-12)后无相关代码路径可产出 0
## Environment
- **Build**: 原报 = 垂直切片 · 2026-09-12 五区改造批;复核 = 2026-09-13 当前工作区(status_effects.tres defense_up=-30 批)
- **Platform**: PC · Win10 · Godot 4.7.2 · seed 42 固定
- **Scene/Level**: 第一关 d0/d1 战斗节点
- **Game State**: 战斗第 1 轮结算即 victory,快照 unit_count=0
## Reproduction Steps
**Preconditions**: 原报基于 playtest_42_20260912T201317.jsonl 遥测(快照面)。
1. seed 42 开局,进入 d0 战斗
2. 首轮挖满 8 AP 后结算
3. 快照显示 verdict=victory、unit_count=0(原报判为「零敌人空场」)
**Expected Result**: C3 Rule 8 区间 [unit_count, unit_count_max] 下限 1——不应出现 0 敌战斗。
**Actual Result(复核)**: **遥测误读——实为「首轮全灭」而非「空场」**。快照取在衰减段之后的结算末尾,`unit_count` 只计存活敌:英雄首轮爆发(基础攻击 + 伤害A 开格充能 + 爆裂粉尘 instant_aoe 全体)可在 round 1 全歼浅深度低 HP 敌群,快照同样呈现 unit_count=0 + round-1 victory。
## Technical Context
- **Likely affected files**: `core/battle_orchestrator.gd`(begin_battle 遭遇骰 / _emit_settlement_snapshot)、`core/unit_container.gd`(spawn 数量守卫)
- **Related systems**: C3 Core Rule 8(区间骰)、playtest_logger(JSONL 快照消费)
- **Possible root cause(复核结论)**: 非遭遇骰缺陷。当前实现掷骰 = `roll_lo + estream.randi_range(0, roll_hi - roll_lo)`,数学下限 = `unit_count` ≥ 1;B2.spawn 对 count<1 fail-fast 拒绝(双闸)。**seed 42 当前构建全关回放(damage_probe level 模式)复现同款遥测签名**:d0 spawn=1、d1 spawn=3,全部「round-1 胜利 = 首轮全灭(wipe)」——与 20:41 辅助局 d1 快照(3 只地精各剩 1 HP = 主角攻击斩首只 + 3 颗爆裂粉尘 ×4 AOE)逐点吻合。
## Evidence
- **探针**:`smoke/damage_probe.gd -- level 42`——d0 spawn=1(预测 1 ✓)首轮全灭 · d1 spawn=3(预测 3 ✓)首轮全灭 · 20 种子 × 5 深度 = 100 场 spawn 全域内、0 场空遭遇
- **遥测取证**:playtest_42_20260912T204636.jsonl d1 r1——unit_count=2 存活(3 只中 2 只各剩 1 HP)+ hero 承伤 −8,证明同种子 d1 在另一局正常刷出敌群(差异 = 真人挖掘路径不同的奖励抽取,非 RNG 流分歧)
- **回归断言**:smoke_all `_smoke_encounter_roll` 增「全深度 × 12 种子 spawn 全域内(60 场,∈[unit_count, unit_count_max] 且 ≥1)——空遭遇不可达」;settlement_snapshot 新增 `spawn_count` 字段 + `_smoke_playtest_logger` 字段/等值断言——unit_count=0 时可判别「首轮全灭」vs「空场」,同类误读不再依赖人肉推断
- **修复后验证**:冒烟 148/148 全绿
## Related Issues
- playtest-2026-09-12-designer 报告 Bugs 表 #1 / Top 3 Priorities #1(探针前置)
- BUG-0003(Boss 攻击零兑现——同一份遥测的姊妹误读,共用根因探针)
- BUG-0001(呈现层软锁——编号顺延基点,无关联)
## Notes
- 「单位数量 0」类观察的判别义务已机制化:任何后续 JSONL 快照携带 `spawn_count`(实例化总数,含死亡残位),`unit_count < spawn_count` = 有击杀,`spawn_count=0` 才是空场。
- 原报的怀疑对象(遭遇骰路径)经代码审读 + 100 场扫描证伪;真实可玩性议题「浅深度战斗可被首轮爆发无伤跳过(d0-d3 全部 round-1 通关)」属难度带问题,归 C3 F4/F5 复扫(BUG-0003 关联条目与本会话 Q1 基线数据),不在本缺陷档处置。
## Closure Record
**Closed**: 2026-09-13
**Resolution**: Rejected as coded——零敌遭遇在当前实现不可达(数学下限 + fail-fast 双闸 + 100 场扫描零越域);原观察为「首轮全灭」被快照盲区误读。沉淀 = settlement_snapshot.spawn_count 观测面 + 全域 spawn 回归断言(无游戏数值变更)。
**Fix commit / PR**: 不适用(非 git 管理;变更 = core/battle_orchestrator.gd 快照字段 + smoke/smoke_all.gd 回归断言 + smoke/damage_probe.gd 探针)
**Verified by**: 2026-09-13 会话(damage_probe level 模式 + smoke_all 148/148)
**Closed by**: 用户授权任务(playtest-2026-09-12 报告 Top3 执行会话)
**Regression test**: `smoke/smoke_all.gd` `_smoke_encounter_roll`(全域扫描)+ `_smoke_playtest_logger`(spawn_count 字段与等值);`smoke/damage_probe.gd -- level`(可复演证据面)
**Status**: Closed
+63
View File
@@ -0,0 +1,63 @@
# Bug Report
## Summary
**Title**: Boss 攻击拍零兑现(ogre_chief pattern 轮转正常但英雄血量纹丝不动——攻击链对该敌未生效)
**ID**: BUG-0003
**Severity**: S2-Major(复核降级——原报 High;非代码缺陷,零承伤根因为已拆除的减伤墙设计语义)
**Priority**: P2-Next Sprint(无代码遗留;难度带复验归 Q1 调参批数据,见 Notes)
**Status**: Closed
**Reported**: 2026-09-12(playtest-2026-09-12-designer 报告 Bugs 表 #2)
**Reporter**: 用户(设计师本人,试玩遥测);本档由 2026-09-13 会话按报告 Action Routing 建档并复核
## Classification
- **Category**: Gameplay(战斗结算)/ 数值设计
- **System**: B1 战斗段 F2 乘区(hero_defense 池)× B3 defense_up(stack×max_stack)× B2 行为环
- **Frequency**: 原报两局 Boss 战全部攻击拍零兑现;当前构建(defense_up=-30 批)0 复现
- **Regression**: No——攻击链代码路径无缺陷;行为由表值组合完全解释
## Environment
- **Build**: 原报 = 垂直切片 · 2026-09-12 五区改造批(status_effects.tres defense_up=-50 旧值);复核 = 2026-09-13 当前工作区(defense_up=-30)
- **Platform**: PC · Win10 · Godot 4.7.2 · seed 42 固定
- **Scene/Level**: 第一关 Boss 节点(ogre_chief,pattern [attack, attack, charge, heavy],atk 9)
- **Game State**: 12 结算轮 hero hp 恒 50/50;快照 buffs[] 恒空
## Reproduction Steps
**Preconditions**: 原报基于 playtest_42_20260912T201317.jsonl(主分析局)+ 20:41 辅助局。
1. 正常推进至 Boss 节点(此时库存/状态由前序战斗积累)
2. Boss 战 6 轮:beat 轮转 attack→attack→charge→heavy→attack→attack 正常推进(advance 在跑)
3. 英雄承伤恒 0(含 fresh 池轮)——原报判「攻击链对该敌未生效」
**Expected Result**: 非 charge 拍应按 atk.total × 池乘区兑现伤害。
**Actual Result(复核)**: **攻击链健康——零兑现由 defense_up 叠满墙(设计语义)全额解释**。快照 buffs[] 恒空是观测盲区:快照取在衰减段之后,时效 1 的 defense_up 当轮授予当轮衰减,快照永远看不见——「buffs 空」不构成「无墙」证据。旧数据 defense_up magnitude=-50 × max_stack 2 = 池 -100 = pool_clamp_lo 触底 → F2 乘区 ×0,任何 atk 曲线乘在 ×0 上(原报根因分析「v3 主杠杆是乘在 ×0 上的调参」由此坐实)。
## Technical Context
- **Likely affected files**: `core/battle_orchestrator.gd`(_combat_segment / _clamped_pool / _resolve_damage)、`core/status_container.gd`(stack 授予)、`core/damage_math.gd`(pool_damage)
- **Related systems**: settlement.tres(effect_pool_map / pool_clamp)、status_effects.tres(defense_up 行)、reward.tres(defense_up 权重)
- **Possible root cause**: 设计语义——「stack 策略 × magnitude × max_stack 触池 clamp 下限 = 100% 免伤」授予段生效、先于战斗段,当轮挖到的减伤当轮全额兑现。非 Boss 特异:普通敌在同一墙轮同样零兑现(20:13 局 12/12 轮零承伤)。
## Evidence
- **探针(fresh 池裸验,当前构建)**:`smoke/damage_probe.gd -- boss 42` Run A(零挖掘停手轮,零授予零墙)——Boss 攻击拍 d_tick = atk.total 全额兑现:attack 9/9 ×2、charge 0(设计)、heavy 18/18,6 轮内击倒英雄(defeat)——**H2(Boss/敌攻击链缺陷)否证**;拍名轮转与真人局逐拍一致
- **探针(墙行为,当前数据重证)**:Run B(自动挖掘)——减伤授予可见(池 -30 → d_tick 21→14;池 -60 → 残余 ×0.40),墙轮承伤恒 > 0:**09-13 调参批(-50→-30)后墙最深 -60 > clamp_lo -100,归零不可达**
- **遥测取证**:20:13 局 Boss 6 轮 raw 应承伤 9/9/0/18/9/9 = 54 点 vs 实测 0;d2/d3 首轮攻击拍同样零兑现(非 Boss 特异)——与「全轮墙」假说唯一相容
- **回归断言**:smoke_all 新增 `_smoke_attack_chain_fresh_pool`——停手轮(零授予→池恒空)断言非蓄力拍 d_tick == atk.total 全额兑现且 > 0;若未来出现 fresh 池零兑现(真攻击链缺陷)在此被抓
- **修复后验证**:冒烟 148/148 全绿
## Related Issues
- playtest-2026-09-12-designer 报告 Bugs 表 #2 / 根因分析「问题②难度:v3 调参为何无效」/ Top 3 Priorities #1
- BUG-0002(同份遥测的姊妹观察——同一探针分割)
- 09-13 减伤墙调参批(status_effects.tres -50→-30 + reward.tres 权重 24→16——本缺陷的设计侧处置,先于本档落地)
- Action Routing 原定「/propagate-design-change b3-status-effect.md(候选:clamp 收紧/乘法衰减/重击拍穿防)」——**未执行**:结构冻结域拦截(settlement.tres 池 clamp [-100,+100] 冻结)+ 数值拍板权归 C3,候选改法列入待设计批清单,见 Notes
## Notes
- **待设计批清单(超出本会话授权,列出不执行)**:① 墙语义候选改法(clamp 收紧至 -60/-70 / stack 乘法衰减 / heavy 拍穿防)归 C3 + /propagate-design-change;② B3 GDD "-50" 文字与 status_effects.tres 批注同步(09-13 批已登记随下次 B3 修订批);③ 当前墙残余 -40%/轮仍显著——是否越 F4 带(普通场 ≤20%、Boss 场 ≤50%)由本会话 Q1 复扫数据(production/session-state/active.md 41 条)供 C3 裁决,本会话未做任何数值拍板。
- 原报 Action Routing 将本项路由至 /bug-report 与 /propagate-design-change 双通道:bug 通道结论 = 代码无缺陷(本档);设计变更通道 = 候选改法待 C3 拍板(上表)。
## Closure Record
**Closed**: 2026-09-13
**Resolution**: Rejected as coded——攻击链无缺陷(fresh 池全额兑现 + 击倒可达);零承伤根因 = defense_up 叠满墙(设计语义,旧数据 -50×2 = clamp 触底 ×0),09-13 调参批已拆除归零能力。沉淀 = fresh 池攻击链回归断言(无游戏数值变更)。
**Fix commit / PR**: 不适用(变更 = smoke/smoke_all.gd `_smoke_attack_chain_fresh_pool` + smoke/damage_probe.gd 探针)
**Verified by**: 2026-09-13 会话(damage_probe boss 模式 7/7 PASS + smoke_all 148/148)
**Closed by**: 用户授权任务(playtest-2026-09-12 报告 Top3 执行会话)
**Regression test**: `smoke/smoke_all.gd` `_smoke_attack_chain_fresh_pool`;`smoke/damage_probe.gd -- boss`(Run A fresh 池裸验 / Run B 墙行为实测)
**Status**: Closed
+62
View File
@@ -0,0 +1,62 @@
# Bug Report
## Summary
**Title**: grant_node_active 直调 stock、不经 _supply.notify_granted()——节点奖励完全绕开供给控制器计数
**ID**: BUG-0004
**Severity**: S4-Trivial(原报 Low;纯计数口径漏洞,零战斗数值影响)
**Priority**: P3-Backlog(本会话已修复并沉淀回归)
**Status**: Closed
**Reported**: 2026-09-12(playtest-2026-09-12-designer 报告 Bugs 表 #3)
**Reporter**: 用户(设计师本人,试玩报告);本档由 2026-09-13 会话按报告 Action Routing 建档并修复
## Classification
- **Category**: Gameplay(奖励经济计数口径)
- **System**: B4 奖励经济 × RewardSupplyController(可选类供给状态机)× C1 奖励节点
- **Frequency**: Always(每个 reward 节点必现——结构性)
- **Regression**: Yes——2026-09-11 供给控制器批引入 notify_granted 入账点时,关卡扩展批的 grant_node_active(更早)未同步接入
## Environment
- **Build**: 复核 = 2026-09-13 当前工作区(漏洞在位 → 本会话修复)
- **Platform**: PC · Win10 · Godot 4.7.2
- **Scene/Level**: 第一关 reward 节点(战×2 → 道具 → …)
- **Game State**: 节点奖励 roll 一件可选类直接入库
## Reproduction Steps
**Preconditions**: 任意到达 reward 节点的关卡流程。
1. `level_runner._enter_next_node` 处理 reward 节点 → `b4.grant_node_active(Vector2i(-1,-1), 0)`
2. grant_node_active 内部 roll 一件 damage_item/heal_pack 后直调 `stock(...)` 入库
3. `_supply.granted_count()` 不变——供给控制器对这次发放零感知
**Expected Result**: 「发放即获取」口径全通道一致——节点奖励与格子授予(`grant()`)同一入账点。
**Actual Result(修复前)**: 节点奖励绕过计数——供给控制器战斗域计数(首件保证/指数递减的入账基础)与 `supply_granted_count()` 观测面均漏记节点奖励,关卡级供给总量核算失真(原报:「结构性漏洞之一」)。
## Technical Context
- **Likely affected files**: `core/reward_economy.gd`(grant_node_active)
- **Related systems**: `core/reward_supply_controller.gd`(notify_granted 唯一入账点)、`core/level_runner.gd`(调用方)
- **Possible root cause**: grant_node_active 早于供给控制器批存在(2026-09-11 关卡扩展批),供给控制器批改造 grant() 入账时未覆盖此调用点——事实约定「发放即入账」未成文导致漏改(code-conventions 1.5 同款)。
## Evidence
- **代码审读(实锤)**:`core/reward_economy.gd` grant_node_active 直调 stock,无 notify_granted;对照 grant() 对 damage_item/heal_pack 发放必调 `_supply.notify_granted()`
- **修复**:grant_node_active 在 stock 受理成功(`inst is Dictionary`)后补调 `_supply.notify_granted()`——与 grant() 同一入账语义;失败路径(清库后拒绝)不入账
- **影响面评估**:供给计数器为战斗域(notify_battle_start 清零),节点奖励发生在战斗间——修复**零战斗数值影响**(下一战斗开战即清零,注入概率路径不变);收益 = 计数口径统一 + `supply_granted_count()`/遥测供给核算完整
- **回归断言**:smoke_all `_smoke_supply` 增⑦——`grant_node_active` 受理后 `supply_granted_count() == 1`(发放即入账;修复前该计数为 0,断言可抓原缺陷)
- **修复后验证**:冒烟 148/148 全绿
## Related Issues
- playtest-2026-09-12-designer 报告 Bugs 表 #3 / Top 3 Priorities #3(供给量重拍板 + 节点奖励纳入控制器)
- 报告根因分析「三个结构性放大器」第 1 条(节点奖励绕开控制器再放大供给量)
- **Top 3 Priorities #3 的另一半(供给量语义重拍板)不在本缺陷档**:「每战斗首件保证 → 关卡域首件保证」候选归 C3 裁决(列待拍板清单,本会话未动)
## Notes
- 报告 Top 3 #3 原文要求「grant_node_active 补 notify_granted 上报」——本档即该义务的执行与沉淀。
- 关卡域供给总量的观测:修复后 `supply_granted_count()` + 库存查询可完整重建「每关可选类获取账目」(格子授予 + 节点奖励 + 注入三通道),供 C3 供给量重拍板时直接消费。
## Closure Record
**Closed**: 2026-09-13
**Resolution**: Fixed——grant_node_active 补 `_supply.notify_granted()`(stock 受理成功后入账,与 grant() 同一口径);零战斗数值影响(计数器战斗域清零语义不变)。
**Fix commit / PR**: 不适用(非 git 管理;变更 = core/reward_economy.gd 1 处 + smoke/smoke_all.gd `_smoke_supply` ⑦ 回归断言)
**Verified by**: 2026-09-13 会话(smoke_all 148/148,含新回归断言)
**Closed by**: 用户授权任务(playtest-2026-09-12 报告 Top3 执行会话)
**Regression test**: `smoke/smoke_all.gd` `_smoke_supply` ⑦「节点奖励计入供给控制器(发放即入账)」
**Status**: Closed
@@ -0,0 +1,65 @@
# Playtest Report — Dungeon Sweeper 战斗阶段垂直切片
> 判定:**INCOMPLETE**(两次中断的试玩尝试,定性反馈未采集)· Review mode: lean(CD-PLAYTEST skipped — Lean mode)
> 技能:/playtest-report(analyze 模式,原始素材 = 本会话用户反馈 + 崩溃日志 + 仪器数据)
## Session Info
- **Date**: 2026-09-10 ~ 2026-09-11(两次中断的试玩尝试)
- **Build**: 垂直切片(拍板①–④落地版:atk=6 先手 / 两级奖励 / 库存关内延续 / 窗口单件)
- **Duration**: 未完成一场完整战斗(两次均在循环中途中断)
- **Tester**: 用户(设计师本人,唯一测试者)
- **Platform**: PC · KB+M
- **Session Type**: First time ×2(均为中断重试)
## Test Focus
战斗阶段完整循环:开战 → 挖掘/旗/停手 → 七段结算逐行兑现 → 胜负;含 2026-09-11 新机制(主角先手、即时奖励、库存延续)。
## First Impressions
- **未采集**——两次均未撑到可评估的时长。唯一间接信号:用户问"是否有图像"(程序化色块+文字的观感被注意到,属预期内的占位表现)。
## Gameplay Flow
### What worked well
- 核心循环链路本身可走通:挖掘、插旗、结算弹出、道具窗口、关卡过渡(第二场试玩已推进到"胜利→库存/HP 带入下一层"节点才崩溃)。
- 结算明细逐行输出正常工作(崩溃均发生在呈现层读数,流水内容无恙)。
### Pain points
- **崩溃 #1(High)**:第一轮结算弹道具窗口即假死——窗口数据缺 `round_index` 字段,弹窗构建崩溃但输入锁已上,游戏无声冻结。用户被迫中止。
- **崩溃 #2(High)**:胜利/关卡过渡时再次报错——`battle_finished` 信号发出前 `hero` 已被销毁,UI 读 `hp` 崩溃,结算覆盖层未显示。
### Confusion points
- 用户问"是不是设置了断点"——假死无任何提示,玩家无法区分"卡了"与"在等输入"。(呈现层崩溃静默锁输入 = 设计缺陷级体验问题,不只是代码 bug。)
### Moments of delight
- 未采集。
## Bugs Encountered
| # | 描述 | 严重度 | 可复现 | 状态 |
|---|---|---|---|---|
| 1 | 道具窗口数据缺 `round_index`,弹窗构建崩溃→输入锁死 | High | 是(固定流程必现) | ✅ 当日修复+字段契约断言入冒烟 |
| 2 | `battle_finished` 载荷缺 hero 状态(despawn 先于信号),胜利过渡崩溃 | High | 是(打到胜利必现) | ✅ 当日修复(载荷销毁前捕获)+冒烟适配 |
**共性根因**:呈现层与核心间"信号载荷/时序"契约未成文;GDScript 编译不查这两类错;冒烟从未执行 main.gd。防复发已登记为 D1 GDD 三条硬性要求(载荷 schema 成文 / 场景级 headless 测试 / 状态可见性规则)。
## Feature-Specific Feedback
### 全部新机制(先手攻击/两级奖励/库存延续/单件窗口)
- **未采集**——机制是否"可感受、可归因、有趣"没有任何用户输入。
## Quantitative Data(注意:来自自动玩家,非人类试玩)
- 蒙特卡洛 60 场(30 种子 × L1/L2,理性政策):胜轮均值 1.80、每轮承伤均值 2.1–2.7(max_hp=50 的 0–16%)、每场恰清图 1 次、败北 0。
- 与设计意图冲突:**多轮结算仪式感 / RAP 取舍 / 囤刀时机未获得发生空间**(B4 失衡预警⑥定量坐实)。
## Overall Assessment
- **Would play again**: 未采集(用户实际行为 = 两次遇崩即报,信任受影响——"写代码没检查依赖吗")
- **Difficulty / Pacing**: 未采集(人类视角);仪器视角 = 过易、过快
- **本轮试玩判定:INCOMPLETE**——循环完整性与 P2 归因("这个结果是我哪步扫雷带来的")这两个切片核心验证问题均未得到回答
## Top 3 Priorities
1. **修复后完整重跑一次试玩**(当前 build 冒烟 43/43)——采集首轮真正的定性反馈:归因清晰度、结算节奏、新机制手感
2. **难度带拍板**(C3 域):以期望表为靶(期望胜轮带/承伤占比),用 monte_carlo.gd 验算 knob 方案
3. **headless UI 冒烟**:真实实例化 main 场景跑完整对局——把"呈现层从未被执行"的盲区关死
## Action Routing(Phase 3)
- Bug ×2:已修复;如需正式追踪 → /bug-report 建档
- 平衡项(预警⑥)→ /balance-check + C3 期望表
- 设计变更:暂无(人类定性反馈为零)
- Polish:占位视觉 → 格子样张测试(art-bible 既有任务)
@@ -0,0 +1,93 @@
# Playtest Report — Dungeon Sweeper 战斗阶段垂直切片(第 2 次)
> 判定:**COMPLETE**(首次完整通关的真人局,定性反馈两条,均有遥测坐实)· Review mode: solo(CD-PLAYTEST skipped — Solo mode)
> 技能:/playtest-report(analyze 模式,原始素材 = 本会话用户口述 + playtest JSONL 遥测 + 代码/数据核对)
## Session Info
- **Date**: 2026-09-12 20:13(主分析局);20:41 辅助局(调参面板加成后)
- **Build**: 垂直切片 · 2026-09-12 五区改造批 + BUG-0001 修复前;数据 = v3 调参批(enemy.tres 18:05:atk 7/5/9/6/9、Boss 150)
- **Duration**: 完整一关(7 节点:battle×2 → reward → battle×2 → rest → boss,12 个结算轮)
- **Tester**: 用户(设计师本人,唯一测试者)
- **Platform**: PC · Win10 · Godot 4.7.2 · seed 42(固定种子)
- **Session Type**: Returning(第 3 次尝试,首次跑通全程——09-11 两局均被崩溃阻断)
## Test Focus
两条旧问题的复核:① 道具获取(治疗稀缺性 / 伤害:治疗 9:1 体感);② 难度曲线(到 Boss 房前满血)。
## First Impressions
- 未单独采集(用户直接进入两条旧问题反馈)。
## Gameplay Flow
### What worked well
- **核心循环首次完整走通**:挖掘 → 结算七段 → 道具窗口 → 关卡节点(reward/rest)→ Boss → level_end victory,全程无崩溃。09-11 报告的两个 High 崩溃与 BUG-0001 软锁家族未复现(BUG-0001 修复批 20:23 落地,主分析局在其之前——悬停路径未触发,属幸存而非验证)。
- 窗口 usable_now 投影工作正常:满血下治疗包全程禁选(usable_now:false),玩家实际行为 = 连续 skip,机制按设计执行。
### Pain points
- **P1(旧问题②):全关零承伤**——12 个结算快照 hero hp 恒 50/50,Boss 房前满血、Boss 战后仍满血。对照 C3 F4 目标带(普通场承伤 ≤20%、Boss 场 ≤50%):实测 0%,越带。详见「根因分析」。
- **P2(旧问题①):治疗包体感过剩**——Boss 战结束时库存 3 件治疗道具 + 已用 1 把小刀;用户体感"9:1 完全反过来"。实现核对结论:**9:1 配比实现正确,体感由三个结构性放大器制造**(见根因分析)。
### Confusion points
- 未采集。
### Moments of delight
- 未采集。
## Bugs Encountered
| # | 描述 | 严重度 | 可复现 | 状态 |
|---|---|---|---|---|
| 1 | **浅深度战斗零敌人**:两场真人局中 d0 战斗(20:13 还含 d1)`unit_count=0`、round 1 即 victory——遭遇骰/spawn 路径疑似缺陷(C3 Rule 8 区间 [unit_count, unit_count_max] 最小值 1,不应掷出 0) | Medium | 两次真人局均现(d0 100%) | 待查——建议 /bug-report 建档 |
| 2 | **Boss 攻击拍零兑现**:ogre_chief(pattern [attack, attack, charge, heavy])在两局中共 7 个存活结算轮,快照 beat 轮转正常(advance 在跑)但英雄血量纹丝不动——攻击链对该敌未生效(普通敌在 20:41 局 fresh 池轮正常承伤:d1 r1 −34、d3 r1 −9, ambush 乘区算术精确吻合) | High | 两局均现 | 待查——与下条根因共用一个探针 |
| 3 | (轻微)`grant_node_active` 直调 stock、不经 `_supply.notify_granted()`——节点奖励完全绕开供给控制器计数,关卡级供给总量失控的结构性漏洞之一 | Low | 结构性 | 待登记 |
## 根因分析(本次报告核心增量)
### 问题②难度:v3 调参为何无效
- **防御墙机制**:defense_up = stack 策略 × magnitude −50 × max_stack 2,池 clamp [−100, +100](settlement.tres)→ **同轮叠两层 = 100% 免伤**。它在**授予段生效、先于战斗段**——当轮挖到的减伤当轮即全额兑现。
- defense_up 权重 24/75 = 安全格池**最高**单行(32%/grant),每轮 7–14 安全格 × ~44% 授予率 ≈ 3–6 次 grant → 单轮叠满两层的概率常在 25–50% 区间;20:13 主分析局 12/12 轮零承伤。
- **结论**:v3 批选的主杠杆"atk +50%"是**乘在 ×0 上的调参**——墙不拆,任何 atk 曲线都无效。C3 F4 的 E[减伤] 估算(0.44 × 50% ≈ 22%)严重低估了 stack-to-clamp 的实际行为(实测 ≈100%)。
- **未闭合点**:20:41 辅助局 fresh 池轮普通敌正常承伤(−34/−9 精确吻合 ambush 算术),但 Boss 轮 fresh 池仍零承伤——"防御墙"与"Boss 攻击链缺陷"两嫌疑并存,**一次 instrumented headless 探针即可分割**(逐结算行打印 beat/atk.total/pool/d_tick)。
### 问题①道具获取:9:1 没有反,但体感是真的
- **配比核对(三路径全部正确)**:active_inject 池 knife_t1 60 / knife_adv 30 / heal_pack 10 = 9:1(reward.tres 89–93 行注释明示"治疗资源宝贵");grant_node_active 同池同比;B1 分流正确(即时类当场兑付、道具类入库)。
- **本局实测**:4 次可选类获取 = 3 治疗包 + 1 小刀(Boss r6 用刀后剩 3 治疗包——与用户口述完全吻合)。按 9:1 单次 10% 治疗率,该组合概率 ≈ 0.4%——但 **seed 42 固定**,这条 RNG 轨迹每次重开都原样重放,"反过来"的体感被逐次确认。
- **三个结构性放大器**(配比正确也挡不住):
1. **供给量**:09-11 供给控制器批把可选类从格子权重池改为"每战斗首件保证 + 指数递减"——每关 4 战斗 × 首件保证 + 1 奖励节点 + 递减重注 ≈ 4–5 件/关(P(≥1 治疗包) ≈ 40%),且节点奖励绕开控制器(Bug #3)再放大;
2. **满血累积**:难度零压力 → heal_pack 永远 usable_now=false → 只进不出堆在库存里,显著度极高;
3. **固定种子**:seed 42 让坏抽变成"每次都一样的坏抽"。
- **耦合结论**:问题①与问题②**互为放大器**——20:41 辅助局(有承伤)里奖励节点的治疗包在 70/100 时被立即使用。难度修好后治疗包消耗通道自然打开,体感问题预计大半自行消解。
## Feature-Specific Feedback
### 可选类供给控制器(09-11 批)
- 机制按设计运转(首件保证/递减/永不绝育均可在遥测中辨认);但"每战斗"首件保证在 4 战斗关卡结构下的总供给量是否偏离"治疗是稀缺奖励"的原始意图,**归 C3 重新拍板**(候选:首件保证升到关卡域、或 inject 池治疗行单独降权)。
### 难度(v3 调参批后复测)
- 承伤 0% vs 目标带 ≤20%/≤50%:**严重越带**;通关率 100% vs F5 基线带 40–60%:越带。与 enemy.tres v3 注释自认的"难度严重不足"一致——**调参后未复测即判定"已处理"是本问题拖延三轮的直接流程原因**。
## Quantitative Data(遥测实测,playtest_42_20260912T201317.jsonl)
- 12 结算轮 / 7 节点 / level_end victory;hero hp 全程 50/50;ambush_layers 恒 0;buffs[] 恒空。
- 敌情:d0/d1 空场;d2 bugbear 40hp(2 轮);d3 bugbear 18hp(2 轮);boss ogre 150hp(6 轮,beat 轮转 attack→attack→charge→heavy→attack,兑付伤害 0)。
- 输出侧:charge_dmg_a 7–14/轮,boss 逐轮 −21/−16/−53(含 clear_blast 40)/−16/−24/−20——**英雄输出正常,Boss 3–6 轮内可斩**。
- 可选类供给:4 获取(3 heal_pack + 1 knife_t1)/ 1 消耗 / 3 库存残留。
- 20:41 辅助局(调参面板 max_hp 100 + atk 加成):普通敌承伤正常(−34/−9),Boss 仍零承伤;治疗包在缺血时正常消耗。证明消耗通道与攻击链在普通敌上健康,Boss 路径存疑。
## Overall Assessment
- **Would play again**: 未采集(用户两轮即时反馈 = 高关注信号)
- **Difficulty**: 严重不足(0% 承伤,越带)——**非数值问题,机制性免伤墙 + 疑似 Boss 攻击缺陷**
- **Pacing**: Boss 战 6 轮偏拖(输出侧正常但无压力回报)
- **本轮判定:COMPLETE**——两个旧问题本轮均拿到机理级解释,不再停留在"感觉不对"
## Top 3 Priorities
1. **一次 instrumented 探针分割零承伤根因**:headless 逐结算行打印 beat / atk.total / hero_defense 池值 / d_tick——区分"defense_up 叠满墙"(设计变更)与"Boss/敌攻击链缺陷"(bug 修复)。**这是两问题的共同前置。**
2. **拆墙后重调难度带**:多种子 level_monte_carlo 对 C3 F4/F5 期望表复算(承伤 ≤20%/≤50%、通关率 40–60%),禁止单种子判定;v3 的 atk 值此时才第一次真正参与计算。
3. **供给量重拍板 + 节点奖励纳入控制器**:C3 裁决"每战斗首件保证"的总量语义(候选:关卡域首件);grant_node_active 补 notify_granted 上报;评估用种子轮换(seed 42 单轨迹不能作为平衡证据)。
## Action Routing(Phase 3)
- **设计变更**(防御墙语义:stack×2→clamp −100 = 免伤;候选改法:clamp 收紧至 −60/−70、乘法衰减、重击拍穿防)→ `/propagate-design-change design/gdd/b3-status-effect.md`(连带 B1 池 clamp 语义 + C3 F4 估算式修正)
- **平衡调整**(墙拆除后:atk 曲线/Boss hp/供给量对 F4/F5 期望表复算)→ `/balance-check`
- **Bug**(浅深度空遭遇 #1;Boss 攻击零兑现 #2;节点奖励绕过供给计数 #3)→ `/bug-report` 正式建档
- **Polish/观测**:治疗包满血堆积的呈现(现有 usable_now 禁选已正确,难度修复后观测残留量)→ 记入失衡预警②仪表(短缺半)
## 与既往报告的追踪关系
- playtest-2026-09-11(INCOMPLETE):Top2"难度带拍板"→ v3 批(09-12 18:05)只调了 atk、**未复测**→ 本轮证实无效 + 根因前置(防御墙)。状态:**未解决,根因收窄**。
- 治疗稀缺化(09-11 两级奖励批):配比 6%→inject 池 10%(9:1)**实现正确**;本轮体感失效根因 = 供给量 + 满血累积 + 固定种子,非配比。状态:**配比已解决,体感未解决,路径已明确**。
+1
View File
@@ -0,0 +1 @@
solo
+126
View File
@@ -0,0 +1,126 @@
# 会话状态:Dungeon Sweeper(扫雷 × 自动战斗,唯一状态源,每里程碑同步一次)
- **阶段**:Systems Design(`production/stage.txt` = Systems Design,2026-09-07 写入)
- **系统索引**:`design/gdd/systems-index.md`(20 系统,含门禁修正 + 2026-09-07 增补记录)
- **概念文档**:`design/gdd/game-concept.md`(含目标受众 + Visual Identity Anchor + 创意风险登记)
- **游戏支柱**:`design/gdd/game-pillars.md`(4 条,GDD 评审尺度)
- **原型**:概念原型 demo 已删除(2026-09-12,垂直切片承接);验证报告留档 `docs/prototype-report-minesweeper-battle-concept.md`(v3,verdict PROCEED)
- **引擎**:Godot 4.7.2 + GDScript(2026-09-07 锁定;`.claude/docs/technical-preferences.md` + `docs/engine-reference/godot/`;**MEDIUM RISK**——2026-09-12 `/setup-engine refresh` 逐条核实 4.5–4.7 官方迁移指南,无破坏架构契约项,current-best-practices.md 已建)
- **架构**:`docs/architecture/architecture.md` v1.0(2026-09-12 /create-architecture 产出,TD 自评 APPROVED WITH CONDITIONS;review-mode.txt = solo)
- **最近门禁报告**:`production/gate-checks/gate-check-systems-design-2026-09-07.md`
## 项目当前位置
1. 概念原型验证:v2 核心假设 CONFIRMED,v3 终验待做(与标错惩罚实测合并为一次会话),REPORT 已归档 PROCEED
2. `/map-systems` 完成:20 系统四层分解 + GDD 设计顺序 + 优先级
3. `/gate-check systems-design` 重审(2026-09-07):CONCERNS 无阻塞 → 登记级意见已清偿进 systems-index"门禁增补记录",stage.txt 已写入
4. **D2 已收口**:两轮 /design-review(full + 同日 re-review)+ 独立 delta 复核 5/5 PASS → **Approved**(2026-09-07)。A3 定稿回填 ActionEconomyTable(AP 8/旗 4/停手 ×2/清图 ×1),D2 Tuning Knobs 对应条目已按定稿删除义务移除,registry 已登记 `action_economy`,索引补齐 C2/B1/B4/C4←D2 四边
5. **A3 已收口**:GDD 全节已写入(`design/gdd/a3-action-economy.md`,Status: Approved 2026-09-07 三轮 re-review;评审日志 `design/gdd/reviews/a3-action-economy-review-log.md`),registry 已登记 `action_economy`
6. **A4 已收口**:两轮 /design-review(2026-09-08 full 8 阻塞 + 同日 re-review 6 阻塞,均同日核销)→ **Approved**(用户拍板 delta 核销免第三轮,A3 先例)。承重数学(厚度≤2【≡任意 3×3 窗口非全雾】/f≤8d/两态 AP/F1 谓词)经两轮对抗零动摇;承重规则不变(生成期布置约束 + 零特判 + fog unlock_level=2)。D2/registry/systems-index 三方已同步(跨字段校验 hide_numbers⇒safe_nonzero 致命、B4 三条定价硬约束、A1×15/A2×4/D1×2/B1 输入门禁登记全枚举)。评审日志:`design/gdd/reviews/a4-terrain-variation-review-log.md`(含两轮阻塞→修复对照表)
7. **B3 设计会话进行中(2026-09-08 启动)**:上下文预收集同日完成——① review mode = lean(review-mode.txt 不存在,取默认,与索引头部一致);② 引擎域 = Core,无引擎障碍(纯数据+回合逻辑,4.7 变更清单零交集;Core 零 UI 依赖、结算禁 await 为设计约束);③ **已锁事实不得默改**:己方限时增益跨轮次延续(按剩余结算次数)、不跨战斗【game-concept 2026-09-06】;三向效果映射(安全格→主角 buff/开雷→敌方增益/标中雷→怪物 debuff)【v3 定稿】;标中旗一次性兑付、资格以雷格实例为键、拔旗重插不恢复【A3 OQ5】;debuff 档位锚严格 > 最低档安全格 buff 当量、对照基准=连锁放大边际挖掘收益【A3 F1 条款 2】;安全格 buff/标中旗 debuff/清图奖励/敌方增益统一当量单一线性换算、B1 闭合 owner【A3 F1 条款 1】;安全格奖励有回合限制甚至一次性、扫雷只入库轮末结算、P2 要求结算明细标注来源;④ 数据承载 = D2 StatusEffectTable 占位行("buff 时限/叠层字段名",单行全局,owner=B3 回填);⑤ B3 为 Foundation 瓶颈系统,下游 B4/B1 未设计——接口契约需 provisional 登记(A3 条款 1/3/5 的 provisional 先例现成);⑥ 无 docs/consistency-failures.md;既往一致性检查 0 冲突
8. **B3 已收口(Designed,2026-09-08)**:GDD 全节已写入(`design/gdd/b3-status-effect.md`,12 节零占位;lean 门禁 systems-designer/qa-lead 已咨询;CD-GDD-ALIGN 按 lean 跳过)。定稿要点:战斗域统一状态容器(三向效果同构实例)· 单一结算次数量纲(先兑付后衰减)· 按行叠层三分支(stack 不触碰 R)· MVP 四行 attack_up/defense_up/ambush/weaken(**值全部 provisional;weaken vs A3 条款 2 锚预检不过——红色预警,B1 对照验收裁决**;用户拍板四行定稿权收编 B3、锚验收权留 B4/B1——A3 OQ5 修订已登记索引)。registry 已登记 `status_effect` + action_economy.referenced_by 增 B3;D2 Core Rules/Status 已回写;索引门禁增补记录已登记 B3 块(**B1×5 义务清单——B1 GDD 门禁评审缺项即 blocking**;EC9 reload gate B1 落点;ambush 量纲→B2)。下一步 = **A1 扫雷棋盘生成(设计顺序第 5 位,MVP)**——注意 A4 已登记 A1×15 验收清单 + B3 登记 ambush/weaken 锚供给义务,A1 GDD 门禁评审须逐项核对
## GDD 设计顺序(前 10 = MVP)
D2 数据配置 → A3 行动经济 → A4 地形变异 → B3 增益状态 → A1 棋盘生成 → A2 排雷玩法 → B2 敌人系统 → B4 奖励经济 → B1 战斗结算 → D1 HUD →(垂直切片:A5 → C3 → C2 → C1 → B5)→(Alpha:D3 → D4 → D5 → C4)→ D6
## GDD 写作纪律(制作人门禁意见)
- 每个 MVP 系统 GDD 一次会话完成:决策定稿 + 可调参数 + 事件接口,不写 20 页完美文档
- 总监修正意见已按系统登记在 systems-index"门禁修正记录",写对应 GDD 时落实
<!-- CONSISTENCY-CHECK: 2026-09-08 | GDDs checked: 3 (d2/a3/a4) | Conflicts found: 0 | drift write-back EXECUTED (D2 Core Rules VariationTable row, same day) | Report: docs/consistency-report-2026-09-08.md -->
<!-- CONSISTENCY-CHECK: 2026-09-08 (B3 定稿后定向) | GDDs checked: 4 (d2/a3/a4/b3) | Conflicts found: 0 | drift write-back EXECUTED ×2 (D2 Tuning Knobs 三值删除 + B3 Overview 收编括注, same day) | Report: docs/consistency-report-2026-09-08-b3.md -->
<!-- CONSISTENCY-CHECK: 2026-09-09 (A1 定稿后定向) | GDDs checked: 5 (d2/a3/a4/b3/a1) | Conflicts found: 0 | drift write-back EXECUTED (D2 Dependencies 表 A1 行补 BoardGenTable 回填, same day) | Report: docs/consistency-report-2026-09-09-a1.md -->
<!-- CONSISTENCY-CHECK: 2026-09-09 (B4 定稿后定向) | GDDs checked: 8 (d2/a3/a4/b3/a1/a2/b2/b4) + game-concept 专查 | Conflicts found: 2 🔴 + 2 ⚠️ + 1 ℹ️ (全部同日修正: B4 错引条目名/义务编号 ×4 处 · game-concept 主动道具 MVP 激活 + Peglin 口径注记 ×2 处 · terminology 资格格登记) | drift write-back EXECUTED (same day) | Report: docs/consistency-report-2026-09-09-b4.md -->
<!-- B3 定稿回写已执行(2026-09-08 同日):registry status_effect 新条目 + action_economy.referenced_by 增 B3 + D2 Core Rules/Status 两处 + systems-index 两处(B3 进度行 + 门禁增补记录 B3 块) -->
9. **Task: Designing a1-board-generation GDD**(2026-09-08 启动)· File: `design/gdd/a1-board-generation.md`
10. **A1 已收口(Designed,2026-09-09)**:GDD 全节已写入(12 节零占位,~405 行;lean 门禁 systems-designer/qa-lead 已咨询;CD-GDD-ALIGN 按 lean 跳过)。定稿要点:五阶段确定性生成管线 · inferability = 免赌开据占比(F1 三通道 + 雾元知识信息源 + 次序无关 + metric_version)· clearable 合法性闸与质量度量两闸分离 · 验收三分支(达标即出/接受最优/**零合法接受最不坏**——用户定稿玩家永不卡死)· F4 批量红线**严格零**(用户定稿)· BoardGenTable 九字段回填(首个进度键表,solver_rules 冻结,参考行 provisional 归 C3)。registry 已登记 `board_gen_table` + action_economy.referenced_by 增 A1;D2 两处回写;索引门禁增补记录 A1 块(**A2 双包含回验——A2 GDD 门禁缺项即 blocking**;B1 对账消费 actuals p10 非 target;F4 全量工具与 D2 OQ5 同批排期;黄金向量第二人复核)。**下一步 = A2 排雷玩法规则(设计顺序第 6 位,MVP,瓶颈系统)**——硬输入:A3 事件契约(round_end 双发射源/try_spend/last_round_end)、A4×4 验收清单、A1 双包含回验 + 产物消费、标错惩罚待原型小补丁实测后关闭(CD 门禁:可与原型 v3 终验合并会话)
11. **A2 已收口(Designed,2026-09-09)**:GDD 全节已写入(`design/gdd/a2-minesweeper-rules.md`,12 节零占位,365 行;lean 门禁 systems-designer〔Formulas F1–F4〕/qa-lead〔AC 22 条 + 覆盖矩阵 + 夹具坐标规格〕已咨询;CD-GDD-ALIGN 按 lean 跳过)。定稿要点:纯规则引擎(三事件回边 cell_revealed/flag_judged/round_end 发射面封闭 · 零随机/零表读取/零 UI,headless 解耦)· 初始展开 = R₀ 恰等(双包含两臂构造性成立、A1 回退口径不触发;免费/计入清图/无奖励——A3 EC5 委派落点)· 批次语义序仲裁(cleared-dig→stop→其余;A3 EC4 四组合 deferral 在 A2 冒烟兑现 AC-10)· 旗单态轮末判定诚实重复上报(去重归 B1/B4)· 已引爆雷格可通行(工程债核销 AC-15)· install 四不变式。**🔴 反例 B 阻断缺口(systems-designer 发现、主会话独立复算证实)**:A1 布雷数下限拦不住"初始展开即 cleared"退化板(8×8 幸存距离-2 雷 → R₀=S;N=1 行 100% 退化、断言 A 零拦截)——登记 **A1 修订义务**(F5 legality 增 R₀≠S + F4 断言 + 排除域基准措辞;A1 已 Approved 走接口漂移)+ A2 侧不变式④纵深防御。registry 已登记 `a2_event_surface` / `a2_initial_expansion`;systems-index 已登记 A2 门禁块(**A1 修订义务 + B1×3 + D1×1 强制项**;标错惩罚 OQ1 在位——/design-review 核对项)。**下一步 = B2 敌人系统(设计顺序第 7 位,MVP)**——硬输入:B3 单敌假设回验(定多敌即触发 target_ref 接口漂移补列)、ambush 量纲定稿义务(registry anchor:"+3" 单位候选"每颗已开雷伤害加成",联动 A3 F1 条款 3 上限表值)、EnemyTable 回填(D2 占位:词条/意图可见性字段)
12. **B2 已收口(Designed,2026-09-09)**:GDD 全节已写入(`design/gdd/b2-enemy-system.md`,12 节零占位;lean 门禁 systems-designer〔Formulas F1–F4〕/qa-lead〔AC 17 条 + 覆盖矩阵 + 缺口预检 7 项〕已咨询;CD-GDD-ALIGN 按 lean 跳过)。定稿要点:多敌模型(1–3 同敌种,B3 单敌假设回验不成立→side-wide 零接口变更兼容 + target_ref 扩展位)· HeroTable 新增(接口漂移,atk=0 机制开关)· 意图视觉推测型(CD 承重项:图像线索稳定可学/每 run 恒定/结算明细数字兑现)· Peglin 行为环(attack/charge/heavy MVP,双敌种 grub/ambusher 双环,死亡即不动手 + 同步轮转定理)· 伏击量纲定稿(registry OQ2 关闭:每攻击类行为 +3 HP、charge 零兑付)· cap=4(反灾难护栏;旧 8 溢出协议死码废弃)· 条款 3 单结算自然边界(用户定稿)。registry 已登记 enemy/hero/clause3_supply 三条目 + status_effect 两注记 + terminology 六词条;D2 三处回写(Core Rules 表 EnemyTable/HeroTable 行 + Dependencies 行 + Status);索引 B2 进度行 + 门禁增补记录 B2 块(**B1×6/D1×4 义务清单——B4/B1/D1 GDD 门禁评审缺项即 blocking**)。**下一步 = B4 奖励与道具经济(设计顺序第 8 位,MVP)**——硬输入:A3 F1 条款 2 锚(weaken 档位严格 > 最低档安全格 buff 当量)+ A4 三条定价硬约束、奖励身份预读(B3 义务)、伤害道具默认目标消费(B2 固定顺位)、HeroTable.atk 激活裁决参与、高光兑现节点条目化(B1/B4 共担)、clear_reward 源授予路径确认(B3 OQ4)
<!-- CONSISTENCY-CHECK: 2026-09-10 (B1 定稿后定向) | GDDs checked: 9 (d2/a3/a4/b3/a1/a2/b2/b4/b1) + registry 专查 | Conflicts found: 1 🔴 (B1 内部 AC 编号误引 ×9 处——同日修正) + ℹ️ documented-exception(B3 正文 weaken −25 ×4 处/索引历史块 ×1——registry F0 回执"正文不改以本条为准"收编先例覆盖) | drift write-back EXECUTED (same day) | Report: 本会话内联报告 -->
<!-- B3+A1 定稿回写已执行:registry(status_effect / board_gen_table 新条目 + action_economy.referenced_by 增 B3/A1)· D2 三表行 + Status 行 · systems-index(B3/A1 进度行 + 门禁增补记录两块)· 本文件(条目 8/10) -->
13. **B4 已收口(Designed,2026-09-09)**:GDD 全节已写入(`design/gdd/b4-reward-item-economy.md`,12 节零占位,354 行;lean 门禁 systems-designer〔Formulas F1–F6〕/economy-designer〔权重参考行 + 失衡预警清单〕/qa-lead〔AC 21 条 + 覆盖矩阵 + 缺口预检 9 项〕已咨询;CD-GDD-ALIGN 按 lean 跳过)。**会话注记**:另一会话并行写入 E/F/G 三节与本会话冲突,经用户裁决本会话接管收尾——E 节按"照常消耗"拍板合并(覆盖并行稿"拒绝不消耗"条目)、F/G 两节保留并行稿。定稿要点:install 期身份预分配(roll_board 恰一次、Ready 只读)· 道具使用窗口 MVP 激活(段序骨架 = 授予→增益/减益→道具→战斗→衰减→判定)· 库存战斗域(battle_over 全清)· 道具伤害恒定表值(attack_up 死行、A3 条款 2 锚参照迁移 defense_up)· F5 保底草稿重 roll · E 节两项拍板(照常消耗 / 清图槽允许 buff 行)。registry 已登记 reward_table + 三处漂移改写;D2 六处回写;索引 B4 进度行 + 门禁增补记录 B4 块(**B1×6/D1×3 义务清单缺项即 blocking**;缺口预检 2 阻塞级 deferral 至 B1)+ 分层行 B4←D2 + B3 块 EC8 错号修正。**下一步 = B1 战斗结算规则(设计顺序第 9 位,MVP 瓶颈系统)**——B4 定稿解锁:胜利路径先决已备(B2 Overview 声明的解药);硬输入:B1 义务清单累计 **B3×8 + B2×6 + A2×3+2 + B4×6**(全缺项即 blocking)、weaken 锚红警裁决(B3 OQ1 归一口径前置)、A3 F1 条款①–⑤闭合 owner、A4 硬约束②③对账、EC8 reload gate 落点、事件总线载体裁决(TD 门禁 2026-09-07 登记)
14. **B1 已收口(Designed,2026-09-10)**:GDD 全节已写入(`design/gdd/b1-settlement.md`,12 节零占位,628 行——项目最大 GDD;lean 门禁 systems-designer〔Formulas F0–F5 + 对账义务清单〕/qa-lead〔AC 43 条 + 覆盖矩阵 + 缺口预检 12 项〕已咨询;CD-GDD-ALIGN/art-director 按 lean 跳过留人工复核注记)。定稿要点:**编排唯一性**(B2/B3/B4 战斗域 API 唯一调用方 + 可回放步骤流〔结算禁 await——D2 AC-15 兑现落点 AC-33〕+ 零随机)· **结算触发 = Waiting 相位编排点**(不依赖事件到达序——A2 义务①)· **段序骨架**(授予→窗口〔授予段后〕→增益/减益→道具→战斗→衰减→判定——B4 义务①原文)· **23 条上游义务全落位**(B3×8/B2×6/A2×3/B4×6,AC 覆盖矩阵 23/23,引用带清单限定词)· **F0 归一口径裁决**(瞬时当量;weaken −25→值域 [60,85]/默认 −65——B3 红警关闭)· **条款①③⑤闭合首版验算**(条款③默认通过、满配 unit_count=3 破线→C3 约束;条款⑤两态通过+保守地板缺口登记;actuals p10 交付后强制重跑)· **高光双落**(#2 完美排雷 ×P_perfect 默认 ×2 / #3 标中旗 highlight——用户拍板)· **战斗段短路**(hero hp=0 即中止——用户拍板)· SettlementTable 七字段回填(三行致命 manifest)。回写已执行(用户批准):registry 新增 settlement_table/clause5_dominance + 四处接口漂移(weaken 值/anchor_warning F0 回执/clause3_supply 闭合/board_gen 消费回执)+ 三处履行回执 + terminology 五词条;systems-index B1 进度行 + 门禁增补记录 B1 块(**D1×3 义务清单缺项即 blocking** + C3 消费注记 + UX Flag + ADR 裁决项×2);D2 SettlementTable 行回填。**下一步 = D1 HUD 与界面框架(设计顺序第 10 位,MVP)**——硬输入:全项目最大呈现义务台账(A2×6/B2×4/B3×4/B4×5/**B1×3**)+ art-bible §1–4 创建门禁(最晚 D1 GDD 前)+ 事件订阅呈现刷新面 + UX Flag(结算屏/道具窗口前置 /ux-design)
15. **垂直切片启动(2026-09-10,/vertical-slice Phase 3 检查点)**:概念名 **dungeon-sweeper**,目录 `prototypes/dungeon-sweeper-vertical-slice/`(用户已确认开工)。**验证问题**:玩家从零开始一场战斗,能否无指导 10 分钟内经历完整「开战→挖掘规划→轮末结算逐行兑现→胜/负」循环并逐行归因(P2)——以及能否按 GDD 约束(表值单点/RNG 封闭/结算可回放/Core headless)5 个工作日内以代表性质量建完。**范围内系统**:D2(9 表)· A1(含 single_subset 求解器 + 双判据验收,用户拍板完整验收)· A2 · A3 · A4(迷雾)· B1 七段编排全量 · B2 双敌种 · B3 四行 · B4 install 预分配+窗口 · D1-lite 程序化呈现(art-bible 明亮风)· encounter 直供两场(L1×grub / L2 雾×ambusher)。**裁剪**:A5/C1–C4/B5 动画/D3–D6/A1 黄金向量与 F4 批量工具/gdUnit/标错惩罚/多战连续。**架构基线**:docs/architecture 不存在——CLAUDE.md 约定 + D2 Rule 1/2/5/6/7 为事实控制清单(切片头注登记;正式 /create-architecture 留切片验证后)。**成功判据**:①无指导完整战斗≤10min ②逐行归因 ③headless 回放逐行相同+冒烟<30s ④Core 零 UI/零数值字面量 ⑤第 3 日循环可演示 ⑥硬时限 5 个工作日。当前阶段:**Phase 4 — Implement(Day 1)**。速度日志:Day 1 开工。
## 垂直切片速度日志(/vertical-slice,2026-09-10 启动)
- **Day 1(2026-09-10)**:上下文加载(9 份 GDD + registry + 原型)→ 范围确认(用户拍板全量范围 + A1 完整验收)→ 全部核心代码一次性落成(D2×9 表 + ConfigDB + RngService、A1 求解器与五阶段管线、A2/A3/B1–B4、D1-lite 呈现、冒烟框架)→ headless 冒烟迭代 7 轮修错后 **39/39 全绿(约 3 秒)**:表加载校验、R2 黄金向量 5/5、A1 双判据+确定性、两遭遇全战斗 3 轮终局、结算步骤流回放逐行相同。**修掉的关键 bug**:① B4 换图后 Retired 相位拒绝重 roll ② A2 `_do_dig` 对闭包全量发事件(应只发 O′∖O——重复奖励行根因)+ chain_size 口径 ③ B1 轮末最后一挖事件被相位守卫丢弃 ④ GDScript 不允许 Dictionary==bool。**重大设计发现**:A1 参考行 d0.10/0.12 经先布后删后仅幸存 2-3 雷、R₀/|S|≈0.97、残余挖掘 2-4 格(掘近退化板,推理率门槛不可见)——切片临时调参 d0.25/t0.88(数据 + 工具 `smoke/experiment_density.gd` 留档,README 登记表)。
- **状态**:循环可演示(Day 1,远早于 Day-3 检查点)。**下一步 = Phase 5 playtest**(用户跑 F5 人工试玩 → 按 vertical-slice 技能问询 → Phase 6 报告)。
16. **2026-09-11 拍板四条落地(切片程序调整完成)**:① atk 恒存在([1,999] 拒 0、MVP=6、战斗段主角先手、attack_up 唯一修正——attack_up 死行复活)② 奖励两类(即时 75% 五类法 {buff,instant_aoe,instant_heal} 当场兑付 / 可选 25% 入库走窗口、heal_pack w6 p12)③ 库存关内延续(battle_over 不清、level_clear 清、UI 关卡模式共享 B4+HP 延续)④ 窗口至多一件(核心截断+文案)。实现主体由并行会话完成,本会话核对补缺口:settlement source_label_map 键去重(hero_action→hero_attack)、config_db required_sources 增 hero_attack、窗口文案、冒烟加 4 条拍板断言。**冒烟 43/43 全绿**;dump 验证:主角攻击 9=6×1.5、减伤叠满免伤轮、dur=1 当次衰减、治疗包入库、伏击 cap4 溢出行。**待办**:五项 GDD/registry 回写(README"2026-09-11 拍板"节全列);playtest Phase 5 仍未做(用户试玩曾因窗口字段 bug 中断,已修)。
**更正(同日)**:条目 16 所列"待回写 GDD/registry 清单"作废——用户已在文档会话先行完成全部回写(b1/b2/b4 GDD、registry、systems-index、d2、game-concept、b3 的 2026-09-11 批),程序调整即以该批文档为依据。本会话完成的是:程序与文档的逐项对齐核查(五类奖励/75-25 权重/heal_pack w6 p12/库存关卡域/窗口单件含"取首件+诊断"/hero_attack 来源值/锚参照回迁 attack_up/reward tier 行集),README 已改记为"文档对齐核查记录"。冒烟 43/43 维持有效。
17. **垂直切片教训 → D1 GDD 设计输入(2026-09-11 登记,D1 GDD 门禁评审核对项)**:切片试玩两起呈现层崩溃(窗口条目缺字段 round_index / battle_finished 发出后读已销毁的 b2.hero)暴露系统性盲区——已定稿 AC 全部覆盖 core 层,D1 呈现层无测试承载,且 GDScript 编译不查字典字段与时序。**D1 GDD 三条硬性要求(缺项即 blocking)**:① 每个面向呈现的信号载荷成文 schema(对齐 A2 三事件先例,字段清单入 GDD)② 场景级 headless 测试进 AC(真实实例化 UI 场景 + 驱动完整对局 + 断言零脚本错误;切片的 headless UI 冒烟为其原型)③ 信号时点状态可见性规则(销毁前捕获、载荷数据自包含、禁止呈现层回读核心生命周期状态)。另登记:gdUnit4(D2 OQ1)若引入,UI 场景测试以此为载体。
18. **战斗期望值现状核查 + 实测(2026-09-11,用户问询触发)**:文档侧——**"期望胜轮数 / 期望每轮承伤 / 期望败北轮数"无任何直接设定**;最近的三个既有数字全部过期:① B4 刀供给方向预检(2026-09-09:击杀需求 18/54、供给≈2|资格格|)基于旧权重与"无基础攻击"口径未重算 ② B1 F5 Δr(清图轮数 L1≈2/L2≈4)基于旧密度参考行 ③ B1 E_dig=7.2(旧权重 40/25/35)。C3(难度曲线,此类期望的正当 owner)未开始设计。**实测(smoke/monte_carlo.gd,30 种子 × L1/L2,理性政策)**:胜轮均值 1.80(L1 {1轮×6, 2轮×24} / L2 {1×7, 2×22, 3×1});每轮承伤均值 2.1–2.7、整场承伤中位 0–8(max_hp=50 的 0–16%);每场开安全格 7–8、**每场恰清图 1 次**;败北 0。解析锚:零增益击杀地板 = ⌈18/6⌉ = 3 结算,单层 attack_up → 2 结算。**预警⑥定量坐实:战斗长度与承伤均远低于可玩带,难度杠杆余量巨大**。登记:① C3 GDD 设计输入 = "战斗期望表"(期望胜轮带/期望承伤占 max_hp 比/期望开格数/败北轮期望,按 (L,D) 曲线)为强制章节 ② B4 预检 + B1 E_dig/F5 重算义务随 2026-09-11 批触发 ③ smoke/monte_carlo.gd = C3 调参期战斗侧批量工具原型(对应 A1 F4)。
19. **垂直切片 v2——第一关完整关卡(2026-09-11,/vertical-slice 扩展批)**:用户拍板线性第一关(无路径分支):**战×2 → 随机主动道具点 → 战×2 → 血量恢复点 → Boss 房**,同步进入数值设计(元进度模拟)。落地:① **LevelTable**(新表 `level.tres` + schema——线性节点链数据位,节点 enum {battle,reward,rest,boss},末节点必须 Boss;ConfigDB 挂表 + 跨表校验⑧"battle/boss 节点 (L,D) 在 board_gen/enemy 有精确行")② **C1-lite 推进器** `core/c1_level_runner.gd`(关卡域生命周期 owner:共享 B4 + HP 携带 + 节点兑付 + 关卡末 level_clear + 测试面板 hero 覆盖;Core 零 UI 依赖)③ **B4.grant_node_active()**(接口漂移登记——可选类活行 roll 一件入库,reward_roll 恰一 scope)④ **B2 spawn max_hp 修复**(原 max_hp=hero_hp 入参压扁携带 HP——恢复点/治疗包满血守卫失效)⑤ EnemyTable L1 深度轴 D0–D4(蛆虫24×1 / 蛆虫群24×2 / 伏击兽36·atk6 / 伏击兽群26×2 / Boss 遗迹守卫130·atk7·环[A,A,C,H])⑥ BoardGen D1–D4 行(D0/D1 10×10、D2-D4 12×12;**d0.28/t0.87 不达标降级告警 best≈0.81 已回退 0.25/0.88**)⑦ UI:节点进度条 + 奖励/恢复覆盖层 + **测试用角色数值调整板**(atk%/hp% 0–300 滑条 + 批量模拟——与 headless 扫描同口径 `smoke/level_autoplay.gd`)。工具:`smoke/level_monte_carlo.gd`(atk%×hp% 网格扫描:通关率/承伤期望/败北节点分布——C3 关卡侧批量工具原型)+ `level_debug.gd`(单关诊断)。冒烟 55/55(新增关卡 10 断言:满配通关/裸装败北/奖励点入库/恢复点公式/Dmax 解析/关卡回放确定性/hero 基线恢复)。**首版调参实测**:敌 HP 208 时基线通关率 73%——预警⑥关卡尺度坐实,v2 上调至 290 后复测中。**登记**:A4 迷雾 unlock_level=2 纪律遵守(L1 全程无雾);GDScript 多行 lambda 内嵌 match 解析不可靠(信号处理体一律静态方法+bind);冒烟两断言错误教训(level_clear 快照=清库前计数/恢复点公式须用生效 max_hp)。**v2 复测**:基线 55% 通关 / +50% 70% / +100% 100% / +100%hp 100%——"数值提升→通关期望改善"曲线成立(数据见切片 README)。
20. **Playtest 三缺陷修复 + 奖励期望汇报(2026-09-11,用户 F5 试玩反馈批)**:**缺陷① UI 抖动**——悬停文案换行推挤侧栏布局、"第 N 轮"库存行被挤出视口;修复 = 侧栏全部动态区固定槽高 + clip_contents(区域独立、超长裁剪不回流)。**缺陷② Boss 战 AP 用完不结算(软锁)**——根因 = **A2 核心 bug(v1 即存在)**:`_do_flag_place/_do_flag_pull` 花完末点 AP 后 A3 翻 Waiting 但不发 round_end,B1 的 Waiting 结算点依赖该事件 → 永不结算;v1 冒烟盲区根源 = 自动玩家不用旗。修复 = 旗动作补发 `_emit_round_end_flags_and_payload()`(与 `_do_dig` 同款);正式侧义务 = A2 GDD F4 事件序契约补"旗动作路径 round_end 发射"(接口漂移)。**新增测试载体**:`smoke/ui_click_probe.tscn` 行为探针(合成鼠标事件走真实 UI 路径,随机混合插旗/拔旗/停手/窗口期刷新/无效点击——4 种子全关通扫);smoke_all 加旗动作耗尽 AP 回归断言。连带:L1 12×12 板 max_gen_attempts 16→24(16 次偶发接受最优 best≈0.85–0.87)。**奖励期望汇报(只汇报未改值)**:每资格格 P(可选类)=25%;实测每关合计 ≈24.8 件(≈18.5 刀)——"道具期望太高"定量坐实。工具 `smoke/reward_expectation.gd`。
21. **可选类供给控制器(2026-09-11 用户拍板批——伪代码审阅后落地)**:用户重新定义三尺度指标——**格 <0.01 / 板≈0.78 / 战斗期望≈1(首件保证 + 指数递减)**,可选类退出格子权重池。拍板四条:① 注入占比小刀 60/精工 30/**治疗包 10**(治疗宝贵)② 清图奖励改**一次性高额伤害**(clear_blast instant_aoe 40——不入库不占供给,清图与可选类脱钩;首图清图必得=注入格必被打开的自然推论)③ 注入选格**均匀随机** ④ **指数递减**(active_p0=0.4/active_decay=0.5,RewardConfigTable 新参数)。**实现结构(对象封装,回应用户架构批评)**:新类 `RewardSupplyController`(B4 私有组合件:notify_battle_start/should_inject/notify_granted/granted_count;行值快照抗热重载;零自有随机数)· B4(_supply 组合/notify_battle_start 转发/roll_board 重写删 F5 循环/grant 挂钩"发放即获取")· B1(begin_battle 调 b4.notify_battle_start)· 表(reward.tres 三刀行移 active_inject 池 60/30/10 + clear_blast;k_dmg=0 F5 休眠)· 护栏(clear_no_value 含即时类/no_damage_row 扫全池/inject_pool 新护栏)。**实测**:注入 1.00/板 + 占比 60/30/10 + 零泄漏(N=200/深度);**实际获取 ≈0.68–0.91 件/战**(<分配保证 1.0 的机理 = 注入格均匀随机可能落残余格/速杀未挖区,攻击越高速杀越明显;**"战斗末 j==0 补发 1 件"兜底待用户拍板**);每关合计 ≈4.5–6.5 件(原 24.8)✓。冒烟 74/74(+14 供给断言:首件保证恒真/递减统计/占比/清图新语义/发放计数/战斗重置)。行为探针复扫通过(通关剩余道具 ×1——原 ×9)。**⚠️ 供给侧副作用(扫描发现,待拍板)**:可选类退出格子池释放的 25% 概率质量被动流向即时类——buff 每格频率 44%→59%,基线通关率 55%→80%、承伤 127→80,难度方向反了;"每格必有货"锁定下无法引入空白格,候选杠杆 = ①敌 HP 对冲(C3 主杠杆)②压 attack_up/defense_up 相对权重 ③降 buff 幅度(触 B3 表值)。**正式侧义务**:B4 GDD F5 章节修订 + registry reward_table/reward_config 改写(接口漂移批)。
22. **缺陷④ 道具使用后不消失(2026-09-11 用户 playtest 反馈批)**:可用次数语义本身存在且正确(`b4.use()` 一次性标记 Used 不可逆,库存过滤 InStock)——真实根因 = **UI 层契约违例**:B1 窗口选择语义 = `_window_items` 位置(义务④"选定序"),UI 选用按钮传 `item.index`(库存数组句柄);未消耗过时二者巧合相等,消耗过一件后句柄=位置+已耗数错位 → 选中件不消耗、邻件被误耗(Boss 战道具多、多次消耗后暴露)。修复 = UI 与行为探针统一传窗口位置;行为探针加"选用必生效"断言(选中件库存态必须变 Used,失效即退出码非零——种子 7/23 实测生效 1/2、失效 0)。冒烟 74/74 维持。**登记义务**:B1 义务④"选定序"在 GDD 中补一句"选择序列元素 = 窗口条目位置、非库存句柄"(防正式实现复发)。
23. **缺陷⑤ 数值调整板被遮挡 + 专属测试补建(2026-09-11 用户质询批)**:用户质询"调整板没实现/没测试"——实现存在(含批量模拟),但**层级 bug 使其不可见**:调整板覆盖层位于不透明开始覆盖层之前(场景树序),打开时未隐藏开始层 → 面板被完全遮住 = "点击无反应"。修复 = `_show_tune_panel` 隐藏开始层 / `_close_tune_panel`(含"应用并关闭")恢复;顺带删除重构引入的重复函数定义(同名 parse error)。**专属测试补建**:`smoke/ui_tune_probe.tscn`(场景级全链路 7 断言:打开可见性〔缺陷⑤回归〕/ 滑条→生效预览联动 / 应用写 hero 表 12/75 / 重置回 6/50 / 批量模拟 N=10 全链路〔通关率+败北节点输出〕/ 关闭回开始界面 / 加成跨模式持久)——PASS。全量回归:冒烟 74/74、ui_probe PASS、行为探针种子 7 通过(选用生效 1/失效 0)。**教训登记(D1 GDD 输入④)**:覆盖层堆叠顺序 = 呈现层隐形缺陷高发区("功能存在但不可达"),任何模态覆盖层必须有"打开时遮挡物隐藏"的场景级断言;此三类缺陷(①②⑤ 呈现时序/层级 + ④ 呈现契约)全部漏过既有 AC——呈现层场景测试从"建议"升级为切片标配(ui_probe/ui_click_probe/ui_tune_probe 三探针)。
24. **呈现层模块化重构(2026-09-11 用户批——"上帝对象"拆分)**:用户工程师视角否决 main.gd ~1100 行上帝对象。拆为 **9 个单一职责单元**(presentation/views/ + hud_presenter.gd):BoardView(棋盘渲染+输入意图翻译,只读 A2、动作信号外发不碰核心写)· HUDView(侧栏纯视图,setter + 定长槽 clip)· HudPresenter(静态装配器:核心只读面 → 文案,含 outcome_text 三源拒绝映射)· BattleLogView(13 类行协议格式化全内聚)· ItemWindowOverlay(窗口;"选择=窗口位置"契约的呈现侧收口)· NodeOverlay · LevelStripView · TunePanel(自持加成语义 + 批量模拟,awaitable run_simulation)· UiKit。**组合根纪律**:main.gd 433 行(原 ~1100)= 模式流转 + 信号接线;核心写调用(settle_batch/submit_window_selection/runner 推进)唯一发生在组合根。三探针同步迁移到新结构(探针即呈现层契约的活文档)。**回归**:冒烟 74/74 · ui_probe/tune_probe PASS · 行为探针种子 7/23 全通关(选用生效 1/2、失效 0)。**遗留改进位(登记不阻塞)**:调试两层模式的历史入口仍在 main(C2 落位时退役);HudPresenter 为静态装配器,正式 D1 可演进为信号驱动。
25. **Core 层领域命名批(2026-09-11 用户问责 → AskUserQuestion 拍板)**:用户质询 core/ 的 a1_/b1_/c1_ 前缀命名("规范缺失还是能力不足")。**定性**:ID 前缀 = 跟随 GDD 文档名的事实约定(意图 = 设计↔代码追溯),但从未成文、且同目录 board_data/config_db/rng_service 无前缀——两套命名并存即规范缺失铁证。**拍板 = 改领域命名**:8 文件机械更名(a1_board_generator→board_generator、a2_board_rules→minesweeper_rules、a3_action_economy→action_economy、b1_battle_orchestrator→battle_orchestrator、b2_unit_container→unit_container、b3_status_container→status_container、b4_reward_economy→reward_economy、c1_level_runner→level_runner),类名同步去前缀(BoardGenerator/BattleOrchestrator/LevelRunner…),.uid 随行保资源身份;全项目 .gd 引用(15 文件)批量替换;每文件头注新增「实现 GDD:design/gdd/<id>-<slug>.md(系统 ID Xn)」溯源行——**系统 ID 退役出代码命名,保留为文档/registry 追溯锚**。**规范成文**:CLAUDE.md 新增「代码命名规范」节(领域命名禁止 ID 前缀 / 头注溯源义务 / D2 schema 与 autoload 豁免 / 文档层夹具名不受约束)。**回归**:残留引用 grep 清零 · 冒烟 74/74 · 三探针全 PASS(含行为探针选用生效 1/失效 0)。
26. **代码规范成文 + CLAUDE.md 必读门(2026-09-11 用户拍板)**:用户令将全部已指出的陋习总结成规范文档。落地:**`docs/code-conventions.md`**(新建)——六类纪律(结构:禁上帝对象/类封装/依赖单向/领域命名/禁事实约定;契约:信号事件成文与发射完整性/标识符语义单一/覆盖层层级/状态字段显式;测试:场景探针标配/打开可见性断言/缺陷沉淀回归断言/提交前全量;语言:GDScript 六条实战坑;数值:口径显式/先测后调/跨尺度推演/拍板零发挥;流程:伪代码审阅→实现→双登记)+ **缺陷-规范对照表**(缺陷①②④⑤、上帝对象、ID 命名、可选类 24.8 件——每条规则挂本项目真实反面案例)。**CLAUDE.md**:原命名节替换为「代码规范(写代码前必读)」门 + 摘要,指向 docs/code-conventions.md 为单一事实源。回归:冒烟 74/74、ui_probe PASS(文档批不触代码,例行确认)。
27. **轮内刷新方案 A 落地(2026-09-12 用户拍板批)**:用户确认刷新实现(仅 Waiting 受理)与设计预期不符(预期 = 扫雷阶段遇推理死路、有剩余 AP 且 RAP 足够即当场刷新继续挖)。**影响分析先行**(三方案对比:A 轮内不打断轮次 / B 停手+刷新组合宏 / 时间税差异点破——"刷新是否触发敌方结算"是唯一实质差异;16 代码触点 + 8 文档 + 5 数值连锁清单)→ 用户拍板 **方案 A**:Active 相位当场换图继续挖、AP 保留不重置、不触发结算、RAP 够即可、**每轮兜底上限 2 次**(表值 refresh_max_per_round)。**实现**:A3 `request_refresh_active()`(仅扣 RAP)· A2 install/retire 增 `during_round` 显式通道(其余守卫不变)· B1 `can_request_refresh()` + 双相位重写 + 每轮计数 · **facts 身份快照隔离**(实现批新暴露的深坑:轮内换图后旧图已挖未结算格与新图坐标重叠,轮末 grant 错拿新图身份——解法 = 缓冲期 `query_full_snapshot` 冻结身份、授予直通快照绕过现行 mapping/_granted)· B4 `query_full_snapshot()` · HUD 按钮"弃图刷新(RAP -8 · 每轮至多 2 次)"。**验证**:冒烟 88/88(+14:当场换图/相位 AP 保留/RAP 扣减/上限拒绝/跨图 facts 完整兑现〔4 格跨三图〕/回放确定性)· 三探针全 PASS · 期望扫描持平(模拟策略不刷图——真人专用出口,playtest 观测项)。**调试教训**:蛆虫 HP 24(已调)误判 18 未掉血——排查先核对当前表值;GDScript lambda 对局部 int 按值捕获(smoke 计数器改容器)。**正式侧义务**:A3/B1/B4 GDD + game-concept 层级措辞 + registry 修订清单见切片 README"2026-09-12 轮内刷新"节;数值连锁(清图支配性条款⑤/真人刷图行为获取期望)待 playtest 实测。
28. **Task: Designing c3-difficulty-curve GDD**(2026-09-12 启动,/design-system --review solo)· File: `design/gdd/c3-difficulty-curve.md` · 上下文摘要已呈现(上游 D2/B2/B1 全 Approved;锁定事实:clause3_supply 满配破线约束、B1 条款⑤未闭合约束包、A1 Boss=Dmax 约定 + OQ6、A4 scope=global 语义位、B4 全部 provisional 值归 C3;切片实测现状:敌深度轴 D0-D4/供给 p0-0.4/基线通关 55-80%)
29. **主架构文档产出(2026-09-12,/create-architecture 全流程,solo 模式)**:`docs/architecture/architecture.md` v1.0 已写入(TD 自评 APPROVED WITH CONDITIONS;LP-FEASIBILITY 按 solo 跳过;`.claude/docs/director-gates.md` 缺失登记 QQ-10)。要点:① 20 系统五层映射(依据 systems-index 依赖分层,切片实现验证)② 模块所有权地图(Owns/Exposes/Consumes/引擎 API,含切片新增件 RewardSupplyController/LevelTable/level_runner)③ 四条数据流(帧更新/事件信号/存档快照/初始化顺序)④ API 边界契约表(GDD AC 前言为规范源)⑤ ADR 审计:现存 0 份;63 条 TR 可追溯性 = 46 条架构文档+GDD 承载 / 12 条待 ADR / 5 条随未设计系统,0 孤儿 ⑥ **Required ADRs 13 项分级**(必须编码前:ADR-0001 事件总线与编排载体〔推荐组合根直连 signal + Waiting 相位触发〕/ ADR-0002 渲染器与窗口〔推荐 2D 用 gl_compatibility〕/ ADR-0003 场景结构与棋盘渲染 / ADR-0004 测试载体与 CI;应有:ADR-0005 生成性能 / 0006 单位 API face 归属 / 0007 零伤害护栏落点 / 0008 切片机制正式化;可推迟:0009–0013)⑦ 架构七原则(Core headless / 单一事实源 / 封闭 RNG 可回放 / 编排唯一性 / fail-fast 零特判 / 依赖单向组合根 / 呈现层契约成文)⑧ QQ-01–10 开放问题。**同批执行**:review-mode.txt 写入 solo(用户拍板"前期不需参与太多");引擎参考 refresh 批(breaking-changes/deprecated-apis/VERSION/current-best-practices 四文件,风险 HIGH→MEDIUM)。**下一步(按 ADR 优先级)**:`/architecture-decision "event-bus-and-orchestration-carrier"` 等 4 个 Foundation ADR → /architecture-review(新会话)→ /gate-check 前置项(/test-setup /ux-design)。注意:与条目 28 的 C3 GDD 设计会话并行中——ADR-0001/0002 落定结果与 C3 无接口冲突(C3 消费 B1 对账输出为文档层事实依赖)。 → **GDD 完成(2026-09-12 同会话)**:12 节全部写入(用户全权委托——"所有选择按推荐",逐节问询按用户指示跳过;solo 模式专员代理跳过已在各节登记)。关键决策:① 承载结构 = 直填行值主体 + DifficultyTable 修饰结构位(MVP 空表,B2 Rule 10 兑现)② 切片 SLICE-TUNED 行集转正 MVP 默认曲线 ③ 难度期望表(通关率目标带 L1 基线 40–60%/供给平衡带 [1.1,2.0]——F5/F6)④ F1–F7 全部为设计期工具式、运行时零新增公式 ⑤ B1 条款③⑤/预警⑥约束承接:条款⑤ MVP 接受非支配设计态(C 量级不上调,OQ4 playtest 观测弃图率)⑥ A4 scope=global 语义定稿(仅 Boss/精英图,MVP 不产生行)⑦ Boss 血量占比 0.81 越带如实登记 OQ2。registry +3 条目(difficulty_table/difficulty_expectation_table/boss_dmax_convention)· systems-index C3 → Designed。**注意:未经 /design-review——solo 出稿待人工复核,独立评审须新会话 `/design-review design/gdd/c3-difficulty-curve.md`**。
29. **C3 GDD 落地切片 + 试玩采集清单(2026-09-12)**:用户拍板跳过 /design-review(solo 出稿待复核状态维持),C3 设计承诺直接落回切片试玩。落地:**DifficultyTable 结构位**(schema 域校验+越域 warning / 空表 difficulty.tres / ConfigDB 挂载 + resolve_difficulty_modifiers(精确匹配+clamp)/ B2.spawn 套乘钩子(行值快照前,MVP 空表恒 1.0))——AC-10 断言含注入套乘(×1.5/×2.0)与越域 clamp(50→10)验证;切片调参登记转正标记;**试玩采集清单**(OQ3 真人修正系数/OQ2 Boss 血量/OQ6 刷新使用/OQ4 弃图倾向/台阶可感知性/供给体感——README 专节)。冒烟 **96/96**(+8)。下一步 = 用户 F5 试玩采集 → OQ 裁决 → (可选)新会话 /design-review。
30. **Foundation 四 ADR 落定(2026-09-12,/architecture-decision ×4 批,solo 模式用户授权代决 + godot-specialist 子代理校验)**:ADR-0001(事件总线=组合根直连 signal + B1 Waiting 相位触发;信号实名 round_end_board/round_end_stopped;specialist 增补静态规则:core↔core 连接方法 Callable only / 发射者禁反向引用——RefCounted 析构即双向断连,真坑是 lambda 捕获 self 成环)· ADR-0002(gl_compatibility——绕开 4.6 Windows D3D12 新默认线;基座 1280×800 + canvas_items/expand 显式落盘)· ADR-0003(autoload 仅 {ConfigDB, RngService};**specialist 实质纠正:切片 BoardView 实为 GridContainer+逐格控件而非自绘 _draw()——ADR 按事实修正,_draw 迁移登记为 D1 候选工作项(三探针改造 + push_input 端到端 + 命中测试自建为隐藏成本);CJK 字体随包 = 运行时默认字体无 CJK 字形,硬性前置**)· ADR-0004(双载体定稿;**specialist 升格:S2 全局 rand* 函数禁令(绕开 RngService 漏洞)/ S5 core 禁裸引用 autoload 全局标识符(--script 模式不注册全局标识符——裸引用 parse error,GH #6360);CI 必配外部 wall-clock 超时;click_probe 口径修正 = "真实翻译出口";gdUnit4 = deferred(D2 OQ1 关闭形态)**)。产出:`docs/architecture/adr-0001~0004-*.md` 四文件(Status: Accepted)+ `docs/registry/architecture.yaml`(新建:interfaces ×3 / api_decisions ×6 / forbidden_patterns ×6)+ architecture.md §Required ADRs 四项标 ✅(骨架解冻)。**架构阶段正式编码前置条件全部满足**。下一步队列:/test-setup → /ux-design → (新会话)/architecture-review → /gate-check;需要用户的仅剩:切片 F5 试玩(条目 29b 的采集清单)+ C3 OQ 裁决 + 迭代期反馈。注:本条目与会话内另一条目 29(C3 批)编号并列,编号冲突系并行会话所致,内容不冲突。
31. **/test-setup 完成(2026-09-12,solo 模式用户授权代决)**:`tests/` 脚手架 + `.github/workflows/tests.yml` 已创建——**一处对 skill 默认的有意偏离**:skill 模板默认生成 gdUnit4 runner,按 ADR-0004(gdUnit4 deferred、双载体)改为项目自有协议。产出:tests/README.md(双载体文档 + 命名规范 + 证据矩阵 + 冒烟协议要点:--script 无 autoload/无全局标识符、quit(code)、manifest、reset_diagnostics、表读值推导)· tests/unit/(**example_test.gd = gate-check 要求的示例测试**,协议活样板)· tests/integration/ · tests/evidence/ · tests/smoke/critical-paths.md(**15 条项目真实关键路径**——挖掘/连锁/旗挡链/雷格通行/停手 RAP/结算归因/窗口单件/清图完美排雷/轮内刷新方案 A/hero_attack/关卡链/调整板层级回归/CJK 显示,面向表现手感,与切片 96 条自动化断言分工)· tests/run_all.gd(CI 冒烟统一入口,D2 AC-2b manifest 协议,正式工程落地后登记套件清单)· tests/static_scan.sh(**ADR-0004 S1–S8 可执行子集:S1/S2 全局随机禁令含 randi/randf/randf_range + S4 core 引擎依赖为硬失败,S3 警告级,S5–S8 登记为精化 TODO**;core/ 不存在时优雅跳过——已验证 exit 0)· .github/workflows/tests.yml(static-scan + smoke 双 job,**timeout 外部超时为硬性要求**,godot 4.7.2;仓库未初始化 git,首次 push 自动生效)。**gate-check Technical Setup 前置三项全满足**(tests/ 目录 ✓ workflows ✓ ≥1 示例测试 ✓)。剩余:/ux-design → (新会话)/architecture-review → /gate-check;用户侧 = F5 试玩采集。
32. **门检查前置工件补齐(2026-09-12,用户拍板"先补工件再跑门")**:用户 invoke /gate-check 后发现阶段漂移(stage.txt=Systems Design 但实际已在 Technical Setup 深处),选择先补工件。同批完成:① **`docs/architecture/requirements-traceability.md`**(新建——gate 要求的专用矩阵:63 条 TR 分层覆盖表,Foundation 36 条零缺口核验逐条列载体;Core 待 ADR-0006/0007,Presentation 待 D1 GDD/ADR-0011)② **ADR-0005 `save-contract-and-schema-versioning`**(新建 Accepted——SCHEMA_VERSION 比较归属 D3 + RNG 快照切点契约收拢,Foundation 层最后两条 pending TR 闭合)③ architecture.md §Required ADRs 重排(0005 已用 → 应有队列重编号为 0006–0009,可推迟 0010–0013)④ registry architecture.yaml 增 save_contract 条目。**当前缺口清单(Technical Setup → Pre-Production 门视角)**:/ux-design 两件套(interaction-patterns + accessibility-requirements)→ /architecture-review(**必须新会话**)→ /create-control-manifest(其前置 = architecture-review 通过 + ADR Accepted)→ gate-check。Systems Design → Technical Setup 门另需:D1 GDD(MVP 最后一块)+ /review-all-gdds(新会话)。用户侧唯一项 = F5 试玩采集。
30. **试玩日志器 + 诊断转储(2026-09-12 用户需求批——playtest 数据采集基建)**:① B1 新增 `settlement_snapshot` 信号(每结算末尾全量状态快照:判定段重构为 verdict 先算→快照→分支——快照含 despawn 前终局;板序号 _board_seq 归因)② 新组件 `presentation/playtest_logger.gd`(JSONL 持久化 user://logs/playtest_*.jsonl:session/settlement/battle_end/node/level_end 五类行 = 完整试玩时间线;环形缓冲 200 结算行/100 操作)③ HUD 诊断按钮(卡死点击 → 全量核心状态 + 环形缓冲 → diag_*.json——行为探针 _dump_state 产品化;GDScript 无运行时堆栈 API,状态等待型软锁正对症)。**日志首秀即抓真 bug**:_start_full_level 面板加成双写叠加(apply 写表 18 → runner 以 18 为基线 ×3 → atk 54)——修复 = 关卡模式单一应用路径(runner 写表),日志 atk 54→18 证实;教训 = 同一加成多应用路径须单一事实源 + JSONL 快照是数值回归最低成本探测器。冒烟 103/103(+7)。
34. **战斗屏 UX 规格产出(2026-09-12,/ux-design battle,自主模式用户委托"缺失补充")**:`design/ux/battle.md` 已写入(Status: Complete 待 /ux-review;14 节 + 上游义务对照表)。**最大决策 = 常驻双舞台分屏**(用户布局图拍板):战斗画面(252px 顶区)+ 角色信息(240px 左下)+ 扫雷图(中下 ~760px)+ 道具(280px 右下)+ 顶栏关卡进度条(1280×800 基座)——**对 B5"双舞台陷阱"的裁决输入 = 同屏双舞台第三形态**(非独立战斗场景),B5 前战斗表现美术测试按此布局出样。关键裁决:道具窗口 = 右栏原位激活(非中央弹窗);移动路径预览 = 合法性指示(A2 D1×6⑤ 悬案裁决,穿行动画留痕不采纳);结算明细带常驻战斗画面底部(P2 逐行归因,点击展开回看);状态效果空态 = 槽隐藏。**全部 D1 呈现义务逐条落位**(A2×6/A3/A4×3/B1×3〔UX Flag 结算屏+窗口〕/B2×4/B3×4/B4×5 + A1 EC5——spec §13 对照表供门禁核对),AC 含 entry 17 三条场景级硬性要求(信号载荷 schema 成文/场景级 headless 测试/信号时点可见性)+ 缺陷①④⑤回归断言。**登记缺口(gate-check Pre-Production 视角)**:`design/accessibility-requirements.md` 与 `design/ux/interaction-patterns.md` 两件套仍未建(spec 内建 WCAG AA 基线承诺,正式分层待补);相邻域屏 NodeOverlay/关卡结算建议后续 spec(design/ux/node-reward.md)。**下一步 = /ux-review design/ux/battle.md(新会话)→ D1 GDD(设计顺序第 10 位,MVP 最后一块,以本 spec 为呈现义务承载依据)→ /review-all-gdds → /gate-check**。**同日修订(用户反馈拍板)**:道具来源不呈现——库存列表逐件描述由"来源格/轮"改为**属性简述**(行值快照投影派生:伤害/回复/增益一句话;tooltip=完整描述+触发注记,不含来源);来源数据仍在 B4 窗口载荷契约中(不改数据层),归因职责由结算明细行的逐行来源标注承载(P2 不受影响)。
31. **试玩批次 1 → v3 数值批(2026-09-12,F7 流程首次完整实践)**:用户 6 项反馈(满血全通关/Boss OK 或可上调/刷新零使用/零弃图/DND 命名指令/道具先保留)→ 裁决:OQ3 方向确认(真人>>模拟)、OQ2 初步裁决(F3 带 [0.35,0.55]→[0.5,1.1])、OQ4 初步关闭(非支配成立)、OQ6 读数(盲猜墙不足非刷新太顺滑——密度杠杆留观测)。**v3 数值批**:atk +50%(7/5/9/6/9)、Boss 150/9、DND 命名(goblin/bugbear/ogre_chief——enemy_id 同步更名)、L2 锚行同步。**调试收获**:D0 hp 20 会被首轮盲挖粉尘(12)+先手(9)秒杀——旗回归断言 FAIL 抓获,回 24("有过程有痛感"原则:掉血压力 ≠ 秒杀);冒烟硬编码行值断言随数值批同步是维护成本(后续改数据驱动)。**v3 扫描**:基线 60% 带内上沿、败北 4/6 集中 Boss、天赋曲线成立。冒烟 103/103。C3 GDD 回写(F3/OQ/试玩批次记录)+ README + 本条。**下一批 = v3 真人试玩(OQ3 定量/OQ2 终裁)→ 视数据定 v4。**
32. **Peglin 对比研究报告(2026-09-12,用户问"Roguelike 体现"触发)**:报告 = `design/research/peglin-comparison-2026-09-12.md`(数据源 peglin.wiki.gg 逐页核实:Peglin 基础 HP 100、Forest 敌 60-65HP/1-5伤、Boss 900、精英 500、每场战后回复、每场遗物选择)。**三根因结论**:① 构筑密度差一个量级(Peglin 每场 1 次遗物选择 vs 我们每关 6 件——"局感"第一根因)② 遭遇零随机+线性无分支 ③ 资源模型不同(Peglin 战后回复+低伤多场 vs 我们无回复+高伤少场——**数值不可直接移植,只可比结构比例**)。**行动建议**:本切片可做 = 遭遇随机化(同敌种 unit_count 区间掷骰,不触 B2 行集锁定);后置 = 多波战斗(B1 波次表)/遗物协同(先设计协同再提密度)/战后回复(绑定敌 atk 下调)。用户决策点 = 是否本切片做遭遇随机化。
33. **遭遇随机化落地(2026-09-12 用户拍板——Peglin 对比报告结论 2 的本切片项)**:报告 `design/research/peglin-comparison-2026-09-12.md`(三根因:构筑密度/零随机/资源模型;数值不可移植只可比结构比例)。**用户拍板先做遭遇随机化**。C3 GDD 增补 Core Rule 8(unit_count 区间 [unit_count, unit_count_max] 均匀骰 + encounter 流 + B2 零随机纪律保持 + 教学位不加骰)。实现:RngService 第三流 encounter(SALT 0x5DEECE66D2545F491,三流计数器重播种断言同步)/ EnemyTable unit_count_max 字段(可省略,域 [unit_count,3])/ enemy.tres 三行区间(D0 [1,2]、D1 [2,3] hp13、D3 [2,3] hp18;D2/Boss 教学位固定)/ B1.begin_battle 掷骰(erow 预解析 → override 传 spawn)/ B2.spawn override 参数。registry rng_service 条目接口漂移登记。**扫描**:基线 47%(v3 定值 60% → 区间期望总量 +8% 叠加;F5 带内 ✓)——区间骰使难度分布更宽(运气进入遭遇层 = Roguelike 体核心)。冒烟 149/149(+46)。**待办**:批次 2 试玩(v3+区间双变量采集 OQ3 定量);多波战斗/遗物协同/战后回复 = Alpha 评估(报告第三节)。
35. **战斗屏 UX 批:评审通过 + pattern 库建立(2026-09-12,/team-ui 管线 solo 模式)**:① **上游契约批落地**——battle.md /ux-review(7 blocking)+ 用户四拍板(弃图刷新=挖掘期当场换图·雷图右上角按钮 / 保留每轮上限 2 / OQ8 本 spec 裁决采纳 tint+雾区全开信号 / 压暗改去饱和+金橙偏移)→ A3/A2/B1/systems-index/registry 直接修订(refresh 前移挖掘期:A3 Active 受理+cap 2、A2 Active·仅刷新路径装板、B1 `refresh_board` 编排+stopped/ap_exhausted 恒 same_board、旧旗作废、时间税失效预警 OQ3 联动)。**注意与切片 entry 27 命名对账**:切片代码用 provisional 名(`request_refresh_active()`/`can_request_refresh()`/`refresh_max_per_round`/`during_round`),GDD 用正式名(`request_refresh` Active 受理/`refresh_board`/`refresh_cap_per_round` 结构位)——语义一致,正式 D1 批统一命名 ② **/ux-review 独立复检**(全新上下文代理):1 blocking(systems-index:90 旧契约残留)+ 3 advisory 全部同批落稿 → **VERDICT: APPROVED**(§13 台账 27 项义务承接逐项实存验证)③ **interaction-patterns.md 已建**(用户拍板"先写核心 8"):双源拒绝反馈/原位窗口激活/逐行兑现明细带/悬停预承诺光标/点阵资源显示/模态 overlay 层级纪律/破坏性确认异位/禁用态即理由全文 + 12 目录占位(实现期回写义务)④ Phase 2 视觉 spec 跳过(用户拍板,art-bible §1–4 直接驱动)。**下一步 = Phase 3 单次协调实现**:ui-programmer 按 battle.md 改造 presentation/(五区布局/敌人卡/明细带/状态槽/图例/tooltip/教学提示/胜负终局)+ ux_* 遥测 + 探针扩展;solo 模式 Phase 4 总监评审流跳过,产出以冒烟+三探针兜底
36. **战斗屏五区改造落地(2026-09-12,battle.md 落地 ui-programmer 批——entry 35 的 Phase 3)**:core/ 与 data/ 零字节改动,presentation/ 重构为五区(A 28px 进度条 / B 252px 战斗画面〔英雄卡+敌人卡×1–3+轮次指示+明细带改造〕/ C 240px 数据框+状态槽×4 / D 区 AP 点阵条+BoardView 改造+toast+演出层 / E 区库存常读+原位窗口态)+ 全屏 States(去饱和 shader 明度不变/清图演出/Boss 影子/终局 overlay 胜金蜡封·败暮蓝/一次性提示去重)+ ux 遥测行族(round_input_ratio/round_exit/refresh_attempt/window_choice/reject/hint_shown——快照驱动,呈现层只订 B1)。模态统一登记序管理(缺陷⑤纪律),旧 hud_view.gd 删除。**批内发现并修复**:TunePanel 默认 visible=true 靠开始层遮蔽的历史 quirk(缺陷⑤家族,显式初始化);敌卡逐行重建踩掉死亡灰化(改就地更新);库存清空反馈被常读刷新覆盖(持有期);窗口态被 presenter 全量刷新 stomped(窗口期跳过常读重建——click_probe 首跑即抓)。Waiting 刷新代理按 OQ12 退役(UI 仅 Active 受理)。探针:ui_probe 增五区断言+L2 雾段;click_probe 增刷新确认链/图例/tooltip/模态遮挡/去饱和/首格计时(133–151ms ≤500ms)。回归:smoke 149/149 + 三探针 PASS(click_probe 六种子)。占位登记:意图映射/演出/字体(D1 正式化)归 B5/D1 批。
37. **伤害类型 × 护甲克制批落地(2026-09-12 用户拍板——设计会话设定表定稿"没有问题"后落程序)**:**结构**——敌人护甲类型 {无甲,护甲A,护甲B}(EnemyTable.armor_type,映射 goblin=none/bugbear=a/ogre_chief=b 教学梯度候选)× 主角攻击三段构成(①基础 atk×(1+attack_up) 不吃克制 ②伤害A=本轮资格格充能×克制 ③伤害B=首次标中雷充能×克制,与 weaken 同键每雷实例一次去重;三分量各自 floor 相加,hero_attack 行携带 base/dmg_a/dmg_b)+ 克制矩阵 SettlementTable.armor_effectiveness(特化 150/无甲 100/对位 50;刀/AOE/清图恒定表值不吃克制)+ 伤害A 单轮 cap 8 + **标错旗随机惩罚三选一**(enrage 暴走敌+25% / ambush+2 层 / off_guard 失衡我方+25%,dur=1,零新流确定性派生 (x×7+y×13+板×5)%3 同种子可回放,每雷格实例一次去重沿用)。**数值全部 provisional**(damage_a_per_cell=1/cap=8/damage_b_per_flag=2/矩阵/enrage·off_guard 25%/映射——登记于 .tres 注释,C3 按 F6 复算)。**验证**:冒烟 161/161(+12 专项断言:护甲三档传播/矩阵表值/三分量字段/flag_miss+反噬行/充能进攻击/派生回放)· ui_probe/tune_probe/click_probe 全 PASS。**实现坑**:enemy_card_view set_intent 引用越作用域变量 d → 类编译失败敌人卡零构建(ui_probe 抓获)——改成员变量 _armor 传递。**正式侧义务(GDD/registry 修订待文档批)**:B2(armor_type)/B1(三分量构成+反噬编排+矩阵载体)/B3(六行状态表+flag_miss 授予)/A2 OQ1(惩罚候选升级三选一+重复性=每雷实例一次)/registry(enemy/settlement/status_effect 条目+A3 条款②③锚重推导)/C3(provisional 数值接管)。**世界观记录**:design/research/lore-nest-metaphor-2026-09-12.md(雷=巢穴/旗=封印、伤害A=地利/伤害B=暴露、反噬=封印失败——6 个开放问题待新会话拍板后写回 game-concept)
38. **呈现层 code-review 修复批(2026-09-12,/code-review CHANGES REQUIRED → 用户拍板全项修复)**:全切片 53 脚本评审(含两 specialist 并行审查 views/ 与 smoke/+schemas/)裁决 7 项必改,本批清偿:① **TunePanel 封装破口**(视图直写 hero 表 + 视图 load smoke 驱动 core → 面板模拟 pct² 口径 + 模拟后表值残留污染真实对局)——重构纯视图信号外发,加成落表收口组合根 `_apply_hero_override` 单一路径(每次从基线幂等重算),模拟编排拆 `tune_sim_controller.gd` ② **意图徽标双翻译**(presenter 译中文投影 vs EnemyCardView 英文 key 匹配 → 色相/重击标记永久失效)——presenter 直传 B2 原键,渲染映射唯一定义处归 EnemyCardView ③ **C 区 RAP 死分支**(presenter 从不投影 a3.rap,A3 D1 清零反馈不可达)——持续投影 + 视图改 `_last_rap` 成员存储 ④ **smoke_all 恒真断言**改带标签真实断言 ⑤ **level_runner core↔core 接线 lambda ×4 → 方法 Callable**(ADR-0001 S6)⑥ **B1 `diagnostic_snapshot()` 诊断观测面**(main/click_probe 零私有字段直读)⑦ **main.gd 761→667**:节点构建/模态层级/叙事文案/模拟编排四拆分(ui_assembler + modal_stack + battle_narrator + tune_sim_controller,均无 class_name 走 preload;.uid 已生成)——剩余为 ADR 规定组合根职责,进一步压缩登记 D1 批候审。探针同步:ui_tune_probe 重写(真实按钮路径接缝 + 两条双写叠加回归断言)、click_probe 改诊断 API。**验证**:smoke 141/141 · 三探针全 PASS(click 六种子)。登记待办:自动玩家四份复制收口 / schema 溯源行 / S1–S8 扫描脚本化 + S1 豁免口径 / views 转发信号契约头注。
<!-- CONSISTENCY-CHECK: 2026-09-12 (lore 换轴概念层增补后全量) | GDDs checked: 10 (d2/a3/a4/b3/a1/a2/b2/b4/b1/c3) + game-concept/game-pillars/ux-battle/registry/session-state 专查 | Conflicts found: 2 🔴 (registry 09-11 批 fields 行漏网——category 五值残留三值 / p_min 默认 4 残留——同日修正完毕、复查清零) + 2 ⚠️ (B1/B3"雷是赌桌不是陷阱"措辞碰撞 / lore ②敌种行 vs 切片 DND 命名 goblin-bugbear-ogre_chief) + ℹ️ 在案确认(refresh 字段名统一归 D1 批、B3 weaken documented-exception 维持、已登记待办批对账清单核验在册) | 概念层专项: A2 OQ1 重复性已被 entry 37 切片实现收口(每雷实例一次)→ lore ⑤-3(c) 措辞可定"当轮反扑",待 A2 修订批确认 | Report: docs/consistency-report-2026-09-12.md -->
39. **封装收口批落地(2026-09-13,architecture-review 改编批 → 用户拍板 P1+P2+P3 全修)**:代码架构审查报告 `docs/architecture/code-architecture-review-2026-09-13.md`(Verdict: CONCERNS——分层纪律 S1–S7 全合规,封装欠账 = 核心状态公有 + 呈现层链式穿透)。本批清偿:**E1** B1 协作对象 a1/b2/b3/b4 私有化 + `presentation_snapshot()/is_battle_live()/stock_count()/query_reward_identity()` 成文呈现面(a2/a3 保留公有 = API Boundaries 登记的 D1 契约面);**E2** A2 board/revealed/flags 私有化 + `current_board()/reveal_record()`(board_view 直读 `.revealed` 的自相矛盾收口);**E3** B2 hero/enemies 私有化 + `hero_unit()/all_enemies()` 投影(presenter 死亡残位需求收进 API);**E5** A3/RngService 只读字段 getter-only 机制化(phase/ap/rap/last_round_end/master_seed);**O1+O2** 调试模式拆 `debug_session.gd`(调参语义单一实现;battle_created 先于 begin_battle = ADR-0001 接线归组合根 + 缺陷①时序——ui_probe 抓获初版 battle_ready 才接手 b1 的雾提示丢失);**O3** `core/damage_math.gd` 纯算术抽取 + board_generator 重复求解合并;**P3** 头注溯源 ×4 / B4 返回值统一 null / equivalence_supply 表行 duplicate / load→preload ×3。**附带根治基线既有重入隐患**:main `_on_board_action` 清图判定在 settle_batch 同步重入(关卡终局置空 b1)后摸 `b1.a2` 的 SCRIPT ERROR——click_probe stderr 归零(优于基线)。**验证**:冒烟 141/141 + 三探针 PASS(click done=true 失效=0 问题=0)。**P2 余项设计稿待用户审**:E4 表值参数化(B2.spawn 契约漂移须 GDD/registry 修订)+ O4 自动玩家四份复制收口(合并 W-3)。
40. **P2 收口批落地(2026-09-13,用户拍板两项均做——封装审查 P2 设计稿批准)**:① **E4 表值参数化**:db.hero 表写通道全删(main `_apply_hero_override`/runner `start_level` 写表),加成经 encounter 显式参数(B1 begin_battle +hero_atk/hero_max_hp 字段 → B2.spawn +atk_override/max_hp_override 参数,-1 表值兜底)——双写叠加 6→18→54 与双基线同步整类隐患移除,D2 单一事实源机制化;registry 新增 `hero_override_parameter_passing`(ADR-0009 候选,B2.spawn/B1 encounter 接口漂移登记,正式侧 GDD 修订随 ADR-0009 批);ui_tune_probe ⑦⑧ 断言语义升级(表运行期不可变 + 完整关卡路径单次加成快照断言)。② **O4 自动玩家单一实现**(合并 W-3):`smoke/auto_player.gd`(choose_dig + window_selection,差异参数化 heal_hp_div/round_gate/knife_compare),四消费方(smoke_all 3/3/best · monte_carlo 2/0/sum · dump_battle 3/3/sum · level_autoplay 2/3/best)+ click_probe 引用同步;同种子回放断言全绿 = 等价性证明。**验证**:冒烟 141/141 · 三探针 PASS。**遗留**:正式侧 B1/B2 GDD 修订(随 ADR-0009);main.gd 400 行目标受 ADR-0001 组合根职责约束(D1 正式化批候审)。
41. **art-bible §1–4 定稿(2026-09-13,/art-bible retrofit 批,solo 模式)**:`design/art/art-bible.md`(2026-09-10 初稿,§1–4 已有核心方向)本批按极性提案与 2026-09-12 隐喻换轴**定向增补定稿 §1–4**——① 绘制优先级栈插徽章位(数字 > 小人 > 旗 > 徽章 > 纹理 > 底色,§1.2/§3.4 同步);② 雷格隐喻换轴同步(雷 = 被惊动的巢穴,"机关"旧称退役;兑现档红更名危险红、色值不变);③ §1.4 格子样张测试验收标准成文(第一验收项 = 数字可读性硬指标 ≥4.5:1 可测判据 + 回退规则"改氛围色不改数字";雾格排除在外);④ §4.6 图标键契约冻结(效果图标 B3 数据六行 + sapped 提案键 / 奖励徽章 B4 默认根八行 + clear_blast 并列预留 / 格面类型图标五类〔提案 R1,未开格预读徽章墨族单色防色相泄漏〕/ 敌种线索键 B2 Rule 8 契约化〔行为拍姿态/环长直觉/强度档位/预告时序/恒定义务〕——键与通道分配冻结,终稿美术归样张与 asset-spec 批);⑤ 雾格资产规格一行占位(内容封禁期暂缓,雾重设计批再启)。registry terminology 增三词条(图标键/徽章/极性)+ referenced_by 增 art-bible;systems-index 新增 2026-09-13 art-bible 登记块(范围声明:§5–9 未建不阻塞 D1,D1 消费面五节点名)。AD 门禁 solo 跳过,出稿待人工复核。**冲突清单(不改 GDD/提案,列示待裁决)**:① game-concept 视觉锚原则 1"暗色地牢底色" vs art-bible 明亮底色反转(art-bible §1.3 2026-09-10 用户定稿在案;概念侧注记待概念层修订批);② B2 GDD 敌种键 {grub, ambusher} vs 切片 DND 更名 {goblin, bugbear, ogre_chief}(2026-09-12 consistency-check ⚠️ 在案;图标键契约以 GDD 键集为锚、声明键集事实源归 B2/C3);③ B4 GDD 默认根八行(clear_knife)vs 切片供给控制器批(clear_blast + 三可选类移 active_inject——entry 21 正式侧义务待清偿;徽章键按 reward_id 冻结、池归属无关);④ 极性提案 §3.5 跨文档回写清单全部待实施批(B3 四行→七行、B4 schema 扩列、A2 OQ1 关闭等)。**下一步 = D1 design-review(D1 GDD 已于 2026-09-13 solo 出稿并完成 lean 迁移,状态 Designed 未经评审——新会话跑 `/design-review design/gdd/d1-hud-framework.md`,PASS 后登记 Approved 即 MVP 十系统全收口)**。
42. **GDD lean 格式迁移完成(2026-09-13,11 份全量,子 agent 串行/双并发)**:全部系统级 GDD 按新模板(`.claude/docs/templates/game-design-document.md`)重排,`tools/gdd_lint.py` 11/11 PASS(表格占比 81–89%);修订注记出正文→版本历史表;原稿备份 `design/gdd/legacy-2026-09-13/`。**随迁按 registry 回执写现行的语义统一**:b3(weaken −65、D=1)、d2(八字段/p_perfect {100,200}/category 五值/ActionEconomyTable 现行值)、b1(EC-9 单件制)。**🔴 遗留重算义务**:B1 F1/F4/F5 派生数值(V_safe=D_ref 恒等式、E_life 12.0、E_dig 7.2、裕度 2.0×/2.6×)仍按 defense_up duration=2 旧基线——registry 已 D=1(2026-09-11 批),锚腿读数须 B1/C3 对账重跑(非格式批可改)。迁移代理另有 6 处保守处理待人工复核(b4 AC-19 对账对、c3 Rule 编号引用等,详见各文件版本历史)。
41. **零承伤根因分割探针 + playtest-09-12 Bug #1–#3 处置 + Q1 复扫基线(2026-09-13,playtest-2026-09-12 报告 Top3 授权任务)**:① **根因分割探针 `smoke/damage_probe.gd`**(boss/level 两模式——逐结算行打印 beat / atk.total / hero_defense 池 / d_tick)。快照盲区发现:settlement_snapshot 取在衰减段之后,时效 1 的 defense_up 当轮授予当轮衰减——真人局 JSONL buffs[] 恒空 ≠ 池为空(报告悬置机理);探针从结算行 pool_value 重建战斗段时点池值(effect_pool_map 表驱动)。**结论:零承伤根因 = 旧数据 defense_up -50×2 = clamp -100 触底 ×0(设计语义,H1 成立)**——fresh 池裸验 Boss 攻击链全额兑现(attack 9/9×2 · heavy 18/18 · charge 0 设计,6 轮击倒英雄)否证攻击链缺陷(H2);当前数据(-30 批)墙最深 -60 > clamp_lo -100 归零不可达(重证),墙轮残余 ×0.40。② **BUG-0002/0003/0004 建档**(production/qa/bugs/,自 BUG-0001 顺延):报告 #1 空遭遇 = **首轮全灭被快照盲区误读**(seed 42 回放 d0 spawn=1/d1 spawn=3 同签名;遭遇骰下限 ≥1 双闸 + 100 场扫描零越域;settlement_snapshot 增 spawn_count 字段机制化判别)→ Closed(Rejected as coded);报告 #2 Boss 攻击零兑现 = 设计语义非 bug → Closed(Rejected as coded);报告 #3 grant_node_active 绕过 _supply.notify_granted = 代码实锤 → **Fixed**(stock 受理后补入账,战斗域清零语义不变 = 零战斗数值影响,纯口径)。回归断言 +7(spawn_count 字段/等值 · 遭遇全深度×12 种子全域 60 场 · _smoke_attack_chain_fresh_pool 攻击链钉死 · _smoke_supply ⑦ 节点奖励入账)。③ **Q1 复扫基线**(level_monte_carlo 增 F4 两列「普通承伤/场% · Boss承伤%」——round 回卷分段 + 末段 Boss 判定;N=30×10 档、种子 4200–4229):基线通关率 **17%**(F5 带 40–60%)· +100% 档 43%(中天赋 ≥95%)· +200% 档 63%(高天赋 100%);普通场承伤 **35.1–43.1%/场**(带 ≤20%)· Boss 场 **71.3–134.9%**(带 ≤50%)(hp+0 档)——**F4/F5 全档位越带**,拆墙 + v3 atk 叠加后难度由严重不足摆向严重过剩。**本批零数值变更**(敌 hp 与奖励供给禁独立调参——registry 预警⑥联动;杠杆方向列待拍板,基线 = F7 测量输入)。**验证**:冒烟 **148/148**(141+7 新回归)· 三探针 PASS · damage_probe boss 7/7 + level 种子 42/43/44 全 PASS。**待拍板/待设计批**:①难度杠杆重拍板(F4/F5 越带——候选 atk 回撤/防御权重回升/供给联动,归 C3 F7);②墙语义候选改法(clamp 收紧/乘法衰减/重击拍穿防——/propagate-design-change + B3 GDD 文字同步);③供给量语义重拍板(每战斗 vs 关卡域首件保证——C3);④浅深度首轮跳战可玩性(C3)。切片 README 同批登记。
42. **D1 已收口(Designed,2026-09-13,/design-system solo 模式一次会话定稿)**:GDD 全节已写入(`design/gdd/d1-hud-framework.md`,12 节 + 台账表/冲突清单零占位,25 条 AC;**专员/总监代理全部跳过,出稿待人工复核;未经 /design-review,独立评审须新会话**)。定稿要点:① **呈现义务台账 27 项逐项落位**(A2×6/B2×4/B3×4/B4×5/B1×3/A4×3/A3+A1 EC5——Dependencies 落位表;battle.md §13 承接升格系统级验收,已裁决项全部直接继承)② **切片教训三条硬性要求兑现**(entry 17:载荷 schema 13 项成文表 Core Rule 17 / 场景级 headless 探针 AC-19 / 信号时点可见性规则 Core Rule 18 + AC-20)③ 订阅纪律按 ADR-0001 收窄——呈现层只订 B1 步骤流/快照与 runner,零事件外发面 = **命令式回执驱动**五面成文(registry `d1_presentation_surface` 登记;battle.md §Events Fired 措辞差列冲突⑥)④ **命名统一核销**(entry 35:request_refresh/refresh_cap_per_round 正式名,AC-25 grep 断言零残留)⑤ 程序化占位策略(art-bible §1.4 引用依据、样张未制作不阻塞、占位同受数字可读性硬指标)⑥ _draw 维持 GridContainer 裁决(ADR-0003 Decision 3 兑现——复议留样张后 OQ1)⑦ D1 裁决:MVP 格面徽章只在已开格呈现(B4 Rule 8 承接——冲突⑤)⑧ 发现冲突清单 ⑧ 项成文(不改已定稿正文与提案,含 game-concept 底色/B2 敌种键/clear_blast/极性提案批/订阅表述/A3 刷新计数读数/B1 settlement_snapshot 契约〔entry 41 并行批仍在切片使用该信号——OQ3 登记更增补登记必要性〕)。registry +1 条目 + terminology 两词条;systems-index D1 进度行 + 门禁增补记录块(接口漂移登记 ×3)。**下一步 =(新会话)`/design-review design/gdd/d1-hud-framework.md` → `/review-all-gdds` → `/gate-check`**(Systems Design → Technical Setup 门两件 = D1 GDD〔本条〕+ /review-all-gdds;**MVP GDD 设计顺序前 10 位全部收口**)。
42. **四项拍板落地(2026-09-13,用户四问裁决——本批零玩法数值变更)**:①**难度主杠杆 = 先真人试玩再拍**(F5 真人修正系数标定优先于数值调整;模拟基线 17% vs 带 40–60% 的越带方向真人预期只会更确认,杠杆方案保持待拍板:atk 回撤/组合/专项三案备选);②**墙语义维持现状 + 归零护栏**:smoke_all `_smoke_wall_zero_guard` 表级不变式(2×defense_up.magnitude > pool_clamp_lo——BUG-0003 事故类永久免疫,未来调参造出 ×0 墙即红灯强制重审);③**供给量先观测再拍**(BUG-0004 封口后账目完整,随复测批/真人局取数);④**跳战并入难度复测再议**:level_monte_carlo 增「跳战率」列(普通战斗 round-1 即胜占比),基线实测 **8%**(+50% 13% / +100% 24% / +150% 27% / +200% 38%)——**seed 42 为高跳战轨迹**(autoplay d0–d3 全部 round-1 全灭),真人局跳战体验含种子成分,基线下跳战是少数派,④复议数据前提成立。附带:defense_scan 过时期望标签清理(「墙轮承伤应为 0」→「合法 ×0.40 帽」)。**验证**:冒烟 **149/149**(+1 护栏)· 复扫各列与 Q1 基线逐值一致(collect_rows 开启不改变行为——确定性交叉验证)。**下一步(用户侧)**:真人试玩一局(观测清单:通关/败北节点 = F5 修正系数分子;普通场掉血体感;Boss 战轮数;d0–d3 跳战与否;治疗包缺血时刻与库存残留 = 拍板③数据)→ 会话分析 JSONL 出修正系数与①③④复议数据。
40. **A5 扫雷辅助道具 GDD 定稿(2026-09-14,/design-system solo 模式一次会话——用户设计指令"每个维度都要有对应道具,稀有道具尝试高数值和多维度结合")**:`design/gdd/a5-minesweeper-aux-items.md`(lean 格式,lint PASS 表格占比 84%)· registry 登记 `a5_aux_items` 条目 + terminology 四词条(叠加层/真视窄域护栏/渗透率)+ `variation_table.counter_item_ids` 回填 [probe_dust](A4 预授权 A5-1 义务闭环)· systems-index 门禁增补块 + A5 状态 Designed。**设计要点**:五维度框架 {info, risk, action, plan, counter} + F2 覆盖谓词("每维度都有对应道具"= 加载后内容审计断言,机器可查)· 承重护栏 = 真视窄域(替代推理 ≤3×3、恢复推理可全图——P1 防塌方,schema 校验强制)· MVP 六行 = 四常规单维(显影尘/工兵令/探宝罗盘/探巢摆钟,t2)+ 两稀有多维高数值(地穴全图卷 = 全雾显影×全图预读、爆破工兵包 = +4 AP×3×3 真视,t3、≈0.17 件/板)· 获取挂 B4(aux_item 预留枚举激活——义务 B4×①…⑤)· 使用经 B1 挖掘期编排(use_aux 规范序 validate→apply/grant→consume 序即原子——义务 B1×①②③)· 板级叠加层三集(零特判延伸——A2 代码零 A5 分支、零回写 A2/B4、随图消亡)· A3 grant_ap 第 9 API 接口漂移预授权(义务 A3×①)· 21 项跨 GDD 义务清单 + F1–F3 + 14 AC;A4 EC6/OQ2 与 B4 OQ2 收口。**生效前提**:B4/D2/A3 修订批兑现前 aux 行入池会加载致命(B4 Rule 1 预留值拒绝)——AC-12/13 deferral 已登记。**待办**:/design-review(新会话)→ 对侧修订批(B4/D2/A3/B1/D1)→ UX Flag(/ux-design Phase 4 前置);设计顺序下一站 = C3 复核批/C2。
## Session Extract — /review-all-gdds 2026-09-14
- **Verdict: FAIL**——2 blocking(① B3/B1:defense_up 减伤墙批 −30 未回写 owner、B1 锚算术三重漂移致条款③⑤闭合回执失效;② D2 漂移批五处:encounter 流/pool_tag active_inject/active_p0·decay/k_dmg 禁区/clear_blast 行集+HelperItemTable 更名)+ ⚠️×16 挂各修订批;B3/B1/D2 已标 Needs Revision。报告:`design/gdd/gdd-cross-review-2026-09-14.md`
- **同日 A5**:/design-review --solo 3 blocking + 5 recommended 核销,用户拍板两项边缘规则(area_3x3 边缘窗口裁剪 / 零信息目标不可用不消耗)后免复审标 **Approved**;日志 `design/gdd/reviews/a5-minesweeper-aux-items-review-log.md`
- **下一步**:新会话按报告 §七 批调度跑回写批(D2/B3 → B1 重算 → B4 规格 → C3 收口 → 零散)→ `/review-all-gdds since-last-review` 增量复核 → PASS 再 `/create-architecture`;⚠️ 评审期间检测到并行会话修改 GDD(C3 回写批半途落地致两代理结论互斥)——批收口前勿多会话并行改设计文档
43. **C2 冒险结构 GDD 定稿(2026-09-14,/design-system solo 模式一次会话定稿,与 /review-all-gdds 并行——C2 为新增文件零冲突)**:`design/gdd/c2-adventure-structure.md`(lean 格式,lint PASS 表格占比 86%)· registry 新增 `level_table` / `adventure_table` 两条件目 + 补登 `hero_override_parameter_passing`(切片 E4 批实现但 registry 缺登——缺口闭合,owner=b1,ADR-0009 候选状态注记)+ terminology 三词条(HP 账本/关卡收束点/关卡大奖励)· systems-index 门禁增补块 + C2 状态 Designed。**C2 待决四问收口**:① 关卡序列 = MVP N=2 线性(L1 → L2 雾解锁台阶),冒险通关 = L2 Boss;加关 = 内容批,N=2 生效前提 = C3 L2 深度轴行值填充批(未落地前 N=1 合法态)② 大奖励 = 上限 +10 / 血回满 / 代币 +10 三件固定(不进库存域、末关不兑付;血回满与 C3 满血开局校准口径闭合——F1 冒险通关率合成 [6,20]% 的前提)③ 失败重开 = 死亡即冒险终、重开全新种子、放弃同失败型(MVP 无 UI 入口)④ C1/C2 边界 = 收束点在 C1(先调 B1 level_clear 再宣布 level_end),接口契约四件套(start_level / report_battle_end / heal_clamped / level_end)为 C1 GDD 强制输入。**切片先例切分转正**:level_runner 冒险域归 C2、关内行进归 C1;两处切片简化改写(逐关播种 → 冒险单种子;每关 HP 回满 → 跨关延续)。**下游义务**:C3×1(L2 行值——生效前提)· D2×2(reseed 入口 / AdventureTable 建表)· B1×1(begin_battle 入参供给方转正)· C4×2(远)。**下一步 =(新会话)/design-review design/gdd/c2-adventure-structure.md → C1 关卡节点地图(设计顺序第 14 位,以 C2 接口契约四件套为强制输入)**;solo 出稿待人工复核注记已入 GDD 头部。
44. **完美策略档测量批(2026-09-14,用户拍板"增加完美策略档测试验证"——OQ7 技能轴上界仪,零玩法数值变更)**:auto_player 增 single+subset 完美求解器(零盲挖/全标旗/卡死刷新,只读 A2 查询面、去 safe_set oracle)+ level_autoplay `policy` 参数 + level_monte_carlo 策略轴(CLI 第 3 参)与踩雷/刷新观测列(零踩雷断言 quit(1));core 零改动,冒烟 **149/149**。**读数(N=30,种子 4200–4229)**:0 加成完美档通关 **100%**、剩 HP 均 **47.4/50**、踩雷 0.00(弱策略基线 60%);+50%~+200% 恒 100% 满血——F5 带与 S/K 区间对技能轴零分辨力,calibration_gap 获机制解释与定量上界。**待拍板**:完美档目标带口径 + 杠杆(r_boss 走廊/群战/decay 0.6 + 新候选"上限掺运气"系:供给量值随机化/承伤硬地板);详情 = 切片 README「2026-09-14 完美策略档测量批」。
45. **伤害量值区间批(2026-09-14,用户拍板②——验收口径改完美策略档 0 加成 ≤40%;两步全落地 + 无效性实测)**:第一步奖励侧五行 power 区间化(heal_minor[2,6]/knife_t1[5,11]/heal_pack[6,18]/knife_adv[10,22]/clear_blast[25,55]——身份批追加取号,E14 快照口径不变,B1/呈现零改动)+ 第二步敌方 atk 区间(六行 ±3,遭遇骰同流 spawn 期整战持久——每拍抖动否决〔数字可读性锚〕,B2 零随机保持,spawn +1 参数接口漂移登记);中点恒等现值 = A3 条款①锚不漂移;schema 双批校验(成对/中点锚/buff 禁止)+ smoke `_smoke_power_interval` 4 断言;冒烟 **154/154**。**实测(N=30)**:完美档 0 加成仍 **100%**(承伤 3.5→3.9——方差真实流动被 47/50 血缓冲全吞);基线档 17% 不变——**数值区间杠杆族对 ≤40% 线无效已坐实**(完美玩家结构性优势 = 零踩雷直伤 + weaken 顶格 + 快杀)。**待用户三选裁决(C3 OQ7 主项)**:①承伤硬地板(B1/B2)②weaken 饱和语义(B3/B1——拆全标旗基石)③极端宽度(建议否决——毁基线与可读性);区间机制保留(普通玩家方差体验有效)。registry reward_table/enemy 条目 + clause5 义务 + C3 行值总表/F5/OQ7 同批登记。
+1
View File
@@ -0,0 +1 @@
Systems Design